diff --git a/.gitignore b/.gitignore index d33e8d5a..a3f02229 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,7 @@ Tools/unix/zx/zx !Source/ver.lib !Source/Apps/FAT/FAT.COM +!Source/Apps/copysl/copysl.com !Source/Apps/ZMP/zmpx.com !Source/Apps/ZMD/zmdsubs.rel !Source/Apps/Test/vdctest/font.asm @@ -99,6 +100,7 @@ Tools/unix/zx/zx !Source/ZRC512/*.bin !Source/Z1RCC/*.bin !Source/ZZRCC/*.bin +!Source/FZ80/*.bin !Tools/cpm/** !Tools/unix/zx/* !Tools/zx/* @@ -109,4 +111,142 @@ Source/ZPM3/zccp.com Source/ZPM3/zpmldr.com Source/ZPM3/genbnk.dat -Source/ZSDOS/zsdos.err \ No newline at end of file +Source/ZSDOS/zsdos.err + +# Lets explicit list all generate untracked binary files +Binary/Apps/Tunes/bgm.vgm +Binary/Apps/Tunes/ending.vgm +Binary/Apps/Tunes/inchina.vgm +Binary/Apps/Tunes/shirakaw.vgm +Binary/Apps/Tunes/startdem.vgm +Binary/Apps/Tunes/wonder01.vgm +Binary/Apps/fdu.doc +Binary/Apps/zmconfig.ovr +Binary/Apps/zminit.ovr +Binary/Apps/zmp.doc +Binary/Apps/zmp.hlp +Binary/Apps/zmterm.ovr +Binary/Apps/zmxfer.ovr +Binary/CPM3/bdos3.spr +Binary/CPM3/bios3.spr +Binary/CPM3/bnkbdos3.spr +Binary/CPM3/bnkbios3.spr +Binary/CPM3/cpm3fix.pat +Binary/CPM3/genbnk.dat +Binary/CPM3/gencpm.dat +Binary/CPM3/genres.dat +Binary/CPM3/readme.1st +Binary/CPM3/resbdos3.spr +Binary/CPNET/cpn12duo.lbr +Binary/CPNET/cpn12mt.lbr +Binary/CPNET/cpn12ser.lbr +Binary/CPNET/cpn3duo.lbr +Binary/CPNET/cpn3mt.lbr +Binary/CPNET/cpn3ser.lbr +Binary/RCEZ80_std.upd +Binary/RCZ80_std.upd +Binary/ZPM3/bnkbdos3.spr +Binary/ZPM3/bnkbios3.spr +Binary/ZPM3/gencpm.dat +Binary/ZPM3/resbdos3.spr +Binary/ZPM3/zinstal.zpm +Binary/hd1k_prefix.dat +Source/BPBIOS/def-ww.lib +Source/CPNET/cpn12duo.lbr +Source/CPNET/cpn12mt.lbr +Source/CPNET/cpn12ser.lbr +Source/CPNET/cpn3duo.lbr +Source/CPNET/cpn3mt.lbr +Source/CPNET/cpn3ser.lbr +Source/Fonts/font8x11c.asm +Source/Fonts/font8x11c.bin +Source/Fonts/font8x11u.asm +Source/Fonts/font8x16c.asm +Source/Fonts/font8x16c.bin +Source/Fonts/font8x16u.asm +Source/Fonts/font8x8c.asm +Source/Fonts/font8x8c.bin +Source/Fonts/font8x8u.asm +Source/Fonts/fontcgac.asm +Source/Fonts/fontcgac.bin +Source/Fonts/fontcgau.asm +Source/Fonts/fontvgarcc.asm +Source/Fonts/fontvgarcc.bin +Source/Fonts/fontvgarcu.asm +Source/HBIOS/RCEZ80_std.upd +Source/HBIOS/RCZ80_std.upd +Source/HBIOS/build_env.cmd +Source/HBIOS/hbios_env.sh +Source/Images/blank144 +Source/Images/blankhd1k +Source/Images/blankhd512 +Source/Images/fd144_aztecc.img +Source/Images/fd144_bascomp.img +Source/Images/fd144_cowgol.img +Source/Images/fd144_cpm22.img +Source/Images/fd144_cpm3.img +Source/Images/fd144_fortran.img +Source/Images/fd144_games.img +Source/Images/fd144_hitechc.img +Source/Images/fd144_nzcom.img +Source/Images/fd144_qpm.img +Source/Images/fd144_tpascal.img +Source/Images/fd144_ws4.img +Source/Images/fd144_z80asm.img +Source/Images/fd144_zpm3.img +Source/Images/fd144_zsdos.img +Source/Images/hd1k_aztecc.img +Source/Images/hd1k_bascomp.img +Source/Images/hd1k_blank.img +Source/Images/hd1k_bp.img +Source/Images/hd1k_combo.img +Source/Images/hd1k_cowgol.img +Source/Images/hd1k_cpm22.img +Source/Images/hd1k_cpm3.img +Source/Images/hd1k_fortran.img +Source/Images/hd1k_games.img +Source/Images/hd1k_hitechc.img +Source/Images/hd1k_nzcom.img +Source/Images/hd1k_qpm.img +Source/Images/hd1k_tpascal.img +Source/Images/hd1k_ws4.img +Source/Images/hd1k_z80asm.img +Source/Images/hd1k_zpm3.img +Source/Images/hd1k_zsdos.img +Source/Images/hd512_aztecc.img +Source/Images/hd512_bascomp.img +Source/Images/hd512_blank.img +Source/Images/hd512_combo.img +Source/Images/hd512_cowgol.img +Source/Images/hd512_cpm22.img +Source/Images/hd512_cpm3.img +Source/Images/hd512_dos65.img +Source/Images/hd512_fortran.img +Source/Images/hd512_games.img +Source/Images/hd512_hitechc.img +Source/Images/hd512_nzcom.img +Source/Images/hd512_qpm.img +Source/Images/hd512_tpascal.img +Source/Images/hd512_ws4.img +Source/Images/hd512_z80asm.img +Source/Images/hd512_zpm3.img +Source/Images/hd512_zsdos.img +Source/RomDsk/rom0_una.dat +Source/RomDsk/rom0_wbw.dat +Source/RomDsk/rom128_una.dat +Source/RomDsk/rom128_wbw.dat +Source/RomDsk/rom256_una.dat +Source/RomDsk/rom256_wbw.dat +Source/RomDsk/rom384_una.dat +Source/RomDsk/rom384_wbw.dat +Source/RomDsk/rom896_una.dat +Source/RomDsk/rom896_wbw.dat +Source/ZCPR-DJ/zcprdemo.com +Source/ZPM3/autotog.com +Source/ZPM3/clrhist.com +Source/ZPM3/cpmldr.com +Source/ZPM3/setz3.com +Tools/unix/OpenSpin/build/ +Tools/unix/zxcc/config.h +Tools/unix/zxcc/zxcc +Binary/Apps/bbcbasic.txt diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..7c12e6b0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "files.trimTrailingWhitespace": false, + "files.eol": "\r\n" +} diff --git a/Binary/Apps/Clean.cmd b/Binary/Apps/Clean.cmd index 2c3c648e..49043dc1 100644 --- a/Binary/Apps/Clean.cmd +++ b/Binary/Apps/Clean.cmd @@ -8,5 +8,6 @@ if exist *.hlp del *.hlp if exist Tunes\*.pt? del Tunes\*.pt? if exist Tunes\*.mym del Tunes\*.mym if exist Tunes\*.vgm del Tunes\*.vgm +if exist bbcbasic.txt del bbcbasic.txt pushd Test && call Clean || exit /b 1 & popd diff --git a/Binary/Apps/Makefile b/Binary/Apps/Makefile index 940d9ae2..dc268ac8 100644 --- a/Binary/Apps/Makefile +++ b/Binary/Apps/Makefile @@ -8,4 +8,4 @@ all:: mkdir -p Tunes clean:: - @rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm + @rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm bbcbasic.txt diff --git a/Binary/Apps/Test/inttest.doc b/Binary/Apps/Test/inttest.doc new file mode 100644 index 00000000..686c140a --- /dev/null +++ b/Binary/Apps/Test/inttest.doc @@ -0,0 +1,44 @@ +INTTEST +======= + +RomWBW includes an API allowing applications to "hook" interrupts. +The `INTTEST` utility allows you to test this functionality. + + +** Syntax ** + +`INTTEST` + + +** Usage ** + +`INTTEST` is an interactive application. At startup, it will display +a list of the interrupt vector slots in your system along with the +current vector address for each of them. + +It then prompts you to enter the slot number (in hex) of a vector to +hook. After entering this, the application will watch the hooked +vector and countdown from 0xFF to 0x00 as interrupts are noted. + +When the counter reaches 0x00, the interrupt is unhooked and the +application terminates. The application can also be terminated by +pressing . + + +** Notes ** + +If your system is running without interrupts active, the application +will terminate immediately. + +All slots have vectors even if the corresponding interrupt is not +doing anything. In this case, the vector is pointing to the "bad +interrupt" handler. + +If you hook a vector that is not receiving any interrupts, the +down-counter will not do anything. + + +** Etymology* * + +The `INTTEST` command is an original product and the source code is +provided in the RomWBW distribution. diff --git a/Binary/CPM22/Clean.cmd b/Binary/CPM22/Clean.cmd new file mode 100644 index 00000000..1534a178 --- /dev/null +++ b/Binary/CPM22/Clean.cmd @@ -0,0 +1,4 @@ +@echo off +setlocal + +if exist *.sys del *.sys diff --git a/Binary/CPM22/Makefile b/Binary/CPM22/Makefile new file mode 100644 index 00000000..e7fda1a3 --- /dev/null +++ b/Binary/CPM22/Makefile @@ -0,0 +1,7 @@ +TOOLS = ../../Tools +MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr) + +include $(TOOLS)/Makefile.inc + +clean:: + @rm -f *.sys diff --git a/Binary/CPM22/ReadMe.txt b/Binary/CPM22/ReadMe.txt new file mode 100644 index 00000000..1f0379b5 --- /dev/null +++ b/Binary/CPM22/ReadMe.txt @@ -0,0 +1,23 @@ +*********************************************************************** +*** *** +*** R o m W B W *** +*** *** +*** Z80/Z180 System Software *** +*** *** +*********************************************************************** + +This directory contains the CP/M 2.2 system files for the RomWBW CP/M 2.2 +adaptation. All of these files are already included on the CP/M +boot disk images. However if you are creating a CP/M boot disk +manually, you should copy all of these files to the boot disk. + +Note: Two file have been provided one for RomWBW HBIOS, and one for UNA +BIOS. One of these files must be installed on the system boot track. +This is usually achieved by the SYSCOPY utility e.g. + +SYSCOPY a:=cpm_wbw.sys + +These files should also be copied to any CP/M 2.2 boot disks on your +system when you upgrade your ROM firmware. Some of these files +*must* match the version of the RomWBW firmware you are using for +proper operation of your system. diff --git a/Binary/Clean.cmd b/Binary/Clean.cmd index c6ad4ab5..110393d5 100644 --- a/Binary/Clean.cmd +++ b/Binary/Clean.cmd @@ -12,6 +12,9 @@ if exist *.pdf del *.pdf if exist *.eeprom del *.eeprom pushd Apps && call Clean || exit /b 1 & popd +pushd CPM22 && call Clean || exit /b 1 & popd pushd CPM3 && call Clean || exit /b 1 & popd +pushd QPM && call Clean || exit /b 1 & popd +pushd ZSDOS && call Clean || exit /b 1 & popd pushd ZPM3 && call Clean || exit /b 1 & popd pushd CPNET && call Clean || exit /b 1 & popd diff --git a/Binary/Makefile b/Binary/Makefile index 76f45163..2d8595c3 100644 --- a/Binary/Makefile +++ b/Binary/Makefile @@ -1,6 +1,6 @@ TOOLS = ../Tools MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.img *.rom *.com *.eeprom) -SUBDIRS = Apps CPM3 ZPM3 CPNET +SUBDIRS = Apps CPM22 CPM3 QPM ZSDOS ZPM3 CPNET include $(TOOLS)/Makefile.inc diff --git a/Binary/QPM/Clean.cmd b/Binary/QPM/Clean.cmd new file mode 100644 index 00000000..1534a178 --- /dev/null +++ b/Binary/QPM/Clean.cmd @@ -0,0 +1,4 @@ +@echo off +setlocal + +if exist *.sys del *.sys diff --git a/Binary/QPM/Makefile b/Binary/QPM/Makefile new file mode 100644 index 00000000..3f7ea93b --- /dev/null +++ b/Binary/QPM/Makefile @@ -0,0 +1,7 @@ +TOOLS = ../../Tools +MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr) + +include $(TOOLS)/Makefile.inc + +clean:: + @rm -f *.sys *.bin diff --git a/Binary/QPM/ReadMe.txt b/Binary/QPM/ReadMe.txt new file mode 100644 index 00000000..8386b13f --- /dev/null +++ b/Binary/QPM/ReadMe.txt @@ -0,0 +1,21 @@ +*********************************************************************** +*** *** +*** R o m W B W *** +*** *** +*** Z80/Z180 System Software *** +*** *** +*********************************************************************** + +This directory contains the QPM 2.7 system files for the RomWBW QPM 2.7 +adaptation. All of these files are already included on the QPM +boot disk images. However if you are creating a QPM boot disk +manually, you should copy all of these files to the boot disk. + +Note: Two file have been provided one for RomWBW HBIOS, and one for UNA +BIOS. One of these files must be installed on the system boot track. +Refer to the QPM Documentation for installing QPM + +These files should also be copied to any QPM boot disks on your +system when you upgrade your ROM firmware. Some of these files +*must* match the version of the RomWBW firmware you are using for +proper operation of your system. diff --git a/Binary/ReadMe.txt b/Binary/ReadMe.txt index d25fa002..bdd7f0cd 100644 --- a/Binary/ReadMe.txt +++ b/Binary/ReadMe.txt @@ -6,37 +6,37 @@ *** *** *********************************************************************** -This directory ("Binary") is part of the RomWBW System Software -distribution archive. It contains the completed binary outputs of -the build process. As described below, these files are used to +This directory ("Binary") is part of the RomWBW System Software +distribution archive. It contains the completed binary outputs of +the build process. As described below, these files are used to assemble a working RetroBrew Computers system. -The files in this directory are created by the build process that is -documented in the ReadMe.txt file in the Source directory. When -released the directory is populated with the default output files. -However, the output of custom builds will be placed in this directory +The files in this directory are created by the build process that is +documented in the ReadMe.txt file in the Source directory. When +released the directory is populated with the default output files. +However, the output of custom builds will be placed in this directory as well. -If you only see a few files in this directory, then you downloaded -just the source from GitHub. To retrieve the full release download -package, go to https://github.com/wwarthen/RomWBW. On this page, -look for the text "XX releases" where XX is a number. Click on this -text to go to the releases page. On this page, you will see the -latest releases listed. For each release, you will see a package -file called something like "RomWBW-2.9.0-Package.zip". Click on the +If you only see a few files in this directory, then you downloaded +just the source from GitHub. To retrieve the full release download +package, go to https://github.com/wwarthen/RomWBW. On this page, +look for the text "XX releases" where XX is a number. Click on this +text to go to the releases page. On this page, you will see the +latest releases listed. For each release, you will see a package +file called something like "RomWBW-2.9.0-Package.zip". Click on the package file for the release you want to download. ROM Firmware Images (_.rom) ------------------------------------- -The files with a ".rom" extension are binary images ready to program -into an appropriate PROM. These files are named with the format -_.rom. refers to the primary platform such as Zeta, -N8, Mark IV, etc. refers to the specific configuration. In -general, there will be a standard configuration ("std") for each -platform. So, for example, the file called MK4_std.rom is a ROM -image for the Mark IV with the standard configuration. If a custom -configuration called "custom" is created and built, a new file called +The files with a ".rom" extension are binary images ready to program +into an appropriate PROM. These files are named with the format +_.rom. refers to the primary platform such as Zeta, +N8, Mark IV, etc. refers to the specific configuration. In +general, there will be a standard configuration ("std") for each +platform. So, for example, the file called MK4_std.rom is a ROM +image for the Mark IV with the standard configuration. If a custom +configuration called "custom" is created and built, a new file called MK4_custom.rom will be added to this directory. Documentation of the pre-built ROM Images is contained in @@ -54,52 +54,52 @@ contents. Refer to the RomWBW User Guide for more information. ROM Executable Images (_.com) --------------------------------------- -When a ROM image (".rom") is created, an executable version of the -ROM is also created. These files have the same naming convention as -the ROM Image files, but have the extension ".com". These files can +When a ROM image (".rom") is created, an executable version of the +ROM is also created. These files have the same naming convention as +the ROM Image files, but have the extension ".com". These files can be copied to a working system and run like a normal CP/M application. -When run on the target system, they install in RAM just like they had +When run on the target system, they install in RAM just like they had been loaded from ROM. This allows a new ROM build to be tested without reprogramming the actual ROM. -WARNING: In a few cases the .com file is too big to load. If you get -a message like "Full" or "BAD LOAD" when trying to load one of the -.com files, it is too big. In these cases, you will not be able to +WARNING: In a few cases the .com file is too big to load. If you get +a message like "Full" or "BAD LOAD" when trying to load one of the +.com files, it is too big. In these cases, you will not be able to test the ROM prior to programming it. VDU ROM Image (vdu.rom) ----------------------- -The VDU video board requires a dedicated onboard ROM containing the -font data. The "vdu.rom" file contains the binary data to program +The VDU video board requires a dedicated onboard ROM containing the +font data. The "vdu.rom" file contains the binary data to program onto that chip. -Disk Images (fd_*.img, hd_*.img, psys.img) ------------------------------------------- +Disk Images (fd_*.img, hd_*.img) +-------------------------------- -RomWBW includes a mechanism for generating floppy disk and hard disk -binary images that are ready to copy directly to a floppy, hard disk, -CF Card, or SD Card which will then be ready for use in any +RomWBW includes a mechanism for generating floppy disk and hard disk +binary images that are ready to copy directly to a floppy, hard disk, +CF Card, or SD Card which will then be ready for use in any RomWBW-based system. -Essentially, these files contain prepared floppy and hard disk images -with a large set of programs and related files. By copying the -contents of these files to appropriate media as described below, you +Essentially, these files contain prepared floppy and hard disk images +with a large set of programs and related files. By copying the +contents of these files to appropriate media as described below, you can quickly create ready-to-use media. Win32DiskImager or RawWriteWin can be used to copy images directly to media. These programs are included in the RomWBW Tools directory. -The fd_*.img files are floppy disk images. They are sized for 1.44MB -floppy media and can be copied to actual floppy disks using -RawWriteWin (as long as you have access to a floppy drive on your -Windows computer). The resulting floppy disks will be usable on any +The fd_*.img files are floppy disk images. They are sized for 1.44MB +floppy media and can be copied to actual floppy disks using +RawWriteWin (as long as you have access to a floppy drive on your +Windows computer). The resulting floppy disks will be usable on any RomWBW-based system with floppy drive(s). -Likewise, the hd512_*.img and hd1k_*.img files are hard disk images. -Each file is intended to be copied to the start of any type of hard -disk media (typically a CF Card or SD Card). The resulting media will -be usable on any RomWBW-based system that accepts the corresponding +Likewise, the hd512_*.img and hd1k_*.img files are hard disk images. +Each file is intended to be copied to the start of any type of hard +disk media (typically a CF Card or SD Card). The resulting media will +be usable on any RomWBW-based system that accepts the corresponding media type. NOTE: The hd512_*.img files are equivalent to the hd_*.img @@ -109,39 +109,86 @@ maximum number of CP/M directory entries from 512 to 1024. Refer to the ReadMe.txt in the Source/Images directory for details. -Documentation of the pre-built disk images is contained in the +Documentation of the pre-built disk images is contained in the "RomWBW User Guide" found in the Doc directory. The contents of the disk images is contained in the "RomWBW Disk Catalog", but it is significantly out-of-date. -The contents of the floppy/hard disk images are created by -the BuildImages.cmd script in the Source directory. Additional -information on how to generate custom disk images is found in the +The contents of the floppy/hard disk images are created by +the BuildImages.cmd script in the Source directory. Additional +information on how to generate custom disk images is found in the Source\Images ReadMe.txt file. -The psys.img file contains a full implementation of the UCSD p-System -for the Z80 running under RomWBW. This image file must be placed on -disk media by itself (not appended or concatenated with hd*.img files. -Refer to the Source/pSys/ReadMe.txt file for more information on the +Disk Images (hd512_combo.img, hd1k_combo.img, *_std_hd1k_combo.img) +------------------------------------------------------------------- + +The hd512_combo.img and hd1k_combo.img file are the primary combo +disk image files suitable for most platforms. + +The *_std_hd1k_combo.img files are platform specific combo files +typically used in romless platforms, they also contain RomWBW binary code +that is loaded at boot time into RAM + +Disk Images (hd1k_prefix.dat, *_std_hd1k_prefix.dat) +---------------------------------------------------- + +The hd1k_prefix.dat file is part of the combo disk images and is +applied to hd1k image files as a prefix, it contains the standard +partion table. + +The *_std_hd1k_prefix.dat files are platform specific prefixes +typically used in romless platforms, they also contain RomWBW binary code +that is loaded at boot time into RAM + +Disk Images (psys.img) +---------------------- + +The psys.img file contains a full implementation of the UCSD p-System +for the Z80 running under RomWBW. This image file must be placed on +disk media by itself (not appended or concatenated with hd*.img files. +Refer to the Source/pSys/ReadMe.txt file for more information on the p-System implementation. Propeller ROM Images (*.eeprom) ------------------------------- -The files with and extension of ".eeprom" contain the binary images -to be programmed into the Propeller-based boards. The list below +The files with and extension of ".eeprom" contain the binary images +to be programmed into the Propeller-based boards. The list below indicates which file targets each of the Propeller board variants: ParPortProp ParPortProp.eeprom PropIO V1 PropIO.eeprom PropIO V2 PropIO2.eeprom -Refer to the board documentation of the boards for more information +Refer to the board documentation of the boards for more information on how to program the EEPROMs on these boards. +SUB DIRECTORIES +=============== + Apps Directory -------------- The Apps subdirectory contains the executable application files that are specific to RomWBW. The source for these applications is found -in the Source\Apps directory of the distribution. \ No newline at end of file +in the Source\Apps directory of the distribution. + +CPNET Directory +--------------- + +This directory contains the CP/NET client packages. Please refer to +the RomWBW User Guide for instructions on installing these packages, +or see the Readme.txt file in this sub-directory + +CPM22 CPM3 ZSDOS ZPM3 QPM Directories +------------------------------------- + +These directories contains the system files for the RomWBW adaptations +for each operating system. All of these files are already included on +the boot disk images. However if you are creating a o/s boot disk +manually, you will need copy all of these files to the boot disk. + +These files should also be copied to any boot disks on your +system when you upgrade your ROM firmware. Some of these files +*must* match the version of the RomWBW firmware you are using for +proper operation of your system. diff --git a/Binary/ZSDOS/Clean.cmd b/Binary/ZSDOS/Clean.cmd new file mode 100644 index 00000000..1534a178 --- /dev/null +++ b/Binary/ZSDOS/Clean.cmd @@ -0,0 +1,4 @@ +@echo off +setlocal + +if exist *.sys del *.sys diff --git a/Binary/ZSDOS/Makefile b/Binary/ZSDOS/Makefile new file mode 100644 index 00000000..e7fda1a3 --- /dev/null +++ b/Binary/ZSDOS/Makefile @@ -0,0 +1,7 @@ +TOOLS = ../../Tools +MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr) + +include $(TOOLS)/Makefile.inc + +clean:: + @rm -f *.sys diff --git a/Binary/ZSDOS/ReadMe.txt b/Binary/ZSDOS/ReadMe.txt new file mode 100644 index 00000000..f43a12d4 --- /dev/null +++ b/Binary/ZSDOS/ReadMe.txt @@ -0,0 +1,23 @@ +*********************************************************************** +*** *** +*** R o m W B W *** +*** *** +*** Z80/Z180 System Software *** +*** *** +*********************************************************************** + +This directory contains the ZSDOS system files for the RomWBW ZSDOS +adaptation. All of these files are already included on the ZSDOS +boot disk images. However if you are creating a ZSDOS boot disk +manually, you should copy all of these files to the boot disk. + +Note: Two file have been provided one for RomWBW HBIOS, and one for UNA +BIOS. One of these files must be installed on the system boot track. +This is usually achieved by the SYSCOPY utility e.g. + +SYSCOPY a:=zsys_wbw.sys + +These files should also be copied to any ZSDOS boot disks on your +system when you upgrade your ROM firmware. Some of these files +*must* match the version of the RomWBW firmware you are using for +proper operation of your system. diff --git a/Doc/CPM Manual.pdf b/Doc/CPM/CPM Manual.pdf similarity index 100% rename from Doc/CPM Manual.pdf rename to Doc/CPM/CPM Manual.pdf diff --git a/Doc/CPM3 Command Summary.pdf b/Doc/CPM/CPM3 Command Summary.pdf similarity index 100% rename from Doc/CPM3 Command Summary.pdf rename to Doc/CPM/CPM3 Command Summary.pdf diff --git a/Doc/CPM3 Programmers Guide.pdf b/Doc/CPM/CPM3 Programmers Guide.pdf similarity index 100% rename from Doc/CPM3 Programmers Guide.pdf rename to Doc/CPM/CPM3 Programmers Guide.pdf diff --git a/Doc/CPM3 System Guide.pdf b/Doc/CPM/CPM3 System Guide.pdf similarity index 100% rename from Doc/CPM3 System Guide.pdf rename to Doc/CPM/CPM3 System Guide.pdf diff --git a/Doc/CPM3 Users Guide.pdf b/Doc/CPM/CPM3 Users Guide.pdf similarity index 100% rename from Doc/CPM3 Users Guide.pdf rename to Doc/CPM/CPM3 Users Guide.pdf diff --git a/Doc/NZCOM Users Manual.pdf b/Doc/CPM/NZCOM Users Manual.pdf similarity index 100% rename from Doc/NZCOM Users Manual.pdf rename to Doc/CPM/NZCOM Users Manual.pdf diff --git a/Doc/CPM/ReadMe.txt b/Doc/CPM/ReadMe.txt new file mode 100644 index 00000000..92d2189d --- /dev/null +++ b/Doc/CPM/ReadMe.txt @@ -0,0 +1,70 @@ +*********************************************************************** +*** *** +*** R o m W B W *** +*** *** +*** Z80/Z180 System Software *** +*** *** +*********************************************************************** + +This directory ("Doc/CPM") is part of the RomWBW System Software +distribution archive. It contains documentation for the CP/M and +CP/M work-alike operating system components of the system. + + +CPM Manual ("CPM Manual.pdf") +----------------------------- + +The original DRI CP/M 2.x Operating System Manual. This should be +considered the primary reference for system operation. The section +on CP/M 2 Alteration can be ignored since this work has already been +completed as part of the RomWBW distribution. + + +CPM3 Command Summary ("CPM3 Command Summary.pdf") +CPM3 Programmer's Guide ("CPM3 Programmers Guide.pdf") +CPM3 System Guide ("CPM3 System Guide.pdf") +CPM3 User's Guide ("CPM3 Users Guide.pdf") +------------------------------------------------------ + +The original DRI CP/M 3.0 Operating System Documentation Set. This +should be considered the primary reference for CP/M 3 system operation. + + +NZCOM, Z3PLUS, and replace ZCPR3.3 Documentation +------------------------------------------------ + +NZCOM operating system operation manual. ("NZCOM Users Manual.pdf") +Z3PLUS operating system operation manual. ("Z3PLUS Users Manual.pdf") +Z-System User Guide ("Z-System User Guide.pdf") +ZCPR3.3 Users Guide ("ZCPR3.3 Users Guide.pdf") + + +QP/M 2.7 Installation Guide and Supplements ("qpm27.pdf") +QP/M 2.7 Interface Guide ("qdos27.pdf") +QP/M 2.7 Features and Facilities ("qcp27.pdf") +-------------------------------------------- + +Official documentation set for QP/M 2.7 from original QP/M distribution. + + +ZCPR Manual ("ZCPR Manual.pdf") +------------------------------- + +ZCPR is the command proccessor portion of Z-System. This is the +manual for ZCPR 1.x as included in RomWBW. The installation +instructions can be ignored since that work has already been +completed as part of the RomWBW distribution. + +ZCPR D&J Manual ("ZCPR-DJ.doc") +------------------------------- + +ZCPR D&J User Manual. This manual supplements the ZCPR Manual. + + +ZSDOS Manual ("ZSDOS Manual.pdf") +--------------------------------- + +ZSDOS is the DOS portion of Z-System. This is the manual for ZSDOS +1.x as included in RomWBW. The installation instructions can be +ignored since that work has already been completed as part of the +RomWBW distribution. diff --git a/Doc/CPM/Z-System Users Guide.pdf b/Doc/CPM/Z-System Users Guide.pdf new file mode 100644 index 00000000..67e10468 Binary files /dev/null and b/Doc/CPM/Z-System Users Guide.pdf differ diff --git a/Doc/CPM/Z3PLUS Users Manual.pdf b/Doc/CPM/Z3PLUS Users Manual.pdf new file mode 100644 index 00000000..e8bf4494 --- /dev/null +++ b/Doc/CPM/Z3PLUS Users Manual.pdf @@ -0,0 +1,6773 @@ +%PDF-1.1 +% +1 0 obj +<< +/CreationDate (D:20000306022945+01'00') +/Creator (dvips 5.76 Copyright 1997 Radical Eye Software \(www.radicaleye.com\)) +/Keywords (Z3PLUS The Z-System for CP/M-Plus\r\nUsers Manual by Jay Sage and Bridger Mitchell) +/ModDate (D:20200508123000+02'00') +/Producer (Acrobat Distiller 3.01 for Windows) +/Title (Z3PLUS The Z-System for CP/M-Plus) +>> +endobj +2 0 obj +<< +/Metadata 3 0 R +/Outlines 4 0 R +/PageLayout /TwoPageLeft +/PageMode /UseOutlines +/Pages 5 0 R +/Type /Catalog +>> +endobj +3 0 obj +<< +/Length 3276 +/Subtype /XML +/Type /Metadata +>> +stream + + + + + 2000-03-06T03:29:45+02:00 + dvips 5.76 Copyright 1997 Radical Eye Software (www.radicaleye.com) + 2020-05-08T12:30+02:00 + Acrobat Distiller 3.01 for Windows + Z3PLUS The Z-System for CP/M-Plus User’s Manual by Jay Sage and Bridger Mitchell + application/pdf + + + Z3PLUS The Z-System for CP/M-Plus + + + uuid:d0c26d56-cb45-429d-a7b7-419406cf3837 + uuid:1785c5e0-cc88-46c3-bd14-1bc2d5d0deb0 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream +endobj +4 0 obj +<< +/Count 12 +/First 6 0 R +/Last 7 0 R +>> +endobj +5 0 obj +<< +/Count 72 +/Kids [8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R] +/MediaBox [0 0 612 792] +/Type /Pages +>> +endobj +6 0 obj +<< +/A << +/D [16 0 R /XYZ 169.919998 591.437378 null] +/S /GoTo +>> +/Next 17 0 R +/Parent 4 0 R +/Title (Z3PLUS The Z-System for CP/M-Plus) +>> +endobj +7 0 obj +<< +/A << +/D [18 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -3 +/First 19 0 R +/Last 20 0 R +/Parent 4 0 R +/Prev 21 0 R +/Title (#7 Bibliography) +>> +endobj +8 0 obj +<< +/Count 10 +/Kids [16 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +9 0 obj +<< +/Count 10 +/Kids [31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +10 0 obj +<< +/Count 10 +/Kids [41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +11 0 obj +<< +/Count 10 +/Kids [51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +12 0 obj +<< +/Count 10 +/Kids [61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +13 0 obj +<< +/Count 10 +/Kids [71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +14 0 obj +<< +/Count 10 +/Kids [81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 18 0 R 89 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +15 0 obj +<< +/Count 2 +/Kids [90 0 R 91 0 R] +/Parent 5 0 R +/Type /Pages +>> +endobj +16 0 obj +<< +/Contents 92 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 93 0 R +>> +/Font << +/F0 94 0 R +/F1 95 0 R +/F2 96 0 R +>> +>> +/Type /Page +>> +endobj +17 0 obj +<< +/A << +/D [25 0 R /XYZ 144 577.757385 null] +/S /GoTo +>> +/Next 97 0 R +/Parent 4 0 R +/Prev 6 0 R +/Title (Contents) +>> +endobj +18 0 obj +<< +/Contents 98 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 99 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +19 0 obj +<< +/A << +/D [18 0 R /XYZ 144 399.161774 null] +/S /GoTo +>> +/Next 102 0 R +/Parent 7 0 R +/Title (7.1 The Z-Nodes) +>> +endobj +20 0 obj +<< +/A << +/D [90 0 R /XYZ 144 435.161774 null] +/S /GoTo +>> +/Parent 7 0 R +/Prev 102 0 R +/Title (7.3 Other Published Information) +>> +endobj +21 0 obj +<< +/A << +/D [77 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -7 +/First 103 0 R +/Last 104 0 R +/Next 7 0 R +/Parent 4 0 R +/Prev 105 0 R +/Title (#6 Technical Reference) +>> +endobj +22 0 obj +<< +/Contents 106 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 107 0 R +>> +/Font << +/F0 100 0 R +>> +>> +/Type /Page +>> +endobj +23 0 obj +<< +/Contents 108 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 109 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +24 0 obj +<< +/Contents 110 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources 111 0 R +/Type /Page +>> +endobj +25 0 obj +<< +/Contents 112 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 113 0 R +>> +/Font << +/F0 94 0 R +/F1 95 0 R +/F2 100 0 R +>> +>> +/Type /Page +>> +endobj +26 0 obj +<< +/Contents 114 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 115 0 R +>> +/Font << +/F0 100 0 R +/F1 95 0 R +>> +>> +/Type /Page +>> +endobj +27 0 obj +<< +/Contents 116 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 117 0 R +>> +/Font << +/F0 100 0 R +/F1 95 0 R +/F2 118 0 R +>> +>> +/Type /Page +>> +endobj +28 0 obj +<< +/Contents 119 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 120 0 R +>> +/Font << +/F0 100 0 R +>> +>> +/Type /Page +>> +endobj +29 0 obj +<< +/Contents 121 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 122 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +30 0 obj +<< +/Contents 123 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 8 0 R +/Resources << +/ExtGState << +/GS0 124 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 126 0 R +/F3 101 0 R +/F4 94 0 R +/F5 95 0 R +>> +>> +/Type /Page +>> +endobj +31 0 obj +<< +/Contents 127 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 128 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 126 0 R +/F3 94 0 R +/F4 101 0 R +>> +>> +/Type /Page +>> +endobj +32 0 obj +<< +/Contents 129 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 130 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +33 0 obj +<< +/Contents 131 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 132 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +34 0 obj +<< +/Contents 133 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 134 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 94 0 R +/F4 95 0 R +/F5 135 0 R +/F6 118 0 R +>> +>> +/Type /Page +>> +endobj +35 0 obj +<< +/Contents 136 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 137 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +36 0 obj +<< +/Contents 138 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 139 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +37 0 obj +<< +/Contents 140 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 141 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +38 0 obj +<< +/Contents 142 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 143 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +39 0 obj +<< +/Contents 144 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 145 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 94 0 R +/F3 101 0 R +/F4 135 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +40 0 obj +<< +/Contents 146 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 9 0 R +/Resources << +/ExtGState << +/GS0 147 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +41 0 obj +<< +/Contents 148 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 149 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 150 0 R +/F4 94 0 R +/F5 151 0 R +/F6 152 0 R +/F7 153 0 R +>> +>> +/Type /Page +>> +endobj +42 0 obj +<< +/Contents 154 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 155 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 126 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +43 0 obj +<< +/Contents 156 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 157 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +44 0 obj +<< +/Contents 158 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 159 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +45 0 obj +<< +/Contents 160 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 161 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 118 0 R +/F4 150 0 R +/F5 135 0 R +/F6 151 0 R +/F7 152 0 R +/F8 153 0 R +>> +>> +/Type /Page +>> +endobj +46 0 obj +<< +/Contents 162 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 163 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +/F6 150 0 R +/F7 151 0 R +/F8 152 0 R +>> +>> +/Type /Page +>> +endobj +47 0 obj +<< +/Contents 164 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 165 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 118 0 R +>> +>> +/Type /Page +>> +endobj +48 0 obj +<< +/Contents 166 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 167 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 94 0 R +/F3 101 0 R +/F4 150 0 R +/F5 126 0 R +/F6 151 0 R +/F7 152 0 R +/F8 153 0 R +>> +>> +/Type /Page +>> +endobj +49 0 obj +<< +/Contents 168 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 169 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +50 0 obj +<< +/Contents 170 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 10 0 R +/Resources << +/ExtGState << +/GS0 171 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +>> +>> +/Type /Page +>> +endobj +51 0 obj +<< +/Contents 172 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 173 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +/F3 126 0 R +>> +>> +/Type /Page +>> +endobj +52 0 obj +<< +/Contents 174 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 175 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 126 0 R +/F3 101 0 R +/F4 94 0 R +/F5 150 0 R +/F6 95 0 R +/F7 151 0 R +/F8 152 0 R +/F9 153 0 R +>> +>> +/Type /Page +>> +endobj +53 0 obj +<< +/Contents 176 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 177 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 95 0 R +/F3 101 0 R +/F4 126 0 R +/F5 150 0 R +/F6 135 0 R +/F7 118 0 R +/F8 94 0 R +/F9 151 0 R +/F10 152 0 R +/F11 153 0 R +>> +>> +/Type /Page +>> +endobj +54 0 obj +<< +/Contents 178 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 179 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 94 0 R +/F3 101 0 R +/F4 118 0 R +/F5 95 0 R +>> +>> +/Type /Page +>> +endobj +55 0 obj +<< +/Contents 180 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 181 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +56 0 obj +<< +/Contents 182 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 183 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 95 0 R +/F4 135 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +57 0 obj +<< +/Contents 184 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 185 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 150 0 R +/F6 151 0 R +/F7 152 0 R +/F8 153 0 R +>> +>> +/Type /Page +>> +endobj +58 0 obj +<< +/Contents 186 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 187 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 95 0 R +/F3 101 0 R +/F4 94 0 R +>> +>> +/Type /Page +>> +endobj +59 0 obj +<< +/Contents 188 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 189 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +60 0 obj +<< +/Contents 190 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 11 0 R +/Resources << +/ExtGState << +/GS0 191 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +61 0 obj +<< +/Contents 192 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 193 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +62 0 obj +<< +/Contents 194 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 195 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 94 0 R +/F4 150 0 R +/F5 135 0 R +/F6 118 0 R +/F7 151 0 R +/F8 152 0 R +/F9 153 0 R +>> +>> +/Type /Page +>> +endobj +63 0 obj +<< +/Contents 196 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 197 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +64 0 obj +<< +/Contents 198 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 199 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +65 0 obj +<< +/Contents 200 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 201 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 94 0 R +/F4 150 0 R +/F5 151 0 R +/F6 152 0 R +/F7 153 0 R +>> +>> +/Type /Page +>> +endobj +66 0 obj +<< +/Contents 202 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 203 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 150 0 R +/F4 118 0 R +/F5 151 0 R +/F6 152 0 R +/F7 153 0 R +/F8 204 0 R +>> +>> +/Type /Page +>> +endobj +67 0 obj +<< +/Contents 205 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 206 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +68 0 obj +<< +/Contents 207 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 208 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 126 0 R +/F4 150 0 R +/F5 135 0 R +/F6 118 0 R +/F7 94 0 R +/F8 151 0 R +/F9 152 0 R +/F10 153 0 R +>> +>> +/Type /Page +>> +endobj +69 0 obj +<< +/Contents 209 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 210 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +/F6 150 0 R +/F7 151 0 R +/F8 152 0 R +>> +>> +/Type /Page +>> +endobj +70 0 obj +<< +/Contents 211 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 12 0 R +/Resources << +/ExtGState << +/GS0 212 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 150 0 R +/F3 101 0 R +/F4 135 0 R +/F5 118 0 R +/F6 151 0 R +/F7 152 0 R +/F8 153 0 R +>> +>> +/Type /Page +>> +endobj +71 0 obj +<< +/Contents 213 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 214 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +72 0 obj +<< +/Contents 215 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 216 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 94 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +73 0 obj +<< +/Contents 217 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 218 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 126 0 R +>> +>> +/Type /Page +>> +endobj +74 0 obj +<< +/Contents 219 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 220 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 126 0 R +/F3 101 0 R +/F4 150 0 R +/F5 95 0 R +/F6 118 0 R +/F7 151 0 R +/F8 152 0 R +/F9 153 0 R +>> +>> +/Type /Page +>> +endobj +75 0 obj +<< +/Contents 221 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 222 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 95 0 R +>> +>> +/Type /Page +>> +endobj +76 0 obj +<< +/Contents 223 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 224 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 118 0 R +/F3 101 0 R +>> +>> +/Type /Page +>> +endobj +77 0 obj +<< +/Contents 225 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 226 0 R +>> +/Font << +/F0 94 0 R +/F1 100 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +78 0 obj +<< +/Contents 227 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 228 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 94 0 R +/F4 118 0 R +/F5 150 0 R +/F6 151 0 R +/F7 152 0 R +>> +>> +/Type /Page +>> +endobj +79 0 obj +<< +/Contents 229 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 230 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 150 0 R +/F4 151 0 R +/F5 152 0 R +>> +>> +/Type /Page +>> +endobj +80 0 obj +<< +/Contents 231 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 13 0 R +/Resources << +/ExtGState << +/GS0 232 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 150 0 R +/F4 151 0 R +/F5 152 0 R +>> +>> +/Type /Page +>> +endobj +81 0 obj +<< +/Contents 233 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 234 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 94 0 R +/F4 135 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +82 0 obj +<< +/Contents 235 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 236 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 126 0 R +/F4 94 0 R +/F5 135 0 R +/F6 118 0 R +>> +>> +/Type /Page +>> +endobj +83 0 obj +<< +/Contents 237 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 238 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +84 0 obj +<< +/Contents 239 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 240 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 135 0 R +/F4 118 0 R +/F5 94 0 R +>> +>> +/Type /Page +>> +endobj +85 0 obj +<< +/Contents 241 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 242 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 94 0 R +/F3 101 0 R +/F4 135 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +86 0 obj +<< +/Contents 243 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 244 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 94 0 R +/F3 101 0 R +>> +>> +/Type /Page +>> +endobj +87 0 obj +<< +/Contents 245 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 246 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 94 0 R +/F3 101 0 R +>> +>> +/Type /Page +>> +endobj +88 0 obj +<< +/Contents 247 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 248 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +>> +>> +/Type /Page +>> +endobj +89 0 obj +<< +/Contents 249 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 14 0 R +/Resources << +/ExtGState << +/GS0 250 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 101 0 R +/F3 94 0 R +/F4 251 0 R +/F5 118 0 R +>> +>> +/Type /Page +>> +endobj +90 0 obj +<< +/Contents 252 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 15 0 R +/Resources << +/ExtGState << +/GS0 253 0 R +>> +/Font << +/F0 125 0 R +/F1 100 0 R +/F2 101 0 R +/F3 94 0 R +/F4 118 0 R +>> +>> +/Type /Page +>> +endobj +91 0 obj +<< +/Contents 254 0 R +/CropBox [76.242424 92.8125 504.84848 717.75] +/MediaBox [76.242424 92.8125 504.84848 717.75] +/Parent 15 0 R +/Resources << +/ExtGState << +/GS0 255 0 R +>> +/Font << +/F0 100 0 R +/F1 125 0 R +/F2 118 0 R +/F3 101 0 R +>> +>> +/Type /Page +>> +endobj +92 0 obj +<< +/Filter /FlateDecode +/Length 633 +>> +stream +xuSn1 +t+UteQo)`؀o.I{p.(v&M5EQÙ5b׋vDJk#N VbZ2+msV lO#xBG 0HǓ)Ga|ڽlldcF6y j9n{a+ !|<+u\6O\˟RLC]:r^@X7ݧy- +6VHbF&kzy 0zlQ!%- D- ha'Swl5'Jvqp]I`Xj>?ґn5 +X,e*Րdі4RSm ҎVD#1 A sJ;T!#s)_1'Kt/.zc]`GI nZֱwq3r*abZFD &5?ҧtasi]ItE)S@nۧ{'{5c.3bbbg+\ee.p-y.Iet]μ;[Q }a{_N;ȚKiO +endstream +endobj +93 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +94 0 obj +<< +/BaseFont /cmbx12 +/FirstChar 11 +/FontDescriptor 256 0 R +/LastChar 175 +/Name /F10 +/Subtype /Type1 +/Type /Font +/Widths [656 625 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 313 1000 1000 1000 +1000 1000 375 313 563 1000 563 563 563 563 563 563 563 1000 1000 1000 +1000 1000 1000 1000 531 1000 850 800 813 862 738 707 884 880 419 581 +1000 676 1067 880 845 769 1000 839 625 782 865 1000 1162 1000 850 688 +1000 1000 1000 1000 1000 1000 547 625 500 625 513 344 563 625 313 344 +594 313 938 625 563 625 594 460 444 438 625 594 813 594 594 500 +1000 1125 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 656 625] +>> +endobj +95 0 obj +<< +/BaseFont /cmbx10 +/FirstChar 12 +/FontDescriptor 257 0 R +/LastChar 175 +/Name /F15 +/Subtype /Type1 +/Type /Font +/Widths [639 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 575 1000 +319 383 319 1000 575 575 575 575 575 575 575 575 575 575 1000 1000 +1000 1000 1000 543 1000 869 818 831 882 756 724 904 900 436 594 1000 +692 1092 900 864 786 1000 863 639 800 885 1000 1189 1000 1000 703 1000 +1000 1000 1000 1000 1000 559 639 511 639 527 351 575 639 319 1000 607 +319 958 639 575 639 607 474 454 447 639 1000 831 1000 607 1000 575 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 639] +>> +endobj +96 0 obj +<< +/BaseFont /NOPIMM+cmbsy10 +/Encoding 258 0 R +/FirstChar 13 +/FontDescriptor 259 0 R +/LastChar 176 +/Name /F14 +/Subtype /Type1 +/Type /Font +/Widths [1150 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1150] +>> +endobj +97 0 obj +<< +/A << +/D [29 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count 4 +/First 260 0 R +/Last 261 0 R +/Next 262 0 R +/Parent 4 0 R +/Prev 17 0 R +/Title (#1 What is Z3PLUS?) +>> +endobj +98 0 obj +<< +/Filter /FlateDecode +/Length 2340 +>> +stream +xڍXrF}W6;2`}1&I9+b^%P5Ejy>(זJ 0>}ynw7;kV~lg{33mWns3|toT嶪mp*VR43)B+XMzh5+Vtv[zj*W]ZM.V;sNȟd +ڪe[T6]U6ַzKV2@WJDZAT+[V9Ƿ{XҒiW֨k^17yߍ\Knr_ޱohwtEtl\WuyG޺]aSIaQki+I n!TI [l-&؄;%@i/X}S3z+ m4յNܐKguX,ktzqnfv`zp?\a&#IJ-{91ֽQ_wC5e>wm  \ծ.p[M1ADC(Ӹsm1%8*-TdQ7Ni{e}`B$Hunk`=$ &chVT,ӋE L[8L0_&k CS푱xF@8YAvLfaj"YmȸRNxy.S$Ce zoĹd"e%GzG;Yq+W6-XTMc䑞؃ <3C򻸦4o3A,O6mil}h$Da`w# ;2K5|mJ4Ku|iR/`ډa];&1R,V%~Fg}M:LTT3=Cqs-^c!* I į Y2*sI D 2oH<S$e25tHvGIUډ$V7"|Kםh@=z c\F'y-QrU(<`^1g"ծ/LT]וunzT))K/{d|?\W@&DW.MȸC) \ֹܗ,IL>t.ա876{s'%z0PlM'tȹKNPdms IљpSBZ}V {!IBӔ__w{hbvҔZM&!g~A[#p6kB[h"%ޱ=.E K} 6^nADoi75t'ACt')GH0i(Y_]d%s u#qFjT3a р +ZV `1N>I1?wzEP DጓN!߮QQ u<`b;>Nȵ(33|YO/j[m$=oao r<{l `zKSDl6An}~➫r>ODe|g_!XL:QǾсDٍ;%PҊ',kg,dRr8E`ٛC/mt<65V#'߻j4i~iQ \ FG|TAwV8XrZ&pB3f9HL K7|.e="@<|kf' Sy%:rgZQi+5Á*Ýfnt*^ @W2eU_ESN71١|ͺaY$]rBNz>iw\6|:3 Fiּoqv`/A/1E:-캬Js{X|* O7C)2{kN9!x;3wOs:7ZZAܶĂ3#\MNn?D|cG|jaO wm,2mXEZUi+ꈎ 9겷_~pN/&^>ȵJPR=-O,Ll-h>B[ (k^g]T!1S:\oK$wN\󢼖2ROP',> +endobj +100 0 obj +<< +/BaseFont /cmr10 +/Encoding 263 0 R +/FirstChar 11 +/FontDescriptor 264 0 R +/LastChar 177 +/Name /F13 +/Subtype /Type1 +/Type /Font +/Widths [583 556 556 833 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 278 500 1000 500 833 1000 278 389 389 1000 +778 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 +278 1000 778 1000 472 1000 750 708 722 764 681 653 785 750 361 514 +778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 +278 500 278 1000 1000 1000 500 556 444 556 444 306 500 556 278 306 +528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 +500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 583 556 556 833] +>> +endobj +101 0 obj +<< +/BaseFont /cmtt10 +/FirstChar 33 +/FontDescriptor 265 0 R +/LastChar 122 +/Name /F12 +/Subtype /Type1 +/Type /Font +/Widths [525 525 525 525 525 525 525 1000 1000 525 1000 1000 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 1000 525 1000 525 1000 +525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 +525 525 525 525 525 525 525 525 525 525 525 1000 525 1000 1000 1000 +525 525 525 525 525 525 525 525 525 1000 525 525 525 525 525 525 +1000 525 525 525 525 525 1000 525 525 525] +>> +endobj +102 0 obj +<< +/A << +/D [89 0 R /XYZ 133.199997 451.879578 null] +/S /GoTo +>> +/Next 20 0 R +/Parent 7 0 R +/Prev 19 0 R +/Title (7.2 The Computer Journal) +>> +endobj +103 0 obj +<< +/A << +/D [77 0 R /XYZ 144 455.801758 null] +/S /GoTo +>> +/Next 266 0 R +/Parent 21 0 R +/Title (6.1 Denition of File Types) +>> +endobj +104 0 obj +<< +/A << +/D [87 0 R /XYZ 144 503.801758 null] +/S /GoTo +>> +/Parent 21 0 R +/Prev 267 0 R +/Title (6.7 Theory of Operation) +>> +endobj +105 0 obj +<< +/A << +/D [67 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -3 +/First 268 0 R +/Last 269 0 R +/Next 21 0 R +/Parent 4 0 R +/Prev 270 0 R +/Title (#5 Getting More Out of Z3PLUS) +>> +endobj +106 0 obj +<< +/Filter /FlateDecode +/Length 213 +>> +stream +xM0 E~G{ MI XɆ*mS 8H^{XB^06ӥx`w`;g8ȩWޔZ#5S4Ф|Hv,<.=q;x#WዘM79U}dC&8/2JDh{4J [> +endobj +108 0 obj +<< +/Filter /FlateDecode +/Length 3673 +>> +stream +xڍZr7}WmgjbW+N\6>HJa>17JԺRf0FїӍǧjqzsJ^M$M\]],qYqUsケ*Ld]]o^}>ݻ46U6?_~gO|ML]M*MM\=6xRExblTYɳ'VbYn.C\5?y(i[lsyҨm=F;|q+08{:t:4!U'?v:_e;V-~CV|N3.8I{w5᧜twX^Eo?0l,yN,2)RR&?6s <:ē,偕@YݺERy_inM䦴ax-dnxh0B Fi \hBE8Eecbcㆇ wjjKJSDGf2FBc$bF\ V|nV13r13[Z (;8˽<8oj3~$[cC$$RalF>O2qgS)ʠ%5m3*Fc--,)JIϐPTsC,#ht& +7aŴmr& #|$&txP.*^[3@KnQ 9۞h0*;7spDnme=$%>: ˏ5e3$wuQ&6Dֻṕ) ޮĜ=H֝;:G2RQpL~z0,x;%#m5O /9O/ uG6@!Nu\C9ʊNWju$3n}h]NMG:EɂLtRe2|1t׳Lw4L%3X t?؆Q>m:ڧ\N,PYN'5Zf A!Q=a2vR\v%LhއΜE 9yXR\8]gح{t-D`U-#,(t^_Z=hmJ v'DmSkCpA mV3.FTKVyw!~q] o6@jxYǾyA0awAZhGٖtڽcpN8frlT0jևXBWܐ[Ĕ ( eYD Ezz$wlBCܠ]]Z`bR>KYÆ['wMtb^#yr|;k6ɣB9*R$WIW%-uu=h5-EfGKU;/@qY/ +p\2w&FGkϛO6˲G}jSdyٵokkP6LWl +tI K'rcЃ@6$HS:%rb;5 2D$c~r?!՜/oo_//\sYg5˒5bPg"v@L?{<+[&,"HY. fs۾&+[d4d^TY%fɏgv'_uv6MK1b2,R\ +\ 2= {]?Ϩ+&wzǰnVwYZ{46֜a5O35B<4hk6kjzՈ, *raPKXG_2ʂwV¬Zqm5ef7*PLX;m Vj6llT&BEpN!^SW$\sVyQ>:; ;?t7ݽ9PC8_#ztEO:$o13{Wûb5i/M %0y7uYޗ$VfS' -Fhu60 ;<18;qw{}c +endstream +endobj +109 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +110 0 obj +<< +/Filter [/LZWDecode] +/Length 4 +>> +stream + + +endstream +endobj +111 0 obj +<< +/ProcSet [/PDF] +>> +endobj +112 0 obj +<< +/Filter /FlateDecode +/Length 1052 +>> +stream +xڥWn6}Wz»ħbwQ/Zm((m\l/6N;-_33t,q0@Qpxrf蓏.Ϣҵ֦Nƺ󶰾nچ5~7}CFz*ٲ~uљI6ʔU2Z\F&!k5/MPK4Nˋo$>9X NOVN6%}tGy1Z:6ؠbjѫF/v"[~Yae rrN1Zu@mT]egHvzv?x2,#0+ysu&8F|j2 v-#IGP|Pz|Qey5*.2C4Q>ILw/Lؘ32^b.&=cHe?^{KD]NEV`uX3npjE um[1`9337n9d6VЎ{<o`̑hNЮqRm:&BCe }<.=  $WCrS[>l v6zÆ7losdW[dy"v?2ӭqK\?Ht%gY: 7aW{omQ%Ǩ|^vGvN t +endstream +endobj +113 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +114 0 obj +<< +/Filter /FlateDecode +/Length 1300 +>> +stream +xڭXKs6W8ƛ1mʡi{pnmL_],(zR30~퓇eu\}7:UcFDzR覊M3eC#RWF{)o` -48jvo1.ҡG /{OZ#DoM#\w>㋕iDm݂}@;cA#ET ++EH; +a#Ԩ@1ǢH[ +~J~Ix'< . S:v|j^gp(jB@TKRf:!iN979%VqYWI>NELr&8Qç9iǭ+7ӳDݨb% FCy^#2^xߥwM Re+L<ψXcvpn8}>Vp88:Me+LK}d_.mǧhv]K9y hDht44zAǬFm9.9IJWn 5[Nux-erYKv8媻:]@d|fn4Azfu3ާinFmfnc`~naڴqCSʉ f ) woar FPA 5WGQ۷;*YSNΚ[/v[ӄ}fv+fM% O^7"܀V1e(;Tt_B +`ճmBYyƼ.S] vK.TE. V X ڔP٨梗̀K`%@秹ZSoa>hhG)++7[Jj#X-,的[͢~S .jHpx6'WʩC+֥QR+nٵMT+XC  &\$BR7@m]6pGup4:PÒ +endstream +endobj +115 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +116 0 obj +<< +/Filter /FlateDecode +/Length 1367 +>> +stream +xڥXKs6WH 6NqL\!%MlL~|wzPx"oo8o෨Lzt! +Y4wE]NJP 3RNx9ngI^Zep-°/wԆw=õK ^ cӞiot5J~d nHnR^`&M?saV{L!ePVA'~ +P)ޠG_A.B]ܷ,.NI + f0*)R}ť0DSO@>riV֧ZWZdL 4E +c'r}W+!Z۞2EK A^JՑz,W)KUB陝iuBk&q _+~{޴֯FJy&7) Z:-C-:,I @ }]Ǩ C|Cѻ^U8jA4Od SW @b_l-.ܴ?NqU#[ +*ϏPzt;|1}9ّ֣3ac}CL_M証\g|~#e:zfͻkB=3 XJR; I3G,gɸBo3%BYqܭkoX;^jICW|¹GA-u8POQ&2O2@/yJ5]E߾/TYOr/ 6?wUs?[@I +endstream +endobj +117 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +118 0 obj +<< +/BaseFont /cmti10 +/FirstChar 39 +/FontDescriptor 271 0 R +/LastChar 121 +/Name /F11 +/Subtype /Type1 +/Type /Font +/Widths [307 1000 1000 1000 1000 307 358 307 1000 1000 1000 1000 511 1000 1000 1000 +1000 1000 1000 307 1000 1000 1000 1000 1000 1000 1000 1000 716 1000 1000 1000 +774 1000 1000 525 1000 627 897 1000 1000 678 1000 729 562 716 743 1000 +1000 1000 1000 613 1000 1000 1000 1000 1000 1000 511 460 460 511 460 307 +460 511 307 1000 460 256 818 562 511 511 460 422 409 332 537 460 +1000 1000 486] +>> +endobj +119 0 obj +<< +/Filter /FlateDecode +/Length 79 +>> +stream +xw6PH/Vp + +zF +!n + +!i +zf +@aY[ZZ*Xf +!\e!Y\!\ +endstream +endobj +120 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +121 0 obj +<< +/Filter /FlateDecode +/Length 2172 +>> +stream +xڍXn}W:u +1Al偒HkǧNUύKyLMuuuSo8y7Jk3>'1k7P6MӄtsU_(]);MUL/l{cCE+JjuI/ϟٌ3^S5;yMLBӤvE:e5aOo?ؼ*!{Qo]Y*ghFm8?$pxՊd^jjjћy͟ma:vzDuMcɪǢVGV{X +SDј]]OJ> +cՌl:EiNEE$o`gP7BIq uh8tM |P涴Rx_ƺV[HV6ъΒ17yԶp]hD6jGt.Ve.!T$ +y 6CiaUF+H!<^TsIVؠZDY<#Sc#BՐJ!^买K ++T4~(0պzmڳ>$SQkD}GZlNo)W}xlhploE6mꁀ, FnʞYkx`쩵4>$R+7nQd(gLkiEr$d!R5B9 0F09-.V*CЪS +S#;<٭Īƽgϒ3#Bc"Q=рJ.fĿB4||iMD 7􄏏>)֨o4c + +JHbnaC#2(i!}?P2j8a!)h_EvҞ>^(i%(l_t|p'{L Z)Qp9GY X}"n[rYd )V Ӄ"ɶOeA,)hAIu U!` +k !*> +r|pݦ3Z$zAU_/K8}B8 lcl0W&JJiȅ4Pb&YQИo3]MMa~6XC7*{梬HE#9̡"CCl LyyȌvRw +3 ybOn>+kTBN[؍AW.ameњ+vRY*? DźjDP=sgګJ@VGC^RF'>ZMv9SU +Cu<~HLAl[H'w<7zh>Q1[[0p[iho]NzKҏN]-eaۊq;ABӚ(j")5q3zڋd +*gERmL?4 +iRSزhN:\et>'UNJY*Qj}_h~i∑.tAt}3 ^C4yݣyU9JmxP(RK$p' VrAwOF&OE\k--IO)$u.rqU`.:RW^@;'$>5ĄkAMСdj/ ~2x^Ǫ8I3Pʚ@r8o@D +q$w;W#g5NN> +endobj +123 0 obj +<< +/Filter /FlateDecode +/Length 2738 +>> +stream +xڵYYo~ׯ[bdw>c'p ! X0I搇3|Uռ#˱>뮯jm.0r2R_Nn.ck2ik _Aep9\(MyEYt뫗ZNѮ6:\\^z_VYT>8,ץzs歚`ZOYn[۠e^YZ~9ooc &.ZȕuUB/o=Upuhi0)<%n>b;jZ`/)v/fZVbTyFdZY)Y͸HFaK$m3<3[eeoUE.L {%"H7^=d ܹtnp1|ָMA\WZ/fk]egI&Wr\ |q^n7 %&i +1.6-c4tUdt>YQK{J֫5[(z4Em4Slva+*b4B3 )4ǃ^֬Gy63Eddd]گx 1Wi-[{W/m9h.`sEebȷ؇?͉txsc _@Ձ zۧ-L{:nE;V?fF 0>]Ȇ9;BlNiPk]"JXفa04΄ubDήc6oin/ܝչyB礕ҽ:.\?M g5o,`C< T< Iʪ\"ҌZ"g5<Bx:5Ͳ'c1|l`T8ж|L!佇bl8=~q޳lfX6D9$!>yT7+p^ְ9OѶ*aDdlDy#ou#}(mSyLFstYkK ي< y i[⁂.+^u! +]V>-.b&Ŭ92F6&-Fq@_L Q̙4pv3A98'emOƒ`5ToHN۱(V23_+B=vG|k?/wv? )zW[uH6j}yk[>vՑ|р:iZK~>65u!#c$EnthĆ(i ^&NGyOP3!4I-&o~H&HzOsG  t8/r+FC)!bXieahk/?: ChT1(%9u3TK)]^N9=+G#ɐQ{^2AljKGФ&IO>-jg*4}"!:b\3m+,Q@&-s%m7r3k溊N:Ŷa:S(9^^>ڎKz=.HF\_}̼Te~ ѰŔELגS89MH01fHm1~.hυ07%#I܏R7C nY/p9ʉ A2 u]jn֤AֺUnovrz&d=H`%b P+`xf3",d,s6TH⹒巤^<ʴj:0Ǫ"50؏uIwP)_U!v}'jblK4 qd@N E5cxo +q249x6־X4U$xWrok;AŊ@MIn!|9Pۂ ˋ߅yOFCϗz&ukT:' +wp3#I+5-:), 7 pj5]4L~ZvTТ.jRg9^ OH2&Jضe֪+z_֯7?}ǘNbF^4O?tfM`Q~[߇I$RDͷJjyQiH6 aYx-XhMy+i/[?$3kPɻ1#iO{gb]|P.yJ.1\m.8a&[Lca"UN2/ƳO +endstream +endobj +124 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +125 0 obj +<< +/BaseFont /cmsl10 +/FirstChar 45 +/FontDescriptor 272 0 R +/LastChar 90 +/Name /F9 +/Subtype /Type1 +/Type /Font +/Widths [333 278 500 1000 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 +1000 1000 472 1000 750 708 722 764 681 653 785 750 361 514 1000 625 +917 750 778 681 778 736 556 722 750 750 1028 1000 750 611] +>> +endobj +126 0 obj +<< +/BaseFont /cmsy10 +/FirstChar 15 +/FontDescriptor 273 0 R +/LastChar 187 +/Name /F8 +/Subtype /Type1 +/Type /Font +/Widths [500 1000 1000 1000 1000 1000 1000 1000 1000 778 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 278 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 778] +>> +endobj +127 0 obj +<< +/Filter /FlateDecode +/Length 2761 +>> +stream +xڝYɒW'"ZcD]}D .z{Yluh,̬̗ S>ZG}4γS*;8Q*c]]|-u?G`Q.u./E e˩s!䷅Dq> am6zXC]uٱ(-O:YJlM-wClXNjmWJAWc|1Օni튠9S%[Z^[ ̬ _DbrQ61bWv-dIq˛édr(Q!|i)d>CN$RpV<`Y8''0}W5|& 9S6%L4y|A6{D6EU{wqQ=Qt(V'~x y+L%T;d6[s'uw%.R}hb5 3N9҄g އ+mS~=⣉85.ɪk,my풵*dio_sWRx92Q,zԷ YC|U]Ǐ 49Iy<k.&20~dA +Xx{vʔzSzu֨~}E62o6JCPpBotDa=S0g"lf=VHD 6 F9 +_[O]Ϻk( +}&cKo-ykP] a-ak +m,*@]?Jbx b"I7͟Q23z/CrΧQ](t5U( ?/ W kjh#ivKfz1I G| 0ve,8r9zT% N+OpX3'L n`.9kL*:6›0Eqx/&2K-54z2UG* MxRY^"FO TpBV+R-RaI^Xل {|T }ŴFM<ƕ7fE頻{ !BRAg̒~ kq8Dc`_n OD_m"2pu<\=GzXkQj %lOm1L58zuǹ +u<&4vi].}'Zw{Hqs|MDQ_87gyVxI<0/}o+kXJA쩖l]u9j.eUІE^a9Fq@?. +}gr +]v JiDZ$C: OKd>5'>B *PVF 0%n73ѭ;}bI~(z4\cXul9F sXa;w#y}_P^Ӑ!}SNfz飇kS66U2| ;.8m(EʱHg>ߔ8o[ģq(r$APTyoDs<džOh SHY,\*M6cB@'7n?]*E;]0!A}Z_U7c/ǣR<@j(S"_P&eLeYU8=FM@GEn& ;=\cLDi 3Na; dmB(aj촕"AK_GMLsCJma8+"`⮝jR; ++t^• Űh +@}r!pj<]p H* +R +\ԡb[6뚾n{*ӷ-^c˧ Q42)} +g>~C:l܄KϛMqv}o13,$= +zN^zC=,MGx85H> +endobj +129 0 obj +<< +/Filter /FlateDecode +/Length 2181 +>> +stream +xڍXے۸}Pހ*&nxSUSRndcC]"qF|}tif yi?fu^dMM⬬L^zfz&+/o?b|^cpuz?tB*,V^}љ)ԧw::5iSufgzvMG`~域=;4r_;YB2=*+uY2ϋ%(~aԙP;VTtdj ,vN5؃UGyՈLF,sV[T5p]Оjl.sZR(I3F1fAx9?Jn:Z f0;mE0FmN,R #~٢NՎ5pJڴXH`!.hNJ %GW≒kʞImZ3?4 -~+{qior +EAm]̭N@~>?f*@ dU*X ^^]2hGo3i":m‡bq խxF +ue-dnm,J: LǨ]+"hvԘH" D;s +vةNC436DAEUo,a`)Y׽kRh<0i D=@ Яk7~öD24sZ(M&j>W)6$ Nj@Adj +!S(́&=IR`̖ɐPd4Z?~qd[1_*UCGw[6@gNC:1mJ6)keG+$m' 'zisԔ&_y/xQgMW@̤],f(iO<ȋGEMxI3=vQB4FAbueC)6~b?K(GtfaCY&XFddLeحFFj{&n^,cqN1wZk`9p830J눹nIe=dFzԠP=?̧^t"+Q݋ P9X)W![QH.V|vx<9bfԻ6{gNnot%Y*d5o=<=OJ,<Y`ڪ<.addk_%(k@wRwZJԋ/u>zp%_)iړb_k'[Dǥj^[eY@Fc- +a2(2۵|ŇK LpK}u$}r]NmHv˭YNʖjIG 96xF]|P>՘ :]U 6,v _`b?Ce`Y٢2< nY; Z;Uy$j#E"r\t) #6JNZU# Ñ? cLt/  ~0&/C]eґ/J?jÀ`D-NΪ0?MINx~]Y{Mtž.'x RC5{QCni8w z9{g8MB5tca'>zsW鰮+Bdy%}Uضaw7 +endstream +endobj +130 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +131 0 obj +<< +/Filter /FlateDecode +/Length 2331 +>> +stream +xڕXَ}Wy$`ҽq{t‰]uN5)i<6 FlR]]uT5`&7ts1q&/K?16IQyi)&$Z;/CNFy4q! +R)c|bS1}Z$mZ'ǴJ^e[')oNZM:nOg)'ӹla}<X%Sy$m7[r]}(klB`܊E]neSkBQtڥMQۆd/bC2OKk|6hdFn&X[Ek2mK9Kix'&VvI;XZع)g./F;!b4ES1߻NU.N3&gSmd y e/GKK2Ox]odo\M4+ ]8ŕP?ޫVɪܟk S[%h;o;YٽU^8\v2NIfg,Ī8sf&ITAb>tPM:⟯kSuݜA2Q|ƃvlCw8>NyUgo)᭜a8[XB*0[a|h<Xlu7Q~ϊ_-[(VF^榇 2㖢EW(# V4Ŷs;l*+$;p>$*Nz啾ʆs{E R|Ys +/V F ^b.iY3Nk$'=}QԂ9HA~N|ݥ.\\R +D+AjdU*m1 "x!W ?Q5:zV!<}dAx + _CҠS}!Ad1 4ۨ *l Zn`tWC6 QhmZ~ hA*3U/Ʋ {<7D_ЌDOcl/q7~IzrJ@Kvax(,s t# Abܨldw@&/q=7ؔWb#DW6Dž]muiK$OٚQ#Μט^lQ>xU QR]xlP7!bJ8nPiU$䄗|՚xR//;o,ڳQWqz`N#pCI!Bu2B/bUH&^\S~QLp3|ͤf?O"dZPn  9;ɞ>ooțsʪW"QQ-O0ryBbr0K58MGs IIS%(K:&|2N^ϔ>"oQt"YJ&;N aIc{fQAx/ߑj!VtyB;fDVN4'%HY3<$ W *Պn5aA֢X4!R-|%W<.xt4Ip?I3ԱbT+$zJB޴ 7׋w +Cr?7S&&!1-:$)#-Ԋ4A+$k\8qPJv/ޔ[,Zh1KJ(zPEːL(i'7NvgE|ЂCVKweeb.z_NdiOsG +F@ACM'yK_"KÞ,7@H1aRr5ՍW]aA2BݹoU\o=//YgʔG2Q-uRo#0UCnGoh %@6oʏƣHe^"cO +$]!$4>Y7\ Y[r_y"Aj}?8edY=1Ka$߬g`C,8F|LbVwO.c[si|'h$ȕy1v:"hbn9PStL~ؓJ&^f,_|<.;Z$]}+J1gh+4ь1/j4_̶!؟&i"e;^͏E3koi@Zb( nbቡECm5; +>k?H<$ojW kW?w xSxB4|mDCP/1p?p:qySzr(OE<}_kv'/ +endstream +endobj +132 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +133 0 obj +<< +/Filter /FlateDecode +/Length 3482 +>> +stream +xڝZYoγ~$/!%>IA]Y*+AlQdhkWc4R,Q]]]WE~UL''wRL3|;(&j2y MaUMʉT^8V$?'Y +T>^(r_RL43NtIN?Ni^%O"m*1X~YS&4Ss<* \鿧?!Jer[f-\0 e \6_S]'mi[&{:1UkS X'+oT CG:o*FhmMk;ƈk(G}JKRc"YokM#dX +In"kW>!2V(𳦵K]/͖or]X$S8J` |*mWX 9ϋ9?airOX뽬--w^a+bQ4|=VྋGؗ4/7ϧ7~x$#iY) }{h Z#5i0X {$Z>23E㒇eL 'zzܵccsW3_AurĪE4[{iNj\rս7g Ap:-+ +Te9b yE*\Z1Um&5mfCO%$2NslIyb6ˆT͍ p sIDҔ*G2ۥie=G^_<2̻›/Z1/'49/ +aLVZԉSdidNl +27!Lrms'qr*ԑh5,1ac̬x q-{ggGJdgŋ} e.I;P9H Yې-9 Gn/;:<,w<-TW'#CGⰡu^2 f33[4;&>c[r."Xeh% f1C&I#?N txF:*JXqȤqsqӫX&#C=XX lͻc8ilwvtH$@25ٞH.>a7>gX|s\bf!)ĨD*`0>/#J)_qUD PkgmACKBt}.qzYcp|0Gw0}"0E<1ht/4ZNِz\bWn#)/pYnb*@-0 1$JXH0MZrT L6ݷʋښcN arWծCQsQ*dO7]s&#V%ү +q YrXV(.J6xˢ;a*9on9~&sFjHl,Yg74puJͬ&g<nT稪7Ӈ/p h=%_ŧWSZ* ֵ,ڎ@@1XU耤FQQ ?@Xl.%(s[ ΡlԂ=_-R=kC bTH5Džq'r*`x91oO!UGJj@.k5=lipĮ!RF+T\~9sQTځ;pxXng.5ܱ}; .bw/ ppi-CE#(ccE@CtDtMvNE"s2 j +%\);6X4o<<e@9{VQ2!,J~kzX%Lnna4Q)jg4Ir]1q +B;]}mNY>Cц+`\URė۽ {|a\lBgmCpU_ک[ldA?s"Kh6JEZ4Ȱhqt] >ҎJ΢ /:ǿ iЊs_fWEgH#} lԠ\S:/!_:"@!ͤYcCj`0k= `$Z$19p=0QMs6lPNad_.9wyY-نRbAi5$۰iۂ%e2 m*s$msK>6]fɛ{fǒr٬BS1>pA$G- Ƈ0#6nb+d>"^n|s*rF|MbB*'=ܐB5JIV3V6|퀑TW^ K7ɋA5,B]=;½FRz밲V9l&꛹}'t&߼mۡn3wiKFr ]ɏ.} ;I2ErU;ӕsqM564 ;3U->;/Hze2t'8>>#C^0ZXr+_IۢE7ĚG>3C-8s;Bh}\'dg-2!QГ4lnT65>P9jX4_EoȮߎoU;G&~/4>諏ug]&ׯOWGO(.JsȪk>T +fS=Էt,?00Ȋ._Tso=M)Y>|w!y,FYxZÆlřUٲӮ.>Rܡӓ +endstream +endobj +134 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +135 0 obj +<< +/BaseFont /cmmi10 +/FirstChar 60 +/FontDescriptor 274 0 R +/LastChar 62 +/Name /F7 +/Subtype /Type1 +/Type /Font +/Widths [778 1000 778] +>> +endobj +136 0 obj +<< +/Filter /FlateDecode +/Length 2855 +>> +stream +xڭYrH|WmF=žƚ=<Z$А5ͬj\݇ GP@w*+z{fFyh|$?2G㫣:Kw>`:/~Il:,X&9OM|O2㟱9{ybtSg696}TjQB+䊻F6 &a,-'j׬0 Rkt`ܥVC4ǯMV"`A`Km|_o⒕Edۛr?dR[$cݴX{^H 5&Ȕ"WW y,vLðM vbQ|J.y=&ĽiPC Kw1E[>6Mh:jp3h+FռpyTv (!\.- +]eijI~V?)(kM8;٪.|\\c@fH=V;:#rջTbi>_N|<&p.9_=S?bѺמqv+N^~U9՝B.leݍ©w$ϠqgT1hb9EQiGD/ڸu#owQkWhƝ BWý8f""F<̌3U/N`u\7Z8^g=Ms4se xFPpwXᵸTg8D! +E""'Kjd,f'3UV/ޞ}z{~]y2t!t ) ]r  +Y^`J1Hg{[K,ߢ pak.+ɖb>;-S3b{FW $^ӯ~9 _I[dEg/n@2TK 23/z㮔3 VS蚹 `<4@PYBe󙾭 +]QPqzc]T=⪬Gxӵ׫UT_É7ϪPC.E :A |;@߹5-_~Eo ^CLF\O0j%SHt͟MeKh +Io7.!~'ةn(ia<3XպKpTk&0f;:Qg +> \ՍG@[VT6v?d/f[:*p/Ӄi6!|99={{nY᪠ ŽuhO(Zxrzm +hjxܺgҿ>ዾrvN( e9od04e?ʀ9\}\Z]/+VO:qznp7,3&>`X\{g{N6@:!VX}-{[x$(ރxC:dJ}j7H)߹_eGQOƢA>M +pPWbpKrĠ9I2 <F6)}-85z*Rlj/T; fP2n)ѴD&W+XnzpXk*6J Ger3b.']Ff;'{]v:Z65 dL:r} I֛㯹qorK&jZ|KO^>]F`*$!`U2&/Ϲh. 4D$j%G1CM_= JZFx2:wA΀Y\Є́ޭ ^=mUEz sicu5kLbr|B86R\a~V}~tl9bռ l-YCJA~+ĒRhWLҟmF-?[W29k~?I"o!){EX7bXN)ck>}]Ԋi9&読6 ΀Бul}-9"闝aZ#HC1áͻ\J^ +__:HUlc:IgϐwӑЉMD}vTY;dGE^xLDvD:*Pm~p(#j*?剏@U#QZk+A!hsH?>>!o=cCȤ v|e%u >'K?1!>Ec)+Ufm.@?hӳ9$ =EƫyJ~.%cZRԦmfLkI:u6DjҶi)1[%z$=!-YQYEX~MJI[\^. JEuLSb07LFz!:)V d[{m!~z8634jW?zI#d&^b%t4@|t]MWvZ1kFoZjXmGmMo夝POHXD%5^U֬;Xj sNZ*lvapHåJ}X_ԇt𕄗Ұ3lFxgvJ]KlN%mn@x֗Gef s1t5x;~ +endstream +endobj +137 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +138 0 obj +<< +/Filter /FlateDecode +/Length 2953 +>> +stream +xڭYKoW({M?  {ׁrŵD +|XϧE {cNOwuٯ|sj|B)goS}:>[Z*/mm+N}yQx:;Q1~2*Љʻ7Z`mvUǬTFA(+u1΂V癡^JS_,6]Ъ j5^zj^qBlEesWYf- 8J09VQ)fR%eVu!ULkuCZQ8td>Jdz ZD;ub* ɶTnD.cs/#ַPN8 n*-'-/|0Opt +^sDĉ+#toԞu?麨j򆲰0a8_)i\ иﵜy3?ش-J&uqAckq䷟:|{L 2]t/ʩY gI<$a4 VBZ-l[ &VD2`zR$W &™ +>cj+~n%q&'1"ʿV&pf%%ĉu +kHGq.ژd`(*2 Wb9\]+y֧]}&xQE +CTTM8 ƻ!7<8ڐi샗rjM$FQb8$> gCN$tCD_t!No]ŎP +HNy6P'{Met=N$ݦiզ,$y7&M~ +C)~IB:Z?s./T0x1UDįweBQbXc"LqzGDY6hϱөd#Jixi βqpif-oc)۞nSbŭWjw])`Z.{<6!lngܕ~eo=La}|5֋?\3њRFRN?y +>^ί4TS R S8i+(i9e>ᨤNG"B +fK(<:i7=YYCLJ;ZgرRHR1jW0>sﲄ+r ԕCƑ\r-ۚ*mcBIz%3?_` H +t"Hj% +f U XD>9 J`vyUT8`_j]t2[j&VC-ѤVH{-4\m9в@5&g[m-a~tQJ9¨3t*&":<¶-N `Gp!(mpzu&x&@Ford q|8x9%5eaϵ5M<l6%72NgP:%#T9+kHBE%n쐮 !B2".9 +xpDd4_ǭ{&r͡XH쐮!*/1Q$nHzrG 3&N| M3=@m*w*,S+/3:!ZuAVwu&{zZ´dKǝ戋I`Ś>qG%*9o{?2trx;ՊzEC+mZshTC"ˆRnd{a +ь X̨!hYt}9É; X85WCFˌYh#%Z:"@ؚduDRg(d&.gͪG8/wjݠM 'מˮ,>TؖiPz|?ڽ +endstream +endobj +139 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +140 0 obj +<< +/Filter /FlateDecode +/Length 2008 +>> +stream +xڅXn6}W&QD颻hEh>hc'vח4w M@(j89s0o?\a~'f2}^OnbuYn/'U]1VZ[ž+W5bɔ%Se+ұm8WbZ{2,Ka#޴S4:u\1˫'QW6>bSz2_?/*f_chdirǼ!1N-A +Ӑ+FEa :ΨHZ-bұ0Vz}"cM-0/L%zcW;K ,0`n6ޣZјڲGd՛}>Ձ& ;7^}l~M^ݬ֫vMD+DZ=RTv4u0Bp9rE8"c4e8̑iG0/! $ZN͊>:/ ?3/4)7jf""Td_?Qm2.?ty;ܨn5~d]:lprO/!$vCQDDb߬׀JYL)ւQTٱpOЖ XgW)ꢣfΈh^!?\z),F(?M2DKVA4-U8b"l (LC؄Ok"h$β:.(~ȧl-Uֈ'h"!3gv[:όҽoIb#`2C/ 4=!VvYpĊ6^4Gc{?>M9'w'{.U@ZBLc`#AY>h LwkYr47gcׅX;ȭ''kvK/]cT>&/3l59&m>=ܦ6h Sr;Pq@ G$v݉jW"g%;$TOπyt do-툨'T, ~$ 6&|44|lWÞ\n6rnI+Ah29t҂qw+jܮ9[iQCĩLIŸUkV6}iE~$ҧk9͈ua=#g5E[h.i AkR+D9$Z1$tE9:#mkGS zRiw}1SXV*$av!iú!!AB>hr@"b?À +endstream +endobj +141 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +142 0 obj +<< +/Filter /FlateDecode +/Length 2976 +>> +stream +xڵYms_fwL3%J׉I(i/%>tۙ&Pnoo_}LҴ^ݤrpY%U/S'߬6Is. ch"NIъW7VdYc?\r3>~b_z㣸4 }>5p0}Ku +0^߾ҿғ2Eqen?/Z1 +"wx> dNzX kգȦf=#%Ymy*Bi>Def,{G{l#W6$45l?*~n`;a[URef)$bȃ5 lhV;ѹh2m1vZD]/u99r@K32y)\l]Nek=ƞeEּ}{nFi);̕hp1NUX`dzIrؑtDIwI;6c#C %`n#1"}%'q9$SIHn(*x" xlReE֨'Z8F mȥ3<ٲ 6joH$}RH'VLXr>.u,Sx+[R6NPDZr6)o -orӚ)c|zANlB$wA,d^ 7*#MIL$Qa{gdbB^X8ɿ,qPRyirKP K4''߽!d@<ϐ*?){fS͟[wLJʒE<'c/Pg8m,J oEߢB. _ zI)P&taTsES$Y;'N0Sl噄8Rj6 |$"5(3o_/x$ZMκסqTG,;o.UUCL'*d@!'=j3@*Bqs [#s hQ;Z <(*H;2ZJ!thW\lq'Aÿ s"aYKO,`5fᕹhּfXoLnCKARy +ōXv"eU; h4C[v k`BBgSp\Y#̈́y,Z(MlMvKG52"W~|Uti Ht!siha1Ohğ!h=9CE2ɼC\쬪xVӁbYȳіb{zܙq8[Гu<17pG7Ó j:i*%:>n)V+SZM+̱\c3Vb!뤿훹H2=*?p.ɮOelEw`֌h 6a¥іNK;F&l(V R%JG9UQ2;LYFoqDHd C@QuYonz4PO(@ L)kR%~|w|Gٲ'sF3Jvp<$ޣ `&!S^'wӞmݫwn ;IFVd~A (jǮԳtDYjaʊkr +L/]%/ܪOFwI.-(!v2}b?0ӄLWTn+ Ql["%CufR9WdC<;TpA vELm+aa뮠d?e.ЌI \1uMYiNh$mi6Rz1}f +P+Ĉ&Bwb栽NddStĹk]% 6,[D3{ނ"\""s˟P}v-ᦈt&BXvaJF{s%~- t"U67"gQUS; k>˼E9*S-/(5G͜lG ySQaI(E)r _lT;Bi@&P?aw8Dny.4PT'" x?Q$6)ߌĮ,l%$s6=ÁHƕ$\=lqs=]'FܰR^] )=q/DNtv>M99z'Fm)#gDC6gT͗릁2Yjx/EÜ7Mp/F[}͠7i[! +r\& G(nm/Rgu Ȥdy}ˠSۋ3\h2@hFw\&ҎV;$#:[蘐M-q[p@V]~PAD?y c綿|L N^mlGNXwEt +endstream +endobj +143 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +144 0 obj +<< +/Filter /FlateDecode +/Length 2475 +>> +stream +xڭXmSg +Ud +-;WTaNd#䃐$NtJR./yקn߮o-mwtiF'7*J'#}&EUU=>+uʳʦa(*58f:ʌuWeVdr<+ջwG:Q]f%^l,M[ʘl[ʢ%s̪/s[LiхdFeƨ (:~xMix1s81}VbCWfL̽p~b*٠?dIomX.I-UpJyٔ.M?Bg?ꞵ>-ԌߥM1?K6!P 4y1 +O`r(B,o"yY:`.@}/Twe䌵W🳓? >aDgl{tBO3p0n8~$oc?h R5i!ꢖ~e"=>=Ov/)\Чޟ $zZSA^Ջۗ_8O{j>ykXWHg깷HHo;Ȑ,9O$9Z.A2fEKbc+j,_'\}:Ֆgܨ5OܢPSQt%"2Xn#Js=0M`ufG%cIR"'j:"Cc&8ƟkU5p'L/Ktj_*QR82AC? #Ʉ5ǵ\K_VreѻnNC`DL]3oZKYۚAT뿔 lnШ1bVzQ2u\nN@Y*i4bL NXR$cc4NSo_6){GCwv9ֶx?fW=:4;X9vYӃq ,DoxeAb%B5$= +F~sRINj qDPL,A)CQ|W R/Qgn,$OVx9!Co[{ MJ7y[jQBj6G/"w%_ԡ.O Z֮&^6Ȩl̲ N}tXz$f`]6ݠōeIc)*&(RuZg+7y$C'{&n>LK5F_SA}]eء_ +endstream +endobj +145 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +146 0 obj +<< +/Filter /FlateDecode +/Length 2920 +>> +stream +xYio_!xL:`;޵7\+(r$1"94IֿO Mlgu=S~z;}19,ϋ>\VYUӜKO[EYN'M2I sF;&o'?$^M^Q1ImiMReJZ+LN&oї5N=OL^5)/߼RKJ/$am˧Ol*˴'4΀Nt.mSX}lfT h~R]\uCKWsjr6F:NB5X~nNib)X/2m ?8ITg +;Ξ=:KŎPLBtxOrә񇄕r KvU'Fg8E)CXaVu%K^e "ဆV5&hB y%7.x/ uqԟ$)w=b2EFM'9D|ի' 5w{g2~<|YUkw+W2 }W ði9Ye^%-<ȪPqO=ԘLP _&]Uoy o %: a.V$*1p85)M4=(U qY9g,'$G+/xƮ,~$$![-D{8o򾎏ʒT +酻M?7р#N*J,ƙ 8ٷ%x`׫E{p/r#{fh ^xqIX16Jw#< npGw+1[f}\ oð`/ K*r)_J3aDÈ)j&x8BSx#xS2s5!6Ri8"&$WmbZmt=8"S ݛX2-*>kW?݉tO2]WջERъhqi<6 VDCص`MQY&gq#χH\PSqMDxrQxxux8~g,3c}8#եU7e DQ k KfmayFjtC\K9d5}VDc_A54aUѵH쵫^G儭w3>m'YצnEFFʎ9wr(Jөk6%+Jlk5  6C| #gB#!}$nGU1bXtb"e8&, "ϡanrWpK,+!DZb8:mmۄ8r!{'CopQsX?E{q71K%E8oos n'yUoSǎEԺ|n% J))xCS53ii;:[]{BAQ%țcd xq|Q>ՙ>`2g|Q:0ʉI~# ;#Rt_b'׹ik#?̸Jvb/]e^sF"a$҇S80D;d'8|7|=~v I+ڳǡ=| g4RQSKv.Е9Х-kа &Kd *CprqKDe(^ {&H6ŢnǯX6XH>vgh +y)Q< :eZv4ywR ) Ƶ\K-lGEklGD5Cae@gEV᷋7mUecNNhiCEw˨ÂWPDEtka+qĄ ٶ"!RQ^׽}?[JlծNU DrDLźʮu.d)oCmMɂP|VXODaC߄((mI%<_ÂSФʂ)ؤnv2^jC[ J2RJ=3-XjGcz!_WGw5aA +$ά#2*ʫ2\c^?"`"Wi0N=n0;Xtd%OE={>':XP=^d. ȯ'kny hk)v6eɫɿ +endstream +endobj +147 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +148 0 obj +<< +/Filter /FlateDecode +/Length 4297 +>> +stream +xڕZYsFg +_áC%'+!!E2nt9+qY,//~K\:,X&pɛXߤ69x6m ݏi|NQ43#&rgpz^q!|(4)@:dIЃ%cSd\R^Sz˓^z)M% g9Kgǒ,MYA$-:urK,3>P[hB{&_ rϣSer͂q5qڪr<)t#Uޢ&e}[nS79l +apB3.[tIьݢmVzWuyթ˚Md&2<ɚjѐLSI 8BC)[2:`ur\hYl\qr}+{8j7t|dwau̶hgЉF(.X=4.5[AX4&lr5423=_ ghz3 E\Zɳ`[_?\`c"j +~Td+F& m7]H(<- +wd{[Ap`ȠNP̑r#%?1F/ `PCS$N|H:.0i%Bpu%Pˋz{fIB3 N_(y"I /=Uu DZhV@Tr} `; ;s E[c3.ee ur AE[RS=T3ҢCRHL= gKhm+AT a +$ˤmXHymG2o%^$aۃ r^_ɨNyNj,=/·\ϯA2W|ж?0tij{Jİ[ P竹ML )zD 7I*q(ێ!ɆA"Q~KUxR{GpEѼan^2AZsmjeuy- ֭ĺ]H}͕VYAwN,!S f +ٛPM u-eX酯KZb 7RvYM?@A6tZYAŽ`h|{#AP?hݧ!J3P*9,LD Q5_YߎqsҦlLq^ - 8N[yN\,",h2bNX@(uOVtLHik\dkAYahTT(Frv*(=\^0ij +Ʈ?Z͉.8G{EJ`ӊbHu=23q4S[L7RCZ.%MC> QPQ(T|r*8J Y֫~WS|bd&/W#2–n fw=C2CeӈTƥhCC?kUsz$+5by1(i<W]& ]PKiCJ$gӋ/ޟ=_Ũ2k+CVkR2X(V?K"d_D@A9SecNrL\-[r#Ԡ|= @&d3ܠNFp]7(ށëg %w1JKUDvi2@ORϤsI^K4TLhKaF&BxEWdfd~;K $V#;`vq'mģſãWp%BEӈd̛WU*tO@RH;ᦋ +BIBK$Udž9$xBCL8XR +8Ul^a=BE+giWf&+%>2wzyr0d[6 +1=vz:BHF1{Յ6lEwPЁ.x:Ʃa%!]0^I2 +>.E !~ZTEadOs:Lt.7,ly ۫4 +nDd'*Ⱦ4CeJ}jT \I-LPUq*@1cgq\&rlEk8dYmVHIt BdbĨClڭ //є@G'"?z/zf&΋q 09̞т 3WC ՝D.r@SSDʱUR7p%="%P~5x$jC `I96$iBY'=gyшjXV}N!*hHO.Q),F@ۙ&;R)w/Q܇[Q;En\qMOEbymn8!*:n)Y٧c|un՝4H0COxhP%TZ9bobO6Xw]FՠKpնg"/i]0pE8bOs8kBߦ +b5m-ā983v|<<-KZ;uSdP͛gT9 n7'gփ1{Yf*3dB WaVOq6TfÇQ|x]~݁xx!\4A6gc }k$h;vu*RyᖵfVH*oC1ͅ!:hB#h>hlu ճxD<~,ئ̱z ՞wKxh$ݏhg{0?|1dH:^jڛT3!6Z]̷-Qz/w~Q:7t +G !?X)EF2DT}1ZEǟ)ϩC +sf|~. Nt#[/hI$&e#ajO/<2f>O8 QSeuU01?z{~wW +qtz~ [cpW(> +endobj +150 0 obj +<< +/BaseFont /cmr7 +/FirstChar 49 +/FontDescriptor 275 0 R +/LastChar 55 +/Name /F6 +/Subtype /Type1 +/Type /Font +/Widths [569 569 569 569 569 569 569] +>> +endobj +151 0 obj +<< +/BaseFont /cmr6 +/FirstChar 49 +/FontDescriptor 276 0 R +/LastChar 55 +/Name /F5 +/Subtype /Type1 +/Type /Font +/Widths [611 611 611 611 611 611 611] +>> +endobj +152 0 obj +<< +/BaseFont /cmr8 +/Encoding 277 0 R +/FirstChar 11 +/FontDescriptor 278 0 R +/LastChar 176 +/Name /F4 +/Subtype /Type1 +/Type /Font +/Widths [620 590 590 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 531 1000 1000 1000 1000 295 413 413 1000 +1000 295 354 295 1000 1000 531 531 531 531 1000 1000 1000 1000 1000 1000 +295 1000 1000 1000 502 1000 796 1000 767 811 723 693 1000 796 383 1000 +1000 664 973 796 826 723 1000 782 590 767 796 1000 1091 1000 796 649 +1000 531 1000 1000 1000 1000 531 590 472 590 472 325 531 590 295 325 +561 295 885 590 531 590 1000 414 419 413 590 561 767 561 561 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 +1000 1000 1000 620 590 590] +>> +endobj +153 0 obj +<< +/BaseFont /cmtt8 +/FirstChar 45 +/FontDescriptor 279 0 R +/LastChar 121 +/Name /F3 +/Subtype /Type1 +/Type /Font +/Widths [531 531 531 531 1000 1000 531 1000 1000 1000 1000 1000 1000 531 1000 1000 +1000 1000 1000 1000 531 531 531 531 531 531 531 531 531 1000 1000 531 +531 531 531 531 1000 531 531 531 531 531 531 531 531 531 1000 1000 +1000 1000 1000 1000 1000 1000 1000 1000 531 1000 1000 1000 531 1000 531 531 +531 1000 531 1000 1000 1000 531 531 531 1000 1000 1000 531] +>> +endobj +154 0 obj +<< +/Filter /FlateDecode +/Length 3545 +>> +stream +xڭZks6_헒3C$tvv'ډwRMi~`,EVTxs/L{ggLeo>ι|C~l1}Fϲ<Φ/.3u6|3_ɓ2&SgSY^ң;n%H~6iyM=o_\(Ȍ+ +͟zǴL>kNlOD]$/S]%~J+=T>9rިۯ0tM)+3X +oxuaIRC74Qa\/[Ty~Ezw^dߥ7ei*9/nE[-u5 -~OO*/ +NM #x1kLë[beUxCo|TN4RG>d܁8U:rMrڂr>U7SIiRU% xkBGObCĂ Ż-/'.i),ڈ aez+[DSE~ /q#8dǏ.N$i9SC%kVeg+ZQeVVˋRe[:9-gC]Ϡ3S,Dlj'~H<;M|k=1w^D5,2,7y_#fQr!]\eӡ\{ض`Uppj5yY-D8Kk +"N;ZNQ&ϝAEHSd=6 XK:Lntx  x\6:+/^ \IEtVV/9򁈒}u;D;Ȉ4ʜ#7Xa'AC*î7K55h!\f (}fލK9_v6C)e(UK;KGӯѫbm{PbꎭJ>9]&Z}`+t*\؂ zϴJ. t€*1}d; pnJ2#Y.a/*yt|jtkﴬW+V> 7) D+I/켍NH5*:U +oդ &-^4jD QjCfԏUYAON-t!Ipڡ(ñbՊ +vTkx}3KℓVXRVY۵%q V8e8 81HvY 5PAv9z\hܐw^ ac4}ksFUΖL["〬 >\' P 1e8#~&Q/W~sCl>Pͽxq l$gHbXxGN.ƴ-Ð23W"͍0?#m9Հ]ѻz*m/U^Sm}MLE +!UZ6ꔵ򮯽ʷ F|V||3 I(>!\?A: 8`%OſÁF9vyXF}|`WVyF >ZHrv7-= +MS飙ٙ@tF9'y٩h +rAIGP~}.з^IMDI)W 5 G)˜HP4\.Fb\U5ՒR: ֒)b5r,KiO=}dWP_9b!٭ U@/i'X2~xVp.[|/M`[n쵘mZJL>%s+ aR*36"}|TTnCʼE){fE)/!xjN@i"I*f,k˚$֙Sթ^3gqXj|@ =X[ox쉙"P`/$>Ed-OtȼR'*D݃F $f2?\E\W84u?@E~֒3IT +fj}H釵<%wɶz{;(n/ KixSj"y݃yeBoy5ve<߾p_h@?[=U6IH +endstream +endobj +155 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +156 0 obj +<< +/Filter /FlateDecode +/Length 2785 +>> +stream +xڵYn}Wy@mAّvhb@oSjw韴u4RJp8\1,*JjI1pΪXªERZPDuQ{&1S#T,:Tb+}r4p1~UZ=҉^ ,W5WAmn'԰Q]S +,Vc9ƫ9u95+dK+fJWDbPZ~{vw^,5UwSoN)C)O^cEby-1}I!uKVwj조Zݣ96'ԑTMgsғ5A$^)LwEB%v4lVDYem|T tްtf ;st4F ;Yp:]M`_.A]:L!-,^SkpA=ˍօ]N +' 0RҽͮMKj^wB`\ّ).b$PflNINԱ]Ӽn(CP)-NfpelOcëWhV|p&k:N}Amxr1<{]m(ե#јn-c2./Pk?㫘EgP;9,~cy=-iԈFCcYf:|C}RQY5\ +vw zX1>pVHȑ 2<ܻKЅ:6R#/Ve͈_w8cR'l6xf"B܅XA?hi(bi"-8Xb`)^hoN~ۤ3ɥ%8 ቷ"jԦ!ͽg?kfmv"V[ud?hZ Lqv&IP @U'<.$_/o@҃xfЁڼ@jst0 @'4!MPzR+`wg9z N.*g MYoJ! +[Q+ +AX {Ӈ$^ +fDDLc ƓDPCrvYh* j GY/T sAEŻAwUbCR@KI%K@֘O- +ϩ1C؂[N-NeGOq0ӯ'ؙB9tg +9Bb1pQόcv0{~j0a + * ҶAĵ7_ - DZMd{1SNh8Сk!挩98/S:a +Ta)q'Y~2!ޯIWMag·_wLo3̯.IwBb@{J*~ƌ3 yWO` [&hu12p$d`+w 睡{Dق SG# %2ZrCFD^z[YApt:}EYσhdø: ኤU' +Ue[)]!Bfܹ{قrÕI>P?3z `aIs6,5F^ [I 6[HJag%(I? +Rd*S1LMZka&G1RǐoWD|xܱ]# Y/;ģd*r+EMT:X:prҖv) .^%K +Q>h&/1 540/RIiҝ qr_I&dj_g9o+mz*vpsҐ-:<.cqR7JB=0}D‘*\fr|Q {0T?#yaDM+^3g4sj>C!Ȍ'BMF(d|Bc*3-ԒM#y-/Vq ßaG{$пCd:ƌwiՕ;1{hpF850(^Cgܱ.*^t{,cDЏA[y#c1gl@)8S6lhuKĢn  "0Cϡ'Ã5 +endstream +endobj +157 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +158 0 obj +<< +/Filter /FlateDecode +/Length 2930 +>> +stream +xYS_AٔvyqJHBBQq,sw_>/ILOwOO?~=9wֻ;y;w`[guaws_޴rt{zv7;Jם4'rD+G{qx4jp@IjKl*՛$Zar08eVj3VmfCDl>1F_%RRuRkzjq%ḙzL}V#'gFU30j 7XJR{SmAѻy7MƃeCkn3 T(m8'mL)ug= =!5; +kZ¦Bp֡Uv:MBC |2YښO,ǙT+Zc6LaD&tF 0BA5$ LH3EڌOuҘ#nrN\5I!1bqlQcY *sE7GR]д Of^XkIl2j_pj .Nb$-{"2Cڣ;̾Xc(e :g +ng/_rCTL^u0|0f(m&&͛RR@njΉ-slFc0-ҦoE"Qc +US:u21% FR$Z1]bq ίذCZvZh]QM[*&XS=˙ jrA3hJVe{U^ba[Jp]?svN> 5B38NI5B@v j}yYͺlEGp XrՑأ[P3KHݢkD_yټ 4;]dJe>ءfL~!l(Ū)e.U3b?+`JޑD +I|_@vV3zdz [1o5=P&4JTbO:x~Ymoa+Chs؁Y]OAhϩ :7#]^}*mgmz۽^Hj=R6cHcǢ%D> }pL눟@d2`ӷ46Yw/ + f#QRjAvKDh.X`*HkT` mf &ਿ +rA\}L ܷ9tHi(Nh +߳0UElO?>[pQmH&cAI)R6& xKZ.9W",`(c0lfx!J)1/? #K dڕ=YuLuUcԅB&3M7ߠXQfs*6p9aYiiNh;dt 2%pnG2f%+j{Vo\ fA~hN[ZEmFIi:TK>"un|;o[vbܿ ۹@+ߏVvoDPS,\CFY"L^9b F*thLo<5_[P{vyp%6浴i[oDtajRhU-;F5nMl Hxo,iO¶uLPdFoֲU:~x;B&8N=]m$ҾFAcpz +ߏ.BkF P -Ue]IG"M36M9_!wWZK±j5F{/,Wgr1[9O  +޶mM5aH%J{CWFϼ_mEKuV˕5b]ǣp+)h.8@Gr<:Żܢ"CqHEc*rtnfܑw\O:ˮ@X5V;DfΙ.CO|5qHtcfrA2y [? U +ƕ.wԘufീ&q8y<O1[yس +Em+xAm9&Ŋt`lj^xk&ုelcѺUnҝ`乩z.wCX1tM`9' +endstream +endobj +159 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +160 0 obj +<< +/Filter /FlateDecode +/Length 3152 +>> +stream +xڽY[sγ~{Rqߦ/E*) YDZAZt1Ϲtfl +\Hwswr|LF=.e%ODZΌ%v삪dc bQ*JNbiQBi#E -^z|RD +_))xoeO^`N^?S+/ƳP9v<6ܯLMyrbo[iJӬ>ĐVU>ŴPQ$EAW Zr](+Wh +oB)q mQZ5fjΠe.7HsRk^H ^&XJe +ez[*^,`j# +DUZZd͸{ +#$R|+,i6m jp(xF,ѫ^#58htYkܒ  @z1G-08uRKFw>O8oJ{˾' +z԰r2}UNېkTLnz^^g8E7 LB`޽?.F!P)>#d0u[\ +F3C;C. s p.&]WҊWr.ʓ"h4FyRF.DQ@)F(9k +0y^0䗵tBK޿^-H*JB:y(c&%BSSyt xpɻJ0;}bR5bzE`@0 BnT?ƢLAM)M;׋UH׋ 5#HۻYAa}xCƵ% KF:" Qsz1V6{1zR%RFy˯ݠD\cC5C64jE .<Gh^$4/Q@K(ֹu$4؜V{qSK܎-;-=L4D>Đ&ലfLcmF+8jDhrM}q\F>Fs#d H R2iuɛ0P=+e;OCnC]V`݃4-W- @^v2ꉤ%.FĐY&|FNa:y4l2ηRNCJ*A%h[y#7[4~ +-D! G`DsO2ݺdL?Hƴև1ɔб4Y.|0iLV^ iݦ{'o (kd9E(oU/oQ%[v@Š5o9ŏ">p +.J"C8fcAi(^YdɴmiE#n sV+k?ijSk + KA/(<㤜[k'nҵѴ7UFqjK2ɒrn+- ')dژZ)dEV;}Dh~>L y Se*>axG Γn?$*'~;|kW N6&;N 7#0#1t2#)A[0"@ZϏ $.RRS쒭T.A643 c5ާ6 i6COLaE$~X%:m4}ꐈ)c@g^-ׂ*,ǀSIW.U㈴m8ׂ7Yq 6We h?|(D+Tœi4pr6 +Oi72WERсg,OzEd(ΐfI@~L'Kǻ˸&3Mp.SR+:}M+D(qO5[»t%* .%4@7_ eUڥ+~ JrMaEが;r =k9!bbUt$SdX=y8[ϳ@s *&CvRƐ_a=y!1(2=B}}1Οuїĩ0j6śn)U07]N^O>v}^2?G'85k&꺒!l٪pw͖ ABlAef <Ȭ޻> +endobj +162 0 obj +<< +/Filter /FlateDecode +/Length 3909 +>> +stream +xڽZYsγ~*JfR"l*YkCk劭^Ҍ ` h]-KGMrtfT.߬4vCDA@m\/-hߤ%+b@55&rW^0LVE!jWӻ) +NyIB1n6A!ul9qUiS\wf,SHN<%zDPi?X!Ƙ(( 5v!4i_`$;ooghx<]\c{@cӘVcS' 1%$"*~.SQYo FDn(KkAF γ>ǁlF&[uLMdb}g.6u;*\9͂(r8BA8KlP+pߓ[yjTgj>7%2T)>, [v*(*H#l!d1F-͂45&niXoVl$x2YSnjT~ԳK;#oYVhSRALo‡`m@M_EBh+&lBNI<Xe/r +YEoUj#LcYX#-=Uy0k.i pjμbJh=>8gK TAoe&DOw1kg%G''E,YrduC;rɢ &hVLa$ !i pio _U*K}ht3Z ecz D=0F)JXUex*߾NE9~-5a_tUP"%Ǣw1zu]7Y39P꼚 +] m8L0F9p gIz{V)b/((UENE<5g/A㖠`QOGpB5c0@E H` t#pUʄ"dzPh^1 w ngzU3$ x1l]ċj/\k%9JvIx/1L=[7 2H+8l9'FrA0m!hP0gbDYmzG3qaim Kv@wء+kaFz»x@S`oƼPR[F3f1?C?5F&[/dLj2,Η5$DC$W];rkJAQ",@ͷF}~E/F^rm<; !9mT-(5l})1NqR*Ȩn2ze>TF -s]턿fn@zڤ3QBQ +=oUAL g*+H\$wO +LˎQ;. mKEڪMBQ[,6fG>ԳloPT2Vܝ<:+iVpq`/Λ'U8d5c1^.H"fHAx +# +-ۈLlڕ=Pژ9/*LbB*U--pXKRrc \ZR;Agb<2..b5M`Dw<R<8I2XA  ml\F JuJv Ru 10 &celWL3H{;pWSU}KUV죛ݜ֒ +)4TB6)i-J`M9n՚lǧhZV-:HaUH掋ŶW}%yd zm8v]Sԗ-Jz餭fPdwt醦=OBu)։$ј!a8Jc@t&9RF2"h|{I;%W# 0ւ%Vۺe]%{6&}_.;4|uq5;A(is2¶6+9պAx6q5t%,@^Z B%j>9+onJÜ1?j’,1` d}gxó%6f}1d-N߽Um) CYNUGYն$m\cEV`N(:MoA]攔 T&_KMɈtOBup| n1Ӌ>ʆ57^V'L' rS .xoUi9M>}A8R'h8q-aٔTiu:HCZD>WoW l>} Z9"kCijO32bؙ(εa˻W3t%S)e;!@T-9(}S,XeM&)U0vU؁JeLhӻ1 dJxM%m q1' nc&X x|D9c F%< BԶEcUhyWbkԨCZ|+րQ'=gkm1nָ UʖԎ%nHm|E Wn +endstream +endobj +163 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +164 0 obj +<< +/Filter /FlateDecode +/Length 3387 +>> +stream +xڍZr}WSeq *Oލ7lmRUHHBr ht>Л}WW?]߫6W׳7+]^:5J?y3_5uH)WכW+WM]5qΪNo+OURQj?F}_IT+ZFCˠi߿ZlvWʤh>9j|5)&hN+SOUTJjRemYVF5}H*@eUjM:~Ԏ]+\0b9AeWߕ]Pw70!|^8#kL,=h|Z?DNN\yӪ;.ғ ltVQ}!)h-j6m_Y #-ԌxUSLGw9q=jr:ՁQaPtݢZn̛*KwRx'3hmp`ՆÈcy +si}P[b~lמţR(ˠm!oim7mu|ߏ:qدQͻ"4V>(߂*2!Y0D-L Z^ZsRVƪeM8gRv <ѩ® <Mt[Ζ-ۓxWAmpO(K27hB6zZbsP 30d!<;qSF#(4i!V2BDn Œ! utn&9\:6w>#V-@%3XAat +p+.yi[8){fx bhp̲kYӔ+M!4ҙ > +{`$6gah 0Ͷge Fk=+86/3p, "MI$a̿e鑄WEã;:t}Ln:/Cq?+m7i$Bob'lq}V}kg-7¹Gg,첽gqzُIzBC fTh/bv,Lie78O&9''@tV?l NM~Zq^sD3 sCPqvlF x Ql%O,K+mx~Op-I<ݐʝSƋYSpo ZTuwAwXܴ}O^ =BZq<:;IDǯ5b̳(ԆXx,SzZs=J(::o_nVW& + bfΟ"sqGAX@bDŽC76D.!n)y_<BE˼Vgѹz_CC3vMoycMpVtn 3eeh;0=c3>Cn*s'C""d^/k:kW߰FpZJ +MDX?}~iܰ`qdt01૕{f=" ދMa̙4>'$D 46e/RB 3g̙-ugw a:ӌ16c}`!pcsd`sBZhQz ך{8r*x}I{ r3A>I׎* IȇЄ[ &H7|>ibwVky݊0 3͝tAdwqe}:ݣHp'Kv"΂!7KI@X/DIWs.//RNn͜PڦDz-7*东s:s:{1@a9W)KYA@sɘӲ+e- Sj? >WIj:\6upqbVH(}TO*xύ9׆%bn䨬ӬXgרO]| (>9mX?=A;"NW2v{aj+QZ9-\vjIfSc!z8-J{A~Ս@427l7"* -v`&_}CؘaSN!gtxrҐBŨ^`[_Rn}~[bhJn̋J&'SwGD鑫ޛ%cxI3bݼ&4983dU ੻ʂK٢r<֜4WL#wvd2MqWCe=%3Bֵ&%yJҍW)~Eb +rɆ/Pa0 WDAQ9om#ͩ%e38? h*V/#ϵ{y=Ta`I*5j),f|!L{ƎûhI)KA nua_J(&I[ &W0N<q9]ﳜZxy*H|T卆::0Q8o)vDǺ)3iН{̦Q^!g*i$A<,WjE[.@"=8:ƆҶ*8RtCyo?17ʲxopQʡDZ,OpQ k~zDo=.Y"C;.^zkx("/&ںmlj^ܡY&;G#y" IRlnz-R4Ἄdj.s!_U#IT(#.tpV;(qɥr#_;.aɵh' /˜> +endobj +166 0 obj +<< +/Filter /FlateDecode +/Length 3377 +>> +stream +xZ[w~N_=\-ț-+9V,IDּ"wM"7}hrL.q euUq|wjxDyQXoc=.y:W:/=Vő2E6Ѡ +sL;'k!S*KN߼̜l`U6ӇlpxT/3ϙW^[_ӌc6|~Ѷ_Jᄋl`ԇ_ÿ gr7#Li|ؽ]s. bHjX1K2us'+a(O֒L\°h: klK[2/ɛ̒2[x9}jRш-z5`6dHt2۞-5.Y -Qf:4c1="@TB [2#:`i*y,KzBlgܐk㷗]xeG-bRO ,7F3Z o^V˼>ugXbYzh]ܯ9O6$K#1lb)10ׁ̲ItFEi3ɺɜWNƼVZ3Yd& CЫm-Vh7Ue?12NɖfKce 0M& +[2p(q$vB[9]PJh!l2. &i:C) L#TbBlboN 7!__s``p8`V摔#XJw X [HuoWUz3!nW20\ ?X ?l޸ O[Ս2ŗé$i՞}z 㮶I{= +yߟ^~!6eG&1z $ \xΕg+F'=  Qb7=Gm]~ ,Cm'{ءX5zK8`M1Xp0L8&4]kLe d,V\dl[=K&R˰ <=瑉 l܈>dCspȌB!^ +%T dj-3l0s>xb`ɣhLiI ${gIGfiڛx gyINI[Q4S#/Q YK)R@vA*k 3ୗ˓2*$[zddnr@kӡ;-Y 9qoФ`͞ ʲ*{qKg^lH28Rg] J6={وKiT Eݳ$'5ys'չ-rM? m9O_"F,AC] j/\m0Bm.Rg.%V<`^:&u(F&yGAi´r{:]fuv9;=x@we U7cv%O5J$6V 0zHB_H:]rz"lDO9ī?>8"=5'ʜ3V왇缂Nw-7%w6uļ{AHG-3ygILD3Ad Ftbz?w8V K:F]ZFڧ[.pX2;<ʴUvP+,E$d5T>a5DBjczu=]1ѳˋ^NG )LYS(Ϥ0F׋-"PZ {I_K[NMp:,L +F;(&]YqfoEOܩ;N(u &k*8̡VtV':18&/K׻Kܾ!- ڈ _)g"ꋑQ`,z߰K9OTCZ+RŸZLRӢ;Pn}߆S3W9΍dXVI]m8meR(TB羔YK*V45)r4dm>6z^I[]5PEǦ$U-C5}WU J2sf` y<Д' Mӧq:o>W`ՓNw0:`!R%g$m>d:qFlSlfHah#h=7ƎKi[3 0T-bcMkqV19#m( +f]we%EWp1R4^mNjWG'.OwxMN>>Ggp /ȱHO,s#/;Efz9@o]V?0{) $Z0+~q1-E T{^ccZtthx-Ć$V^SRT )<uus+ 4hw+PR11pJw,Mf-$7m¼lYmIUw EB+:MP'&|Gc@E5K&Mo^Fp䥃xSZ~ʙ3]I-,[1z + Z:\|ҜOЌDOvʎ-"x% u>,V +endstream +endobj +167 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +168 0 obj +<< +/Filter /FlateDecode +/Length 1708 +>> +stream +xڍWrG +xz>ڎrʊU)[9P\D܊U]Rʗa/<47~f0_0;L%G6AĔR3)JV흮VQ ?֨O7ު;]/zIVjn?Jc*N}`)xɕrV* &2$O⃢+҄Fy71.Q ~Sڮ/:z5ER!yc6ZCs %GфVR#RdՄEEd N=!1ZUp2dҙ̠q]CPAݑy⸧j2ށ.= :]$lfS -P&_7P=`/(3։mo$R!FD;?`=9LľؚlN= 28 +X9jR.*RifKie"X{ b:.#7ХDZC81TR\yk@ryvg@:ub <' ^ +㑤aw\9*eoEHyk+9+I%2ڪ΅毮Pw[&H}S{Mk5D0w쨺pU䅒kA]lij+*PW +q۝$->k^ : 2sIP˚X 5,ڒD $h 8埵$j0S!\dy%)QtKA&oμZmY/ ;< Z~5v6xMQmq$r,܅0uR-!C6knצҺƅS5rϚb4ֶH,'6v\tT=JcC)WUTX +fK$h&qO alP)O3ZN9N>@ЈrC58ʱQvhd6kXL$vh3-B˃ z_%ka|R Ur1,}hԩȒ))*:7߱x.C$2wYx̎Yb'ggžʾ@M#l6 k Źq:u7<͹H#VQ 1`,6.q&R`4ԔiYNɕ+*h aWھZ_"\J]B{~hb⇋G ^KqR?LW]pn\s};d\ +{mzm6[;N  R^6HVlY_gc ӯ|ĭ+.Y 2b*B +6}:hYydyOLt O5xu# Ż :O=SߊO(Sɜ\Cd.~*z|'\>?{saVMx"Q|OA̗Lcَis Orz5~j, /R!?.;:j GOK<f-}E36'29JNT˯^|g+JxE979_bOm +\kO)O]?NG[l͹(q]@D$=dQwv>aC K֞oS:#Ttڲ3sK/oxYMo&/>ˉD -혡 +endstream +endobj +169 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +170 0 obj +<< +/Filter /FlateDecode +/Length 182 +>> +stream +x%M +@ Wvv=W[)EmxRO?& 3ɚ +V2X΂~B2)B0.I+gl!kQ=[i+ ⼋l疘܄*C]q*'ҡ Hh ipAX9#qo݈I'& UK'q{eC2k +endstream +endobj +171 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +172 0 obj +<< +/Filter /FlateDecode +/Length 1549 +>> +stream +xڕWKoFW] ddoi)R HKdI@~|YRT y75P4wc SrIW҆Pdds^={]TL~"AU.4͐2/c>u"r[YmtR AK!=QӱW+8,^kJ>ˍyUE+.vMW<, 5,͕.qNF1 W"Ԙ3hi2c%[zwV-RVړ}$Emʬً:U5vEL̓ll16ڶ7cͬÎiL5-zCo/)QSM9 &]v$>o›b[]:|i×ىȝvj3%ɸe1S-[HfuKߔNK^^.9 +7j`58mvT6݊_MQ:i6B낈c_j90%=y%A}/+G7dAB8]d ++yo4 +AhBG喗̵j> =k6BZ]ؖ#M)fEksҥ8NlG4"gaǃlIdz +-sܵC(6KWJg.'w92eO+ vPܚק3aisS $zASo{8mDKX8 sGiI{O878R.|/!.I,_5;}<_dmcE2tdt(1} eVpg_Tv>8dBct&,I񉮃1µ?|pSn) ^{u6SZ(^7A-HXepxc Κ;G' #PE,yf3*NEA,~j{Z IdkI(Z. ֡P4HNEjz\26b3ÌI ,19cka8 EuJʼb;* MxCsmtb |M%C;b&m˜X.59e>#G{cF|N= вr +~]~(,$\? rT6\#]7]`Osشk/~-6jP+~3||qg&\`ylej%#S*M ŸoJgT7MY&7uBcC,q)eV\Z(>bZ߰]5 +e@fC5hJnGAfCߌPW~$In~ hZ!,(Y% 2Uro`j>.3QZk|lwQW('W?Mu[ +endstream +endobj +173 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +174 0 obj +<< +/Filter /FlateDecode +/Length 3114 +>> +stream +xڽZYs}T z$fJs]Hr 4vW*>u%))T2~:ϧ7ل~Ym>ʪNsW޴0-J^l5Q%NҜ8@+fja3[cWOgSz%i$ ShHa8јV}? {R$>Νh^1f4V81 *MBw{cW:0, jDfUn +D]:tGѢH Zr4u%yVmI|HY)Y]jB%ZrB=$VnV::KlQYG❚ԉE&/ԑNiVLMt?4Uj onS0&WFvx88DȠhVtfrGjc:z#^Դ6 j'1MOB/aB̲ +UEɢ[ؔ-Jhm-RߊW%t|RiA=hsOQ99WxH,yq^ ==x72oNؾ5־,)fkZEtwB^[vJ`zμ$B#W3E-P%fdFQ-5Ug,[i4`Dr\)RAFE&[cltwM4W[5h)>s5WAr0*ْ+6EQ% +߇%o@Cf3b?M{A."ACL.q]Gb$,^b+Ī"Rlg0 +5ܨ%ІҡTGY݌ k dex1p`vY/$qSvVrݢ͌0XSX3nepp96|MWڈ1=ի.V~wFH# dz ]mLJS:Y-Ю>#2K~RwrOwaf=.P7G@-{I+ovdrLٛj.(' di\ߥ $tAcu~ɧI4'\Є˘k=@d`KiIPrTTJNeXȕt蹭Xb\7-r^=;T~EH4;UMEvuuP뺼 +{ԺPJ6])*bKyaULR.(p@bGnKUwxIkRop9]8HX~=$ɬUm95eF]iw qeုc7ydz6:LY<Ǿí8A`\gAIXPh0-It"A4o_K͐.fY"]tܬyV[E"<23(}{%4[Up'ț8yKBzQb,/92dY +~6hϐ?~nW`)wmJM~L1ꬰz @s&0y0a7 +mX{4{,G2*x)ø]NCCA=fu#z-_p`:&g'_6z inBi?#HĻ6iy2[TN;C^{!g_C}?u^> |Q_S:=O +ު9Z5=CAW,m %3辐ޢZ$ p'&Y9&V>rnJ?"S(^l|Ѹ^ɧk&4(*l+m=lM(N] ^ +endstream +endobj +175 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +176 0 obj +<< +/Filter /FlateDecode +/Length 3336 +>> +stream +xڭZr3UrnJRERe3]vl 0bӧ{f/ !rs9}G}Gv7gw4֥ft3=G(v#Mɛ~T7Uܞ|1,*^CEaksaOE\ع^7?Ph֦n_2hgqvlUD^#W踻c[a4NM4?[LO;iW@;Q9 }6t;OQ"ث=ֻ"%rKaBʩ;L4a +c[A}LFYןC47h[%$Ϭa[MDk/t;(Wjc\V I F$V5EMjvM-]Il]lYUދ}amۜf:WyMPy@3Y~qxn'5UۻyӮ=1d{ :846"Cu9kl*7S/k7O;Eg]-?l'[uk5u>=_Y?uSƦ +y{{F֩Y& {,|Fl u;6tP+ч-c, `b'&tΫڷPZ!Ij4l)=4ddhVCƗ?1&WBllY1t:uM>z۳[]Ɨ*nKIW<؇*Aa=uOmg`纴.J_ +^FtVeOLJ 93w LH,(vgQΦi(ڒ*g.:vC>2 'u}l4*o֎d)>vr yFƁ~vY/_\?B6"QP:4́* FXw81KQ(fܝǎկ3r 2ML*F􊲌tYQ iB*˔ d6v~XW5'ي;R'c/jw ϰ;$nr:oDZ|kL|CGNA2pS\I\ :z<9w] 8,@~䚌pip +r{`?0 +JEZu/ ɸTT>t^M")͵ަB2߸y8] `"OݙB|{ZZ2Ig>C>dm`񄬍&R/߾}1FJ({̥zOR{sTRz8vmq}1\5|h0̘&N+'!aoWL*\9ɱO[s tl/RR<[hbpvS*zѓT.9JC/jb{ Kpm()k"_38oayP iW +H.xf4[̩J |+/-RJ}_萑'Rj&8F|"H+FHH{{2.Pmhp&xD[oE]A'z]M tTn-P$1(殯~~7Ǘnr(caorυ,\CVn3a6O.x +KO''t^Bcu>Qμ ULKgb)T]bMINrL1X75wU9:15Rq8fޑ #kos0q5xʝ|gHjnrVDbxмp;N R6ɦg/Ο_~{Bg//~Px%ȕFLU.#N]{rTt$ń^趨 2zJJ&E.( <GV- AJDt+8¶,y|CM >p$6]tRysC-ד;\?B67Cԧ9".˃pzE +SdvI?<24=Ӆq6&$pf^RSʧ%u[닛][Ŷj5BݷEɒT~ ڹܹor)n$FG,œwZ; t 7 +endstream +endobj +177 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +178 0 obj +<< +/Filter /FlateDecode +/Length 3803 +>> +stream +xڍZr7}W*s<1q9e1J}DJry­ݘ EQ٭4OnO"Ͳb|^o/.EF7}jk_yQT6rz.oWߌ2Hz1y¡m1!W3y3Ԍ*$)w_/?IԔjrZ;`*ۘڊaddFEr%k7Ċ7du֦u.P2]I uO.VɊZ&k)-%x̖-/5eMˊ4[*.3cdIS;}nyLHɆt0o쌣Em/9W5{a4&% r%L:<Г 'oww҉ ʓ}4|4J (2jaVL;ȅ49\n&I %ќ!tH#[AIܙ;bL̃uqbb[!}Ё*jmiQ!@n.)XJ$] ̔Q,^yeO)x=xl;f^7 @{WloɖɻjkA¦-KE#AI目N-|sjGl.'Q Q+嫂!gt:)`t'75 +ZGK#D30&F+ۗImn.6=?O]FGX_ķlFjGPbFʈ\9۠?޽FHqf&Py"{CYn@Y!C$&JM!P`gUХ c} =茧\\ϗ'W^ņz (xyv:*s!#CvXUC3nFgF|&$*>V?[S0 㐍P/ D;RaZByר95C`[3|3,\b Xʹ鞛2p<5InD2ZT SȀj/򨎃#D]agD* 9'ζ139ѹz+' p 8J:i%`ؠ-ddfWQPLp VZ%:fv3k emoO{g1'@\ +'0,G?45o삘>爕У JۑsLrNq+əZ aD"O-Mw354|`z&g˘U#\}}nZ;j Z.. -V)` z@n?vWe6r%i_J`F0j#>Tο$NZSjq'm:1pJ^+zYqlO#De&cf! P5A1BHU'q3b9γ:z6.B4I)vI`є'c(J̭)*.~HqQO^edr*ٕ9Ȼe[<o=<|-`x%hVAe 0d.+C+xbg<"*u} +1$Kj<{)>|GĢeo9B.6[*-?N +gD!xX|شf%&p?3][2oDp>q)e}C{6DO,'S{RNfsu|H::iE&SJY. iIa+`2[OQ:ؚBqCmP9c?T73SZPC:{`#WqKQڬ( +6J,_݄.ܢj4q0-x鑲<0ҠF(]3ujápnD!+討U6DeHX Jk-^8ՂNYaEntI2%_D1,sG(אo8T+z!9d%=qU::lðIdX58X*lX^wx.҃܊9q1R%_@}).jC~Yy+y +#JbMoE fuE;Cd"ڃ 246ז:^Z(# |D'm \.B,r#i|c*tȈIiV9͹: i˳7a3CS%YyaEB+r_D4Nit,AϬŠfp2ے NgZqg5MzF[1+i1}g!oz%%6*u,(oq˰F4kM +O]uڦ+)ëy.JpKlavIcӓͣ}.*1p:SZ֥;*\j5G*1W#r3gk@*g|sP,}^iO.MLv }P\"xio/S,wՈxrS7%3|[ ?P;pEHL"6_c:@CkxWBj}PE!1S$ )!jWE{ˏ?r[Wo]}t&AGՎѩG1WkKTYnJ'D [hLш-> +endobj +180 0 obj +<< +/Filter /FlateDecode +/Length 3700 +>> +stream +xZYsγ~/R&9$Tɲvb+MQ"c +k_wPjSJ s}ˋfslxBOeQt8~}yJOckwZ?y3ޟ֍)*؜'2BVc3YnCnỼޞg۳&9 ]t `cJg1xuِu4+|tt t:2ׄWm:Mɾ슦l:L&Rl"M5}[e2Wl,ba</0F Cד m&$`fmJZ T=V08AW(f +[zo.^%/Lф(mq`;EKOْt +\um9!@8znm֎( 'y0`K9[N uLS4*>óp;F^EU~BfBV,5p-]ܜ3S&adSęV +P)F"LsHD(EbP&'Vte[zeb]K*IELvt+͖>I;^hXh-ߘlM.i`FD}:} j늈{DH2$0D^Dˌ ;@`yuufeΨ0]y''𴁾$qa3Kd9^&-\s v֬=>[DcҴ)˒YY»U,:ta~SJkO;BQ"q6"i`nCew'=)RӴn$ɠ"ٰlG;zz&UĘF4 51÷dԑdm sՖݨ07ǀU'T(+Wc&Ծ;6OO[lɖ w}kgz&^\(ܔ v +,1LsR(CM!>ؗl' L<3ր-ŃB\'[+)3c.[,7:uj:'vRv@u$ +C)F sA;~^mMb"G ‰=1^Fi0wxʳ!R + 5̲1sqQ+EY5c $XJv1&M&-Ǫi ޑu6|Bwy&aAb?Wu !lk(busG]?""_Y#89^oZbk qՊצvG%$Ti/9t{ iP J,-K0#<ҥTa!'M s^S5"k7]C,|$i6 ĸ{AkF?l!A ΘtMnj0^ ?+d:)h&|(V٪d- <ű5Boa3AҸE֣Fї}Du+G-4~h,504HF9!.R~Gj>>9RRSl6bTk">!tGָh:IVP`C V:"''mՀękˎHzq +9?dq1֚Yn&bגɲ’+JjFo*10yl6Ȅpֳ"󱑕k 傯t.41?b|&YlpnQil-OZ Ciձ->H?0N*sS~[411vƅ?pe%s4FY}U +xm}"yιʟԠwИBJ[ͮ-7GE}}:6 JWc)c>e7磶&$_KM~^”feP"dGzc#L.rXl۔=a 6QFlujv ;Eѱqx' +9CQ]Z}~3o#Gg ,B,H#׸܋ɿO\a,wd] koPUxqgOWz7yߜx}ɳa7\M\Y2=єĨW}B's'4(Н[[:M[#MW4$>ӤVɊ ן)Zo[-5I@= uj#= {kW}mήsE(C!PcmFĄlB}hS,#WT8Ca[ڡZ` x bYЏ6JRfOUbU["u=H  7f Z9^N-f7\;x:i?҅ >m n]f,#9埁.(]u)+BGI.|Gq*Ǧ fUx 4pu\ ( VCV5&roiji~5eb$r9uI s=DL17 ǑgӏT8.av] , F{Kvp1RMKHM"uMۭ69Ah,+9`!M/Qn\{޸TD]PW2ZӔF(3$W"H[bپͳRc~iW8 +ms )u6|_I<PzdrVܽ,+ +pGYW-=Z+/[٫oUjLS +endstream +endobj +181 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +182 0 obj +<< +/Filter /FlateDecode +/Length 3401 +>> +stream +xڽYn7}W~ Pyf[vN)>fsO*m4#{MqIn/ޜwߣBk}d.n.ݑ8Wh +1]̟)?$X@+.^6"&.-]?C̫S9]gyTEWѫ3z0vod;z~B;e~wWJY^ywٿ/~xF*VPvf:m]H- _gTHqfȺ:l@k/> MfZn.[ڥK5w7۬VYڒ:Ѭܑ6Ԅ^[YC#*\d&*H"Ajz fƪSHV1>꣡r~gߞ,x J lkθ~#2Fa1Jތ^-ZقVWXod[zCHݒ~ѩRWZ"seO5&jۥA sU!# f),`M2jMS1!@_g/K+{r J^I/~e KBo)5_~?>׼`&FQ}&)6M5k 1E%osN5Hq( թϴ6ռ9^,jىqΈ(}EˡIDRw˾] +r[ p{ys'?1IO`j0"e-m?H^uDH;9:;2(C)WFX+v4FIGլ6@{2P̓p 68 z7ל L s +P΁+tCH9οop:+漏HODJI B#kjXL9}-+<3HW3vEp!ù"蚜$KJ6t~R8NlĆvM}Z\ To?79jp<_X;۬"oBF!1@C#>NXKB[IMbﶱUiZB :袢g06hT>G@>/w8aCw Q+֕dד䏜8J9$Ue@c^r,g6j^hl}hRvj|KA8YCtUP%3ɒ[VQp1>LeOrsdž +XOcLxXy +]KL} NDaW2<=me$)rlPEեb;'bXFEӏ;s C +Z_W),W&+7Og˫ZqES "4)n(4G4<:A/5?]6i(=K]f?Q?eB Z/:CV""R!R+5GCr5CՖ{9\?)0W{r0&^ !FۓFNa1bN(TJ{*D)DjH4r Ee#|Qv"5G{.",5rֈ.U'жR%MFRh~K" rB?kA-#)7鐦U;Dt;TEƔ0Hcx?e<@ӁTDFRIeBbܐ~ǨfAk[[ޤ2)L.zܫhG3&Vse_ NJFDdmzx2LB,I2Ko,WBv;l8CyehIr3*Dt!ӓoRK +7OIbLQk(A=yϻfd$U΍pDE.c w->0Q+L,\!PRwXyrqȂiv"Uv;u2SUEבN˜|ІȩڡfXZ`(V?6}/ ʁ5,qoaKP +'{nI8Q3ߘ6\Ev 0n3m .IKM 5QWކ(<"ۆu%snG9ྫྷu8\%;`FE>9Muo}XQuW \B:CӢj xiڮ׃>WLtp+IO}koOLuumM}Vن2N=wLT^la1A lfH=Owy$F%O]}ոIuEo.d*4Tg8_C N+H=F8ZHN3+m7Kơ yymVֻ~|4[k|@8TK'EImdПƞ!DʶSJ}m.?-~0P$_"BN*#PlԔ8yŗ鱒%&$m=HAJS4'G?ULEl^ϐ{THK'kqc ?3#%IYz4 ܺ'l"Ţvu{OWÑIX*'۞{a(%:IQ|u)Mo'l2Wbfե6Nn]OGރqݩaK*C -m%zKߙ&7&p*e^z +_zh/橔ZUS^W͡iRѣ$;} V?NO5n|6nI]o$^߾V/wMKOVa0 +endstream +endobj +183 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +184 0 obj +<< +/Filter /FlateDecode +/Length 3897 +>> +stream +xڍZYs3OUj9RTI3%YEXy+(>uE`1GOOO_|/˗}9VדoKUt沦?yR^1-Gʑ҅NŋRRKW{Qz[\_*G{(\v6u% Xh4N/ +?.LeAZTrhL&ԉ}md14 ʘ:2DrQs~')W|s~cd&Y.0[ 䆻v+i֐V##M">$V"Ku:Lj&U?/qKмx >:B3!y/7h"e(-5x5\S^YZ`͆ L 6cۓO`&3'/?To__5@%C!*L[$G%q̂8oD*9hR`kt7`1TuQFG&9֙ /K-V֫S +I}}vnz +BTsh{UIND 8R|kG5U|*Ӓ5-1B6K_|*< ]NT*ʁ~bê[Zlcvoqv3ϩN#{pSVBX !ӧ)|)wp9^mɪ19L>W13) lY/6JeY T7y&2vGyto`%aqȭӾ]}d/Ċla Ś&G 11ZOfjoҪ˲T%CQ:6Ka6 G2#`(]9r@Fkɉ,#(n|5 .q-@S7 <@X؀@َ%9!{@7L-TQaD m9ږ%Ʒl. c!x_]_&Ynu#4%}Z& <-yd(:g9_fyKrfZ.8 EC1U9ԣt+̾ijsn@|?Kcd6̂-19{ȶY'ak̑PfzUgiMeAϠI#/mvu/h%2>Cn5(~ U^is%f-v+p>RSǺcZ_ۻA2%)bO5V# (0pc'rȱq)c "+tc1ʴF 7]MIԏ(E4/zZN-7DwH58)? +|b.ᴝ Tl]k82UJH᥃U)BhfoSXt2*\&(Ed,dK lweKdX/9_+ʹb.N.d<Q,;\!9Tp]:^:OXnl֠> ɣJtrV +ŻW1QIVM|ي@W?΁Cɀk_ +d.Qڕ& +$65mD.M1lK9[4Ryͳ*Tk#&6= gP|f;vIx!k$AA};{>' ]ѝ{!`'5;4 8,g>F=RSI KM[LTm/)D&赔KI"uծ9gL.N<ʉ9l۸A+;|,Ic6NYm8Ȕ[ҍ6 +"8Og잺v۶B2wX3'n6[8D*CFϺW5ړyd:T|(ZX{+>QG%5NG\J\"#? j'K(\ꛏJF@QuuT6].ytPB20&A?ר?{QZQ +bjG8, J. EףJ#j6/u:'O KUZ7u|P9mN]]7[?L Ks|b4>JP(ѩt 9YU4>h׊Io(#p&/AT85;]w^*t˽ϱ,"5~ KDA $rܻJNH}Op/,6^.~oӏS:ʁ#5rmorՑRɗBݾ쪐z!C2JU{ɷӲER%XKtCnyU0rI)TFp0q%G`m`H!Y<?@$2'Gk>AܑtOʗ`qFQ#M"c$?rw*w:xsџgv<î_r`kF޻S~co +@pϳx7`A-8<GP#8]#8;[t|٨{dUk{F(rqjod17岒| +o8%oδ? -p +{ǻr; p_MH6,Y,01o# ʥ|{cl҆wkˊ,5 ewG((wgWOT,kkL>k~^\y_"J! >`яF\\ݢaH +*=A^:%J*CoLFmV#zɵd)|}} ⢢ }ʭ /(O,zdu˟^]?ջnW:ϫ/r_e9Mӓj61Fs{['೻bGY˃jbE(*GSO/6"{Iq0n479'Cu#;ڀYLcS'Sٞ&ʵ/H,(KkgFVb S0Y<}Ʊ߇>ؐTm<*AЎ ++Ȑ_Z +endstream +endobj +185 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +186 0 obj +<< +/Filter /FlateDecode +/Length 3835 +>> +stream +xڕZv}W0y9G3yeVrby.(ԭ̀Gࠧ[gzs='9_u݉8WK'1؜ϔFf4ᕑiBh6{z鯕WFQjzCM +N+Ʃw-5U^RnU/>-zJjT:W{[kg6,}XL+b¾Z;9u_icnk8Q-9ΓyuY5j/yc[56}0^]QV@ Ϊ5mhF%(H$<lc&fxgKVV@`QX6s#gy^f.#Z>˴$Yxy뵚aoNV䱭+P\gzhM %:HtBG޾|ݹ*vvLVRvwo֕ ؓ~l!PUp>g dcț4o߈ٙyxq53t֚)2--?CJiK3Fސ@Fl -n2L7j r(khe$x'h Ŭo {NqhfC W0w? _7:X +d(hZ,ckn,F&x$+X)r߆C 1%va`C7ZgPKRR͞Z][c~5%88R=--`D1n7$-OVcBMl@C5!ϰ.0c ʤqd?κ͸j@ғ1/V2l{Ap4ld@j\I4y +`tTs!&A\SAg:yڲwCŋo:HX,$̡ :"* 7o +N&t1T,_Ӓ-kX2肘$ V|1C)o޸N=cNJ ]1l0'DJ?vsMb+Tѻx6_[3 +Sq?d$@8Ϡk8nl>ńf[͍L<{ƺ+E{B Տ|r1X<ϥ#e1N"W赘b`1b,yfܾ 9l-wrYH^rdzO3a?Qgfk#W?c隶NZs)qIz,ګŐ?i>5gh%_jNKȘ^/6Cz,9`D 3g<"~.KA?>$ɣ͖vZyoO. T 2L`rEԦ&G? +Mݘ.SH9ߥ׈Y)8&"jD*9r*P@yBwx{SOzia&\ *bڰWJ˽U]5K)K;4-e=Xih6u'p\Z zB7ܵ+'9 +N5>.c}n>3nC*!M^"M*T284L*Q>lݧ + EZQ^"=3v@7;,h̭A0{8Pz~תs&b +mFg7q).DҖt'A W쥔 Qom6%ϲ)hss2o@cv_ލ\1@ޠp126.dor !Յ\ rm3y}zY!t퓷OlI9MW/U\+IxwPZ'-P 24\H@ :oC.o20B1&+(,,3V {8&mL'm.Iu@/B1m4&u [+>6@ހ߾Ăs˜{Wqd`1 +# Jd8qn + s?/V +endstream +endobj +187 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +188 0 obj +<< +/Filter /FlateDecode +/Length 3199 +>> +stream +xڭYmoF_aJ}![k^qk}KueU/u_.IN"Lrgwgٗߟ'׻OߓI]u{2|>1'ӫX֝O'm0U//'vK]rxc9q/~.]18/'M/egD᭼Ϳ|ӷ/aƪ™r"4shO&h4ؖEiM/+vč r]NldSe&_LeN/My>hi,D{Њ5noFs%$OЌTY2[償ea2~z.bl6]]l.o67 _􊶢hS5ӷ?WߝRv&ѐ W%qó4|S,񼃜`j DH `a [{,Хtgb!UFǫ +ط_e,$ܹ'9B#M:Hi 9?Eݗꇹ(رr!eZvBdO>`[ Xg]Z:zB:EIQ{r|]Uv P'}^K[ot|rK,7tcAʄlr&@TLyN`o!ʀJϵvpPzHE_aE29(,GhE +pH&y5Z&VӘ.gO<5d Q͐JsTbm*f31'+v{C8s׻Hm !J\ h8YEy܌fH_"O T֍Qv_wP"za1bB!5&D*ȴsAJ +>tF!6dj4<[r&9auO34- +t.&U^qxC8Z.,g +UҀɌ(/6a X!?].1tl)ǡHs l.ØCY'(wpb(oFJ g۠Maa?eɵ;Z.dŒ>HuD +]`ݕx2˄◂L_1I~-x Q rAh7toamjH\g^M; \)wtqĻ0~K=#iig$aV^E4@$AE@m\0})U[ø}h [(Q: + |F.&0b;n8P 5P^~|&11_!N'tB1M_{Wpd'tUBUbckY̾7XGE&H&ЙT;dP+?`CܶP|I˻T⮍YbcCp+!hKEtUm2KXeHcX!bn թ.-YZfυ tJFc+5;ݐ,r*qL{o'!bW`Ϸ " n8E@ &BkFK-|13i(ǻp\ļS9x7b(#ev:{.svڇA("U̞w_=km}y[("Zv·х?H7{"=׻+e,xzuQvm +endstream +endobj +189 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +190 0 obj +<< +/Filter /FlateDecode +/Length 3434 +>> +stream +xڭZYoG~} ,P'q`;E?}IRL_UuAIDv1B >[ξgU]:_5UYMIS g>vw/ +/F5QDv߾Q Wk^^WŢ*G!- ()ӛ?w4TZ4F_F81oOe(FޕT1^(7J3`rKy9*K FvD:b[fRżl; вPӘbO$:SZvVvhK#ktq nA!ڻRs9.|J .ҳ0K?쟑=I=|u Y< JזDjжI=]#@p?zEk*+ hb:mMvw7jJҝg'ӊ.BUquwiѭ`Uȶwçrj_\L壋֬DH X(DTM1=eC¶.6"1)NX!oМ+J|mRk+Ej&H2Jf:k%k^dl߼!oaXffkz& Ina{ sFt+kKl.V`o#]HC`[&nir 0]bB4`+ +8>iLOL0EzBb)eGKp.^3[3#ͷXpL1fdwӭ,ذ[q'i(¶Uiߞ|6U:Je,(M~oU=Y[蟖wF.7Ld αGBsJK `nģ""F wʜ#6vOz[ykGƭEZ}iiN l؆Wd׸[:bN'Oe!+Ma!9c%[|`A)Xs$CJ1gk*p9.qZ#p(jl'1kΤZ+xg=fX(= 2Hz])>bO%5x*1`|c.؜= +=In*eeBR8y'?doWbe݇LҦ3jtI )[v`/Úy4ey lm:9)2X<["ĉV`(!Nք{RҮ +#\a"T嚾/xg^nwGX,ElC3v$V0Q9dkj:`w3ҲIX #3lODଷC}kz%hKed>ݩ*ꠇay]lUW:v0?fm$\_t%IHm<KK0/m Es$CoMjk'%CY]lBՁPԏ*9<&T 5e阼XQf ζ2ݦ :mITXc`1AW16ux[!}F-5B~0 -Ⴍ)6+듕gmRy:yznxDPQ( /կy<j}T@l9VzZ5:5䕀abkZH:]BY9/br"K#\)]!%+X#\&(°t;rADIƥ&{ts$NQm[$|}kHݹ:DE E2YoȵJHd}gRr× zj6@}5 4N%aOe% D D2GhQNʔ"!^BɅThz#`PC)Y.ڇ0h9O|)<3FJoJ?lRFmhH9ѡEe!C㋡zF|8kf+}brzݍЫ ]Q*k'(ҀnBVmîh4CmXt(=C10u"gFvBꖊ'87!m;a,]ܨ'JS0Kcgg u7 1lPlL-9[:OLaqM̷:'(5ٓ:6 u)gc6TzW} .@A+5Y<;@S + J\ถY&$\ݗIL&i& +VSa=6C@E}e[jqqj~H}ib;_F#;[.xB(#G1<=\>>ӘlbCRU)==VK{gwo׉ cUǶ*襐6\BbnǙb{4{w<3ro?>.T^E^ ΍:,N:ɻ+Gsg)OT@6v/ aNP]G&8/e b Hð"L&[ P)+ ]*EY,#_ )VN#|Ay*J@⌫7btaJZ6 v-R&HIqO'HP^>Fd!oǀ$GFL~+M%ƉN5W~аUr$ UF?3Ծ$VRm۹WϫU[ `I[02b.-QxZX8?H_Uhݯ*~/,(?5̃ϯߒ %/`CXX37 NP+Tyڳ]|¢Qef΋Km^'8=zD}Y."ttBk^v| m%W*v^K+(RLK-76 $?-O~s2ϾTa> si~.z+@by֐Tdi:0gHn5]XRlæ(k[ /8|LVA_`e/zJ +endstream +endobj +191 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +192 0 obj +<< +/Filter /FlateDecode +/Length 3816 +>> +stream +xڵZYs~ׯ`4S Nv.VItRF{D ̱ܥJ]Lh4{^cuq(ꋫɫ7Յ_2梢MY{Q7\Z5ytVҧLkxu0f&+y} ̟LQX-?~Ϳ._Q”EfL~̺)m0D~Q$"MwInlvQيQmsh6$'yP/T3 sd^ ź \y^~uYϽ +4 +iv͞w[ф)=v>;n[]% :E,E-R. +s"_4K|'Kl#5;\ b=>@ jg@ |vmG!L16uoUg-Ma[I@dS]ui⠹!2م5 m#f~HvQĵ?lgtueu6g&.ZDh#1:ኌ\ (ot/yRǣ/{zdA\>˔61+_,{(nMSnKHShW*oMdlQ):}Pe&}+=y.X"^j˕ut͚-x=!ot.Z )! -;5MW"utJȈbJuԨ jFK)*IAfTi~'VM4'GMVdk e0/ N*kw: 06G>rY.qTIXΌP*ک:1;U^LRd4_;i>*Lin24>IotwGUu6_,gv%\:dMpkXh#TY;-~CC}X@=Ft yrp.Ȁ4,fİ(J 1wn;-W01%1 +VO`@4Y mWQGZՑV3@-A33%.|e1YBBya-WGat*&zڜş H) X <$?]u.K\ܐ&;rÌr}qYjy*W6KϣR7M:ǯ/sjmݝJnE458fapߍBS E(DK~r/9'\ aڴoRpl#+6u#Vx,CZxǟɱ&_l 9iR$^R>ko>Éas6_Sm3K'њ'~V]Wp2C$* Gcɐ>`m +pX; Tnv ql11c[:\Wmi?Σre;7BޒK-h@H!IV\k40nXNAlpX$q13Lj{$iOc *I0I0O>jFX\>Ÿ#HX2__]Cq4вV2qfd#wwlՄZkP´baㅜ;cX[+8_V@J!cQnq/%< +>߇8FV"Nr>E]ۧUq+PKfXK МtuFm#Slǻpnj1B~p> +W}7Y:tD]iLגngv{EKcɪXgO2͕!;~3.qPnpl{r1]I,9 믁cR^ IX$Af$ip|1ԓR*YqR3vHbU(Û} ]̌Y_ؔÁj)DrAhk(@_Ofmȗ|x^WR(K [)1xc]:9b&S,X\d4r,de{DE#(%[1HIr>0.0ȗG)CR%\Z3K푽(;/bg@u3 V5Pn C⺓Aq}aPL"=:Wq>dRVGIB:m$ Yʜd;1?X\LYRE\l=E4A5E4NJny( +>2`b +jRbl+>\WeRsv?.(JZ-$)ZܱI#Ųw3жTu]W~L\W7 M?:MkM䶤8PjX+.vɏ׃N+&RJGl unI򉹴lڏ]׏FN?Ӈ %po|a(M>ԝ8'JRʽ0glv :[PAUXwaohӮ磛+M'.U3:JGhSN,/U̸}4 q8YlJ:̲3_ ">ț-;K;B\ZF7HP7 'i +27wVʓeGi6h"YtͮO2Yfl<<¹BͻwF"zsr'ifr!R\AiۃtSB}(ΖP|X.ecvSzƸ^-AXh?%]ő&9?!g苋0|CdnTSo ry:]ÝKcۯM ,j,(7C#2}=YKS|z_;g +endstream +endobj +193 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +194 0 obj +<< +/Filter /FlateDecode +/Length 3150 +>> +stream +xڭYmsg +M0S¸7ܡiƖXqmiL2kT"YgL$+#8.}8ܜ<$/d2}8''U^ruEIu^x'HYM;4h3-VAl:}U.r8<5){iVIԤ|zwFEŝd_P[Ի,q6.՛j/L1"=D,iDdf#uu%RL}lٜdqj*cinISC7꺮vJU6:ܳ ?3f[Wd̿y`?:7;8 97^ۢAW6udP[H.TMl"Aڡ5uYAhmXhT;k(koN!x۶HPk!,He L&/7{ H +ws;7};v`CA6Ъr0tX6koVGN@]/XglNz;Ðgd3Vpn:wꮚ/)[ @SJY%] R itǭ<KւwѪY|Yf(eȠu^y0np{PgR.ZljM~FˇB†W ܯ͆ޛ2nEI ZP m`CUuBBo:BػOX2֊-G."6`(%k~ŧ DpՊG/KzSB5%Tз˜40Wx(Id.]lk81y+(s^:w$" UgWF0YC! \t[N3KG$ӌ\+Κ)آ$b#5 v@]Ö,̡UMB5F- dʍM4Нb^P8uV}'2o Ef=P3 -G Ms I@cxȌ05yҘZ|Wla!{CrgiIޥsBPuJc'%Z%ɏua nC`Y}0@ãۙײCR I!^9P=T}HG޶@Ԅ͉o_>.z-1uWb 1^yUN4VIZ](_en;S/26BcW?doV,g0Qxɓ !'(!R~i/?`]mcufh1 l[~#^wtP&#:Qs#b>aiZP'{6_xSvy6j ([IE` o%`p]TRWYL/ h"b} nFzDTM1tfPzn>|ͤm{W#rȄZߵv5]{_ (‘n8Eq t0cSPXqF'ib0'p$!1 3nY_WL`K)a܉ؒoo>Msȧ?^1,!ih#1'KKSGV$ )'8"\Ep4x{8Z:u;&/q4H xg OW +Ksb&NwoG'EIR%Qg#oѰSxMݩrP> tKyCp24N$PgANAг}#}~/Qc҂4. +qIVOw(smQ:e/ pPB@,S"QB"̷{7/)&S_dfAD)z jZA"qZu#p\iLV ;mu +t$;Hpths +o&Gڐo ;&૊FP"L'GO^Gvk@ ?itv>Ʉk>^V!r + 9Gv1TD&2r ,jAvM!ݬ}E=ƒO/2_F:v.vK…){㗸i,6N#.V&3jM-1rHPXrM!RЇD W5W&󖣉J +%WYJhqݴMif)80U_ AL,JM7}7!  T} VZM3<εdΒsRn81Lۏ[N@ʸ!|N vSQhVx{TY-˖¾ J@  ^ui]WUol{uU<v[ +endstream +endobj +195 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +196 0 obj +<< +/Filter /FlateDecode +/Length 2869 +>> +stream +xڭYYs~ׯPJJ)[+c"]$eY>usPw7q<Fϯ1vZ^m29e]us8x>ԇXO޴sMUcpr{p\Qj*zqݤ(EiS?V4_Ӣ#? Q8#?޽{Mˉ?$yh/ebVcpv/&?ra44#a?S+lpW$R7,"?m +4jJV׼h6_ƫ/MCWfCahmay^AԧOXg֍,(5/?CD/]ib*eMEhJWvT}XIWEp|!04l 7Y K(L'UFW{Tm,#5\6 )!Bŀ\2 {oYf # ɜdI Uk$]QDe󞮂F9S(jImN!ܙt ۊk]\U)!+DfV t6ruK|:w7f4[/DR>'뙤MY:ɦ ʬҕ]a֡Gp@7`vӝҙf[=<˶W#egeZo$g>R~ $q"hn dq"7*WRW_K\xy]#'Oͫ +Q.R%'X[_$Le"="Y̔2XDj@55OEppH;Xٴ-HKY iCΧM[&81@j^: 'kEBF#赀V`9 +,;RT^R_e)}"?)a>MC nZ)d7q'X'K)oؤZMO@Ch+n^0ǔڵX&LI)CVW뉭2ō +#҆>:D&1i}%Lwb&jҞ:␐̨\[Ϝ8aW\`|+ ޚ 3 %+RǯJ-N o{| p59^ 9zg_E8jf0ll;W),Ͷ@q]gg]`]FZflL]y6b@hg|yt|%!]}?B5UATbMo4"q݁eQc7}\"} dGkQ@tkDS<-#Kq_ߴ\lE~rB}޹;F^|r*T[۪gV.x'RNOG0i"aIkͿp{SɛVڦ pffYgiok=YVZ=ussHZYZ"V1lU<̒r-_9|4h{bͰ[ׂ-6;[u=,Uc3.;=Is׀;\!naN6AHcob4^5i@[&56-bD, +zFWî2޸a +OfD5@ !.h| SBy 7*o"$C~=\RO'G'?]LSu醁lTw 6 +Q&`B}(LfKxr91dR؛ qD\-,g{].`_hRygRU ijn uSg܊TCJoXHhj|ylNoi9@I@bH{&oMȠt'/Ӫ; 3쨺 +0Y?@ {^n*:`|xDU{ʟZO{o t{A`࿳z/k +endstream +endobj +197 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +198 0 obj +<< +/Filter /FlateDecode +/Length 2574 +>> +stream +xڵYrܸ}WL 2)FT]i-ƕZ@ό4J"Ŋ>}A)CEFqt>nG'wTe5ON/ʑoFO޴Sk'V_'yI i -j|ace6=CCR,:8uIM +}gF=}Ⱦ&[S9_g;>rsV<+u.2D[hL#f <姫,wnYXIm珬L~H+RtN/u]$2@S;  u]8]"ސC\3՚ܬ@λԨvsnޒgh1jZ=db5Y IȪ;nYaNg}jWh] ?ԭ>bfbu۟n_~ U?v*_=fZQIfV eҪ9=5-+j]2p^Wh2 '!xNNK sj)l oe4 3ZўlYz6+[`Rↁ_ _o +_zgmPD87qn@D/y5|w Y2fYTHՈR4u(R+@.e +?"B;ڷkl3c Ǭ6X)1?_}󶐋:T!iݬ2 :uÐb)rt=`H7E]hBȫhʴՆÁWњ#vs.Se>͚3>!SxbLUQd&LS>F +hS.:лŢU0E )A&9s3 ٣W6j\,ep= Bcɝ;@ < Mr+lVͪV=Ā'݋ЎFGD'Nma snRfƆ/2[UX)kISKjBH9dbAhkIj|qL[+ + ښBZOif乞-mEdžCnk+\,JؒuB*$ZNRnjɅJ tljUUe3ڥAa9KIFjb୧6!$ ؽ[ -4<(\fEym)iDK;5A4b;N} .25YDJcB^&=ZԴ> C鈲K1iH)PSILx{#_)SS, oq¡=߻QEY5K kAϘmBq0'"2VKq] [f/AO%^hw(%קyt=½'ǁK9+ܥXP3y}Xow?o.ڻvtO . +endstream +endobj +199 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +200 0 obj +<< +/Filter /FlateDecode +/Length 3219 +>> +stream +xڥZے ͳBy +YeqWɓ=kg'eǎ΃Hk$t"K3lmL6n488~b<ӭNeǔI+4%m)ܰ;2Uav=IX)\r ]7 xd##.g +SioWo[@3Gi:%Ax8쁙 h>{{弇hgll:#*gl7t0M,u[sF3.{\GD_"o+ W?G` 3XTV9t,\9B!2xj Ynk?Z}vO( +DiVu'tɴY_P/[g1yǼ{ˇKG^FV I#h7eS= 9Q+'ĩDeh|X9)b2 +hU zaLa`8rYU8JX!Ɠ1ݦd1]v]:e @hj%ߟOBp>TZ|*r1$?+ʈY޿fc)jE~ |E#$I"eHև0e T0p;>E㨼vyc>ʕ˹ nU}iހN)IfH8(u/XN#CiXiI-a-\P[ꏫ5ܚݐ׳EHB%!ץXelmxl,Qrڔr(ZTΨHA'/&k%3t*]ݎT& \Ox 0ż[xzOQEwnnļ J][kk^R A4e#3o9B|iD +B0 +p~ Z"$CT{d.$ /|űc+00*v.25zHwډ26s.cfV^HWǺo En|NJ. 7N T.mVPRIjLO\$..{{IQSV%ױaѦ`^7qSϸB68au]Bnۓ`SQF~')۾|S ZHmS5]v|w>g0VߤTP\LZ[1@ף!zĖ豊̅oF/cZہ9ĭ8XnRa hd>z)H^z/Xpjo6C<1岰Zm@ʝYh/'HHO`XICk2Uc>#_ Ji1;F&,6M3)n;ZzTkIG{jykۙx)CXjdM\T 0/iU0Io)^ڷGj#!fۦUOulJ}̮YFM`ԅw>,8zP'!;]2j8FzM z"Q*Ljzpg{~n@?uC9![S,n{>6NrIH`<5¤BʂVUDQf_2E#D,QxC$^2,Rs^;xQsPrWM[B0ğH,|9>PD5fd[5Hz(TA,h42<&w;I +endstream +endobj +201 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +202 0 obj +<< +/Filter /FlateDecode +/Length 2686 +>> +stream +xڝYr3J .3%v7MW*k&)+THʒ>}HZ9hvMЧVzuI`ՖjM +;dd$'-)C_>ec}%VS󞓆nMvi(IPقc*5_FE&rq4y/f/  BRLd-$H*K +6b^׌[X8&EimEY$j +Y2I0WdɷCy)J]%X"b1 +$M +"yb{!Ñi1 ZSgdgݜd4l(8v RP tJژ4.ĄПI[}Ƅ o>~Bg5$u[ G{.==# 邁H QiuZ~ҡ3:mROL3%ۇ?K\_@QdW9Gi5'e]f_u[O'#S]AvY駟#VQa_%QB `F +Ko|~֣OugsĨ.m3rR-嫙@ +( +s!$MKӉyh<"m< q +endstream +endobj +203 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +204 0 obj +<< +/BaseFont /cmti8 +/FirstChar 101 +/FontDescriptor 280 0 R +/LastChar 121 +/Name /F2 +/Subtype /Type1 +/Type /Font +/Widths [494 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 453 1000 1000 +1000 494 1000 1000 521] +>> +endobj +205 0 obj +<< +/Filter /FlateDecode +/Length 1857 +>> +stream +xڅXnF}WO]ý\(M"A E-ɖ +4tI93KJhjwn{v0/_ooowVV.^f{?sUY~V_~!bڦwj=Vb`b7 +L\(]r%TGe~u8lb^ky7Vxk[3skő-C~ sWvyc~?}qM)K8#2ΕqPq)j0Bj1u^wuma3/F(َRT!x̩p8Qor ?ᬍ?.Ӑ$z:Đ6rU/L QV>[=ʚ-򠾭y-kqBI+kDrw@88nUשln>̓n | AT!kwb6Dky 7 sw4| GF ҷ>]zIP"e/f|iFJbј_Oo+ +""tAW$ Tr(08fӢ֝FЃO3uG+$84W̸<%3H Gep #>HlwgŶ/rAytkx|+K0|0(ɃCrl݈K|A%D6 (VDY|g|۞/Tl`}cAպmYsg߄ x\ĕ\֪P\kF+VW g-{"H*QE}xA!@`,n?%FA 5$H^vbDט~JU\ [8$S S#+ iF>*TnDYo=p%.7 +2}avk^ +^w,vx PlģzӉdž҇Z[[y%@7d M7aQf ZWYL+ZYy|[Y/k\ayP{нdd0>6F,IruYȊJ`Ɣ&JYvavbNOvsGeդ=%[`Ȭޔǧ+PgN!%&0I0 1glĒo\{wGn4ް"))E:iIKi +=BB+}znv| /GZ:b,=ހK|Y!JSGSur[zs)S'u+UǞR#n9R# =64<ѪIC̙LcYf$| ퟞ,ۉ[8HMn5;Sd@g鶏(vМ&&-YjۈfP|5^9 2ŨB?/_yv )5> 8ntQۛ5 +endstream +endobj +206 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +207 0 obj +<< +/Filter /FlateDecode +/Length 3522 +>> +stream +xڽZYs3~V ˹g6IJ3%يUyP!>}.h']"wgf{xJ?/=,vX7C 2T>R:xj ,?Ff0|1~{Z4TFl >o}b +~|(FIQe1 +ъ7HiwfQ|_8@cEgeBxU{lLi+CԼQ(-|HI24P#M -Ť0b * 4()n`V%e1b31/gF ٴ-,=XkFpvZOtb60ԥwtJPVZNԭT' +OaxkW_FfnJ܃A0sRB飍xGŻa :CyUh+Rb5 ԕFcuiV5v&de=Ot1u}h8qKN1 -v%鲡:2jQFdrI\2HF%|ưrs9 tqP (1&J--[2J59^sG.Jg2:JoۨaUF[REQ!nTx};MAAl9J/j|%AL)zßPRm*m*e{ QUX꣚V vZ9hsEA3:$[JtߖqAJ;xf_C@DnpԖ%mb+.EAJ\_ckq+<-UtS҂{mA:哀޼ QD5kחU R:΁;mNQ&%D`NI\h쎇(v2@osd3c,:~Qx}6v+zIXz%3*`&l*A0 ,l-˅&8 MIqYWE@$JvF؂Iz"iOH:jDUFgTP AEBg QXˡS-5D\_HFeS*OHF +Ĉ p쭀v1mA((UU "ƳTj(U2Үixa;Bmg49#755ManLt0`dOl T}K6HJc`=_ +{.8m餳Śݿ?3&幜XUe|K'xyL>260(R$=-l^ +M~`&JM\Όsm|\rY[+l1xn!=S(աbdjW ֳ~]f-@q/-9$ځE*>OyТ=olA;_qjW4(m 'HPhSRԾB#37'!ÖqC^4ה̚y;M_(Et%lu)&(Ka`W79i)80ޤ2j|Q=}2b{0ubm쏺[6q~!iD$/C0oJ%р{y֞J]uFsb]ZO 3[θ2:U+;oU'119#k5SOU/{ؕmڃ͉A|IrYpH5eiήU[3A\Z*S(ߒ>KAi2ēR56}H_\kKho1F-ͪGRvIQq +[3| g ȋbT22/v@biDf$3gܛJrLSyr4ĕpc +R Q+$Y U~lH]{hLW H4I %45 %hlcq2l|Ô.Z{6;f%c'ݣN[=tӧX闅mc&hPeEXdwoC9[B;2H~}Bp]\>_F:b1aw0_'qHmy 3] $-رagekOkt,Z<BMAsh]fpXiJ'`7iy.d@ͅ`MA2iy T=*Gӭ2Y9tȗ4XŨQrx낌C֐Hvb'IETW Cf*L[7v:RkI*:+iJſ4^O 6Tw B>J<8>?o5g$Ee(Vo820.j-PPby,V; +]! +8-@∊ gF0 TaDN|M#vS nKx&I_tLԀpb]'XT5ČQmQ~)߮쿬}go^u.r/[{5AI77sɁ٫Z[Jt g Y,$Xq-vYp^1+KB#䄔tF}+> +endobj +209 0 obj +<< +/Filter /FlateDecode +/Length 3692 +>> +stream +xڭZkog +@h_mQ &nlbFm5as^-w?A(>Ν9sfofʼnynt19}jdMF;MMԣۓ_"7IOlJo%guLӱM~>xA\?ʯ'd@>-;yJGֿxΨPɪY4NOoҋP]]8{ oqE<٤c_Q6fdv$;t6x*i4Mkgf+I䩊mh1CwO2[|b'oҵd5!b)V)¤q,n. CAhBU3I-q"+,L |W䲊\ _k +DNgl3.TN1h-Y`N3`tזv[81Vt'N4˗mX cdedk[R=p0A'px>(z5'(L#wQ{co +ڦJe~O-j`Ilp2a.|Q<.qI,|(ӳ#ELD %%`$[Mq{6bV@NjFE69A;8[fΘ*l]@^dUGLQyYSWq3=J6$6YQ%( szZ?& :NF0$ o7> ~J <;v>ou=*} {]b LǩCϼN}K%}#t +ᖘ38:Mom?)=2>lp¹!uYa\u25f[@W4쌡2zc!I'bc+@R4BC +}@s rWelZqLȫr-8YYɚᝎϼ5OkjzRD3IdCX96Y!wYt)4}2NӸCa?+*BIP(LF|`h٬;hzZJ|׻9|\U猢B /='(-E_]󧽥.*dL F$Ja\`?_ , i?NGnE,c>„v# /tQ=sErXZ)gQC1nof*liWZ` \G SSa_HȗYPq̚)kO9%KcS9T +}ˆUB[+Onފ/,ɫɋSSWǏUi;^sn~(w3bNͅʗE:С#d b:#IX.)7i V38\Xsd/ܢ''#E2a/Gn<# j#6`Ǎ3$LPa/Ei7"y`C0FSZZΔ1 Ti,80IJ=Lڻ~ BZPj*08^<=t&F#szq`;޼rLE4RA˞5j6^^]w|HS[v,4!F-6]k97=0ǵ8/ݬeFmVRh5YǢp +R֋/1̹ŽwMuuZA:3Ν8:$13@@qz+#c^p/F9MӒ D!tR<TD#(~f 06z~.yÞ3/Yl4]z(VhC6b啵3߽;-ynYn0m!8oKmf2ւ*Z7Zmt bp.ݯR{ +lyZZnA5Z&¼XR]2(<[PA6"yS,1OMYM6"C+^p6m6/J_"wGRl=Okt#Ln2Y麌e.> yGRaP EZ.!:_GҢ̊#ǹι;j:Ā/Ā̅C[.T;;ɐˌb+]짛X3{9Iwo twg(<Ns.W"V枃&3EGÁO }1UEKK!n=x'` " EgZK-%.k92X?*cp#.؆J^Qһ}{&T&?:wL5YV=R[Jd d&kH3axVin )jY0Nߕ&TtUuYFkvDH]ĦK 5L(ݶKjg*XQ窟P9zO KC$_oHh0Z)4@}LA_sUәC\,T?y|Bu +ٿR׀[oŷͪMYk.8MI&=ۯϚХ:ب^}X]w./Pr-]T颌e.m簼P>q6WG@~OHܾjF5E\-k\seÕֲMz]aߛc{8_@`@]56Hnj6ORJRv.WpMXx9=W5,J?,+EBcwouu3[Ul7jM0[DOf_ msnŮ|`.KE>iKGPdA%B&pT'F# 4HQG;dJrS&'ߜ~Ȝ~'>'񸳿?NQp*٦9ޙr@KCɢѕt`ޘEȦԥ"Eocĉ/ymS;_Ow"% ETh, ڥJ2`9l2hZN +endstream +endobj +210 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +211 0 obj +<< +/Filter /FlateDecode +/Length 4379 +>> +stream +xڍZms g +_z7covN;;jĵL~"1HHZֿ/`^(Jn2> `=<ޝ,\9/yS*yUQ:z۳|٨$ +(Ќ篕 em߲W?xl=>##6{9_Dv;j~&(C#c 72w[k4ٯyP2o-cLaFۛ!`-oD4gDَi764P-oe_rkew~Nm%>WVh@Se ޯADeߴuO1tr!{*V59 +(UKK\# *i Mǧ 6m /6@qn&hY_9O32]$9|σ53# (46sW|/m'U|ʶ Z et].Kex7Mǚ +A3XYF·VUEPi.u=N@)0GK;mu $=!"}UeӶW`}`;4q; nLi#X+c6k"/+!C +Ʀ&liiOAlj 2貥pc;dW R̉s 38ӑg{ ;A.r"P$HJtNʷIy\-pVx^˱Xjf-x1k}.4lk+gp4QBK~lLii>|2篵Ϫe o:%Z((*v&y{1*fs|07h4]%*seɯhSБ4YD[w,.!vM Xę$?/1H_4ʋ?݃!a7 +ޗa[VB5&khXd 5L DՐLNηW)@DzV zd 8}āue>,ȅլ%Mv]\1 `@&#$D&].ħ! or{ĦBLZeÓ+=G|ǻx/cˊ1(9g-SW9espX{غT{V:ŭqC*NZ +V)^u0fn5!#RBF R~5rmW{qM| БNCc x 2e0h`C8w״k6 .Ut=d&_W,}WG-`%7J?710%sѪ%9oiY(s̹lۊ J4.kKeL?GhURyTNQl#nwʞ[X[ S9_2hgPg,C5nxk%l uRzYO0:QT؀B0=ݑ'\wU8[Gxo`!)XW=4 ,1,&4mU^T@Lk nxLe^ %s2[ĉƅf9 + z6̣d>[6@3 84 3J1CN0 u*G.^D]ґ|C"&7^}]Rr>+8aMaMUPfȭ9TԤ=qȴ+(c5 eCuYڨƢb0l'oH_nIx1,j@FZjѡpr&39U&3b ~+#nzx lw,A)Sby)$RFjRlsCPGW$׹ɢ}EP6sEz EƂ kvLOdFw$9a*zh3[q5xR+I>l I +b]*`N\:4'edу8O]Pxy9vF$v@!{JUhkhUvґ,L 3A%( LrWR@$zp\ hkVJ034 ˽G-%-)aȶ!-zLk(OW%Hʏ<͜ \yh$*Z3ЫU\DŽJ[`PBb7o$5LhR*UN]J}s G5qsU,Fg2'p:zR B'ኣ/ +ߎ+ 87EWnKZ+Y#5f!V\.t\ŚoDz1?Q Wqd];Ԝ㘦_;Te|]!5&Ij>*lTq=7T1N)u>H与J^8HgTUIDa"'S١KYֲ4Rί2&4wI!)'tdW?;UP +B0C`U%w>XD@L 7?u=|o!DKsH>grv3Ui8ӖwkOMd/g-ˎ-jw^W@~MeBN=Ĭ6Zl{K\~c.ws:)eQ7AT\_cIqJ8 3~H/;7ThG" 5e}3_E߲jM}YN2sDul+]6-3ҵN2`Ve Pu!ՌрUX,U<6 <3 h %YyTiUҌP{<`][ꎊEK4wmBGjih,>۔4z |S" Em~ Xlƿʛ@MSJˢJ ̊dH)Xdz>[T1()MO>Z +A+z#P y|U8G ?H&C3q…OsN3p=d'$mNf( +IjoNX&u:vov^-!~|, +w94&r ;.2(9pȘ!wiZ65>{tóe37r.ian-FO*K#Lj)zɵ_5\#]+G@ I-R<~4\ߦ C|g67 Bn_I 0|67tI#}QTeܬQ.)Pc ɦ11' +endstream +endobj +212 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +213 0 obj +<< +/Filter /FlateDecode +/Length 3330 +>> +stream +xڍYێ}Wl<4 žͶ! +d[XqMʢ2uZ}ϖn n7&_J8-ӺpyU,ʀUHIB$l㭹!L8pdt6t@Z&H +8&KXsJcdn*':K=P8 jfEû=H?{܋sD~ x>NvN0(X,['bf3j}ćdQ2o2@ lq$y!(,/c`@n5BVh8hKȵGM14J(2AS$ncAKIbG7-un7'0O4KBQ02KK>ɇX:ʓqjꦎNl?{ T`y!)0xW"n(j5F%gltM":nojHfq F 1L c!1'zJvT(t{R\ѐgBQC';ny tdURsILS(ėz[^2N1fK:V,qx7=N% +ogz=^ֈ; 3Զwʼnl"ڵQqB}HCHmldjG^uFeu&>kZvQ<Ilՠ%%{1AF鎲҆Aeh{nG<<X\\̅-d!8>pexәQr3'^OIsG-jmG"WI$8=2 v`>gl"ƃ_h䎍3U"@ԏh]rmbBzTUZ G>M,Chi)+FүspZ +W$T"< Y dx98}/\6׫ Q@ (|_5-i[g m;p.Bʱʒu2I>Ra|g' 0WlBn0P+ܵdBh,[G $P]sg#E1Ge&s`a׷BN+qEx볜TYzŜ3b PVOR )ՐPՀCctt{፬BY ؤv=Iւ:Ef3H >V ~ 鈫Hu9}(VgKSJMؔ e+z[ +(1 ~Tr**w vH`-Q!<`Ĉ٤2ƇR9BmbMp/ <|G`R{񗂤*9ICO\.ZڦJJ*dAՂm@r1ɸɊFs>#îɖ*kiRv!1ObbT~ / >{NwYBKU_uutalc ,&Ԇve9zFq~@#)'-%XH˖\KJkQ;z/ +=ʀ|E䚅7PcL!KE^NE<^U᫗5yOMG0Di^?!nH[0e*:P}:1WQ:Rr{%O s}1̃]@oTu^-E&9e/,_evl2ۚD>_cvA>A%QfjȶU-)x J)uX:IR +ۣnoPYouf\-TEP_*-'1E웎`)ѧo~(v-!{Xs}W~"O\l>)}VD-PƛÉޞj^SA_a*^sRGrQJ $vk  Qn+(=ʧR(5X@?dDk:_B{z? +endstream +endobj +214 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +215 0 obj +<< +/Filter /FlateDecode +/Length 3921 +>> +stream +xڭZY~ׯXiX(-ar)2]m{f尧ίj}^ey^^'Wj|dMr_siꪬMX_WW8X@3?~gMW<6}{7S?ґ+HGu؄_?Lߜ-`KZ9cz9pVcO4|I5+f\u#poX̛I6MVtdMK9O"6yJd\2:2SRvf=X4iR}#B|iS,>LU&!uf՘TB4s!Z }٬V XfB9qV|0 3ɂ钏qVxdX$h9#:\Q-{^9v#"4bmYFE09d.j:~>56j\%|lB_b`M#T-Ne!Ufy{H PȪ~)Sjm0("vj0:X}c9eդ.2Z <.+qo?pUfDy,ɰӪNɫ Nm59|l0TDGnU.˵RVg%Тȏ{n'T )T;h#/SV'=X%4kkIDhJ "Oj x|ƴdS$.#OM{9TG㉃ 멌s!!9= +~*y9ъ +ɫ eꔻ&"krkB@Xbekze""G*uTlF\f捼‰@2?`qAE11Z|w<i`^% B Ǩjo̰I9Wd,p +.@mB!"9j;)GJFd_6FN +$9)Fns1eCsA,  ї~M?{T" O:!*{>y/1'pJtQAMN?@{пCkyNKVG /X1 \EވS2H;*rH!O9m}5dg6-4GZIƦDcثi5vاyy%̣e5`.Q"'B7l^.Ze]u.Ih5XF(-?a3 [q@N+#TF"xQ#&c+2òDF=XTBKhu  Q#Τˆ.~SDRn͊iAߓ"Z|XKzKaȋuTNn0YϏ/cvdsEyÇ*={t Uz66ga5d؟b;F)h:@!ԢXL^w-]o;:#1Z}Vg[mlh +~ P\QH ?rƞ@u^ёy;"J^1+zT}Xmu}"fhz_ty VW0ieҽX3bڦ)j_뚓ũG, ;`_7u,@mp#CPR&}I`T=||A_,UZ_hw#P?}a?DY~|m,w +DPn1 x$rp!FE9x9PjԊ] -ISeK-,OʹxDd \"^ZRQ;ۡpmr99\?}ω1W(Uh Ci7eEHEf ;D]ӱx^(g+yBc? n 2M3:R/|}?J%5Dm)8F WSLt2uQsE1ݬg°W-S>tCh:7CUuY{jJha;HeȆKЊd/t#EUywQD;I!a/VHSS~}{"iي0u bfBl{,!r + _h3z _'89E +wv/ܠvՏy3rQnLC[R?h7]D3 0"aPpÑ\>fS] y +SÞ/QL{*&`G+j1F|NJ _rގ*gY ɫX +e^UJ>%7HL"C>~x#oVzG]K1vL.ôL椴)nw2(U8:*Sӄ2Y#+RtR3xnid%mzX"9QRH},靡9g!9"hQ$w(9XiTɆDYӣv"jbdPI(% K,H,qI8r^ #;ވg)R˺i/FTd*|xZџ2/<59Нp0 y:`,$uRXyj:Ik*SQy]8 +JK|Rc<Ѡ6w#]cx]V]Rzoh/6/Ӣ֓(̎#\TVRG"Ѣ `Y[mN"lȖJ>3c#4j%oAYMy”E&iAɊuqOs3ār}bpˁjU9ny4ΙF 1(0F8Ϙ$GT'Fiv]t@vlqY +G@sywYΐYfvA8^I6zM-?.&wy`{>6=Uv{A.N9o|OFCcgR5%6O +vI&Q.i,Z:箵.4'9 HPص9+N| r ZY̖+}ϰ;? +HEJ^%Ys#@PУ]1eKƸ$ba9\$2,By+ɕPZ +=i E(t}צ`4z2^2`0N(  HzL!Wݚ'QvE Aʔ~z:-:6\ȐO2jݒv;{ m^$uېOX7GZ{h )룮xwlv:ϸ.AP&o!`rǟ`NvTg`ڷXYXO BLb:@n|2kiV<ȅj Iz'0YJYa]uR?"ܺKmz ѹ͞x9dm!kEXC.ԼkabO1?1nxLdj?K%k2UpX"vKd-{Sbh֏N;)&Yq#?/14ruK71>BzhA+~FcN<2ww^N';Q*p 5 xg̿e)Q~EI;88OW(nk\2Qi<{^̕eD>W%쀲ڠ qBiPuL es*TY4lG(yTJ0hfFSǚ{̸L!hBxDSuPApL{ 5&SyY# qv8#T謥e#8:)"U);Bi ƘzOŐ"_ŕ/%ӷlQ: 7Rp+ W&5'vR\ozcτ^w"0}z&zs/8ZZ<8n?LH֯UZM`[-טEܶl=m>R*q܄3ÑNY.}a_o~lEf[ΑS /˟Ps:Ĕ+A^_@K~s[c oj>s';pB.b[ntTIx^y@yQ|[ʶb徖s9J+TVeD~*^e:F lbE,fsx{ޟ3ٻ #x)dB0kI_[n&M 5 d +\dm%v2ۇ~)h5dI(<^9l5!۪AE,t䛎MƴTK(eBd'gI#%b +݇x +Yt3jQ:m.kf*9H MxJ,XpXC_rϞ%+ +c7C*]8͝(55SqcB=ua{&^H֛8hԙMDŽM'=6(.Z/͟W1YaC`M`peBrWHreñOW]A'o ה\:ՇmImK4uYJŕ21觏pphld猪-t/ݸqӺruH"o T_ +4K i\ biW굀ϷMT{v])41Eh1V\Hc7^j|0(lۆM/ؔ0}nS"'Sٿ"_Ջ0 xֹw@Ox}l$Oxqx!F2bs!q^&nnp RjE5Z7fipCmK>tk=Ӷtj d .8kݱmneN/`A7ݲh',a5њh:R$-=)Sˬ%S-V08X+WhLYWZ^4ScV\VM];MO~`XSEB 6 K/ɎjzY)2|&jp$NO>> +endobj +219 0 obj +<< +/Filter /FlateDecode +/Length 3977 +>> +stream +xڍZYs8g +-UyIs[Lfr7}x~IRVK/~Os>5iץ;_s_uZnxy|w24h{#TqBOW2r\UʳQ%r<>-GjTgGoG9n2{=+5ÌX/E, +e.c8*UtLOԥ6UT蘊! ;Q.ԔR[jߙjzYGlCOS j3k0QےH4?rrF-ZCV +^(@ JzMek0ZɌ€cltaDh/t- k|e*@kPcGXM x*n!:<~6.#6'򰢇Pfż6nͥbBtQze8Io96$ە9-MFB\%Ql,ﲸxA +9AcCXi+Sio:/M{7oi!B{+[ƻNHP6Mxt▇^nu״rgCАb-Ej9pq"h[c?,yvh}ʸW_GRm]ELڰ5ԇ8 ,WaRfOܼάZp7 kqxوS-q!/}7>&uG\4Uqu52CH0I\ *͵tVQ8ZI#Ʈ6m@3KDjE|GNkb{ҨuphLp->I3{ +<+BhGue-x0]dMhPBH2Aa!l例8jN9+8!h3ci:Őy^Y^d-Vj/'IlXyn19hJ#S%xt7,=-oo֑${- N H LjR`4c@4]&6;];kDfJ| ;I*5~  gʣzB.}qD'pF>5٣vfjB^_qdTqވ-ȥ2Y}h +_btAoɩI|GyqmTGdb*Ql<f!{sѺsLHب(g pQ5ɑE4z[د#v.޸K~@ &2tѿvPo0%_P +hסCO$3a6]gx巺coZ7V,ULC$`Ҳd|܃!'K):H5H%ϔ 1>ْm2>5m.an̫lC>]0,x`e[qx}>BbASĞi;}GPIba8WķqǬbVI]]FmHB[YNƹ!%aЄ$&zGM `[\#LU!(u8qqlEs‰5V;d\"1佡{]L)6*F+nGxD弌cWZIUH&s=Zk3h]ng/e`$s,3@91 Opo*w`7uIs +Ndk+AR25cYd2~E/@4w3I^ZJ(nI/K9kı"QJג3@^l̤P kR"&K߷8_G 5c3[8(MRkId:-Z}L֟YY%AU n=uV NAktښQ-@0I垥D~_^ZdmmsfזMlzlV\YxN(KT){`ݠb'#4 +J[@4։9\H2afobq"ފMJ)C"~% V}/?0M0G>Iw"Pc*}'v|Lb.x HL/֪:rK$XD=]0yeO` < XjÜ#@PA-\RrdTBg$RdQ r&2DL@' Éadr5 4 %wq9&#W'JP#_@F\= B0Yxq6kӪIt k+J*&c\p$m]ɹ~%xwfݞ^d?N1q"SYşH#Q_H5fmVÐaȐ싦IɎФmQVjBmm+zp&~XCzAYzywvcܠr-/>(SYg)qOЊGe.ǀ{]xDFґ/]]y't%phc#[_CݯC8", q\åЃ8I&-8 +yG}nCQD!}'t + m>Bĵē ~sljN +9G$guveK}L;脗׶y.yb{f:vNkAdce"r@ 9i.|zH7͑1 ub,eZk>!/)oy5!L'O^zsj~󏧻~v'O}_*Z]\7%H]`1>3m)go刏frv%!ӴKU<)\ǾS&5M6zq<ܧsdY3NɧCb09zr!|DR5~~-eƦϘ t.~},z[S۫o%xnǟfXz͏Kx;{@i& 6kj>l%F@wLwEBMZz+ԤYM!k[xaNdCB1A]]_" +zc.v9iS(iѭ/$yT-* -YME?1mf{} 9gJYꎵ +aE@aPU. +I?KS:'v瑦)4UK/0: -1XVjMA|E˶Aw(ޤ䗭eSGaʕp߹ /TR{Tnw7}b۵JJ +蛇g!Ps:ԕ,)zMsXuEY WXn7D [(ژw@> +JO)gEj"CD$<%c>:b;>__oKMՊzqB'N*0X&xFuGo HaH襈Ml 󉜍߆O8}} +endstream +endobj +220 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +221 0 obj +<< +/Filter /FlateDecode +/Length 2981 +>> +stream +xڵYko_/]}qɢ($. $q?ЖdF93˗l &$.w3g ~(KLo>f=;,2_ڹüi˲,˃o'dg:kRO%#J%1 +W}!C+?'^]]h8O=)bL N ރTQ3o&u=MJWM՜bՏd<$/5::mZeꎤ} +62T[Чr~w-Q:o4iߊ\=lfw2^>eᢽd -Z!0S9Ȣ=挺O4+ouMu5|;rY3k:d]AFhE3T3zX'&jXQo;47ϼ#ߠ"tƅ[/>HiT.x٦_/1: `9̡ Ry%# hGD8"ʋm}Ѯlsfix8dNBL9,BO0:HaLjc{:@£Q\tj&3*l+er :qwj=hsD(;8$1 ǐ\5BNk3G=C()g| ˄'AyWXH_4шE +X:J"B,": 1Nmh1_hw*.a3qq hYӑii9AV{t?>xgǗ7jA2bɷGjwC'al1iR7v6ní݄o5M='1:z>\ւϔ||^ fz‹6)>R蕾E?nX#z8%[S_|蚼3QHyV;`[ȳӤU +GZ3|5wUbD.슿}LG|/>}m_"d^jcrjmvlR 4-Qft ?+YMIJ5 x?YW_'= p'r[/sF?9z9#OKMnbJhQVW a_$j"dFG9cpēG"ݶ-ƍP*ekxS6LkF{Ny=F⑭ߙi_ӎ~J(' +8 +Wy5n&G4ojXqn A2fW}ό\bH)2D 2y684xfpօ9ST0KтR,bG)F73Is |h-vL#v°Atd9i8lqRLDhZj&& (~Ruv+Ejy *fZ>H; B4pt-ȎB+"m2EÐfS877*Pg+lo0FJ>g_q1dz(J@ )=A8r50a +899 +r衆-|>.Ia_п9Y [dHws2 qt'L#rb)'<mD='葿2# 'ȭHoZJJn"'ۭnЄՑ\dYڷZH3vs.~=?WRp6>  6cQ\\Odu;cO1ČRG:&3av%p",U<آL꒰҈/0~H 6}ti[2{14A1ǧ#@1?s`Y*k`rSt4iGGSgg(:^ B$=IdH4U;^O.9 + QcX>g{O/)Y =w=\ZWC\Euv˅OsdB?h=hM í`5a2c󮽑0SEkd +261)~pEp(k)ʍ L tZr=/y^(O0Adg $-4omӿZnհʍ[mYCx^"-B|Xڠ#Z(ʼC|+d!0} pDdu"EJ@2AMAN!{7/GZLF(w\#$Z ^Gl>;dP0lMc/^vʚ[:6tMX/}!Ym%/"CEk]Q:v3b'Kbl4;^ٴK+O4.c:QWT\ o! 9\ _l" b\5zth:Yݜ?a֑:F܉5%.\#9fh~D Ү]Sھׇx!V//܅(3Hڼ1De?o9=4P^X%kNK1`lm3`qbFQ: n@ՠ/VbUy#>D%8Q 28=QðEjz+}Kq\$!DHIx# NatoU>H[]Gp :JYE(ml|vڱ> +endobj +223 0 obj +<< +/Filter /FlateDecode +/Length 1632 +>> +stream +xڝWn7}W-$Pmx]r4NSm($juN~}p]Aj%ƙ3|&wTS&fdGQS5 Qme"mhP!ɟcCI K+bReI8_^;5-GgUqAc.'җwQB7`=ݎ|qB`x><$B{b'}wX̚G)ǖEV,8ȌEh p r[%4E`JtH_1){_aԲ{/ܭkk4D {Q(;'־__~jҥ2!΁'eMFÂa[_GǝȓrؓNg q"$5^MW_(۞j;-DW䋭5݋߿zw(Gxisלb&R=\kPP\ !A<#P1D }MsȬ+V4ur3꫷sϓv <ҹ(j|8zsJyʇ>w'QSW&YhJnw1j1[nA xP[SӊIe%PNy3W)|"0E`Q7ٚ#RVFÖap# +l9R  t!R? +0F@b{"٨]P7v Nf"SMt'zg +OG/ Mէr69#lQ&hӠHY~1,=kt^{yV(1-6> Oq9j8=$|JRBueeG.3 yGnhgxd`)a΂6@+mN7`FA25̳Dm7wt@!hAon 't^$C9&YwQF4l/ s7=3 ߴ\HP 2j-jc.7f Be჎m.wg9~;!d`8$RA'=J/5n9Jd˔ L!ţi``Zf#\΀My2e7cՖ +iz|iK㵮|:c(> +endobj +225 0 obj +<< +/Filter /FlateDecode +/Length 1971 +>> +stream +xڍXnF}Wq T Jc: +' "eK, 93ia$ww.;{̬^2&WU'ū7ՄwS!IEU;7AdpYj塘T(ze\Y75lU,FE jYh(LV݈Ԩ. ) =J)VܳA=ک=)#;3xiW,c +S.F8e1H5߼zcRXj]OȌ-]|V--iM[iTV~e%:H`5RE ZOd- EQ'EϥOIdAjXxlV=-dTVl2Ci*GL} )x 90myma?WEk,kdEgicí}֦kUSO.΋f ؕ!Y,0b6 U=3xS "=ͷigKMppX4/dHb#tIjik-}Tض'Ț!vaenC0V ]`fH=KWE:# +qj;?cEzzyN)QVX&Q,sB^W3xIO~fK̖qJd,8[0GT(ۜ4D!H&)1igm 0 چ N)-Fl%#hB8 +ﭚ==⤖8x"A`&kqE!yw՝6@?ybh8r BHo[h,aeˬAvg\ -hR7 .nbE6I(T^641bs/17Y1Sd{*4Tg訑&A==7%v>܃ZߨOԖYoRB 5N5ztqxݦ3sW gJ7vH%}X|nd#-rc=b8)\RRD0Ȉv6/´b- F2uS6]yu*y'e(3KB.=3 +1[gr7gz_SWbiȳ&3uJKũ|Ԏ^b m')DZ|xLEE숫V:#E +tv o_ϮwCYE|(%KxifEL}Չ[PDꟉAUpuh蚡qBP"tKKUD +L~5"²4#;k 9Mm!j B1:R×~|`ҫ j zkVCg.Ueڃ8iJYM]im/Zצow;w@sDjp\ )4y0$9&~v3e#WG? n}xc~/j'.CPvsLU6@e=N<{*Rr$脥y)yM6&y|}Ϣ%ZqۢF53uy=he +endstream +endobj +226 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +227 0 obj +<< +/Filter /FlateDecode +/Length 2932 +>> +stream +xڽYRIg}b#]=oc3 b#Ը%'"av8v&,뒕'wj5|=0Ͳ|8͆z8iaFH[+yii㛁Y2`vÝZјZ`KF^{<~I2ު<idTVKzt/&#i~Lj~Ɇk?|`Se6|΅v.KH>]g7{C;;x?\w? +o = omz67i}oJggugu?k ?l!x%ҘG^D>% /<_6uMtyj/.^Qƙ.K1{^Qܵ''uf+\GKU>L jZND HF0j5I`[<9 Y d5mWoS2xoϢ&q:-鰡$cStiћY_pes̚\.;c\׼S݄+aΊZ4q?0^[5}o=KAzOو5B1nHS[ +!XeH%2Z_%sKFq)۳1W6ykn`\jh2k% "Ahe[49PJrn+ O%ȑJ6=`avSDAv0!V<[ˠBJ^Bi\ȱ;#[h82 -ud؎REܪ%?eF+2[N(dOa|S2cˊ CJk-m2s$;Ӫϱ䤩-[(!1зa wGIu4et8#D?$b fˮ͖ + +6`3YIPv zky42$nCw)-]\QUMc\@iѣ]k[ӷm^ak+IP8=}hE&t%XI2U8!gR4XPPPO v= HLmQ٣8͟}9nCҚ?x30Xp>8-ā/f4L]W KvĽ >'Oe4lnVyFGg'0A$5NwvOaDP|*ZHhAjQ-4gO@ N /7XD0/Mye.p`b>&~e +nk0!.+iyh6o۫)3v,4A҆AVzSKDLW. }z5k"5c4~hcRM0h +-@$pLڅ_' }HzF*+z)$r%W_>IoXzZXVPL14qebTI;X^7_2xOzrH&B +endstream +endobj +228 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +229 0 obj +<< +/Filter /FlateDecode +/Length 2499 +>> +stream +xZKsH3c@Y.m1t7kiρ1kG|!0COltXR*U2铟ish~4l2MUspsr6|dM3|md,MLZJ ]^N8OZ҃&--:Y'&LtHįIT_o_5[ '3RqqN%7ڃ 2imv72ν9ͬ8;kK|l.WDF'ru'~Brm_ʠUXIWAL{r;iNwuQYiӸzthً*N[6e=;^ңрu=/NtP$V)RWhh$璣{%A ^Sza#mRqCLhTD[A%~Q ņܑ6,Ģ ڔωHpaE@Ltae\X35xOoY+G8˧!3 -Ie[QL4F-DdHApP<-&ɏ30n1gyF@%'#rbIvNd֡ٗtﮝ"*o%#ޔb)t4CS94TٝNGNIY֝ƘzYenS/Uj2 s8zqU _d5 ߑzf` 9M1EQ@Fٽлt| `5U<_~m@/38fjdi^fjvBCbM~9~J9fxtIM]:ygi:"}RB5LGU .^A|:Y50B Mr}άͪ*~-aTtWU}%,?WhؕS?$hFKU,4BJx%-S–etWT"PyRlj~$@a!Z1C3x!O4Hh~A952'!ԼS?uǬK^*mٍL u4k&qV]}tvjo<_;({y>`oT<HcNp8T ! "l+l5`!:+x5PZKDWO"?T?*[GrN$dD SLe0@ox WCAKip1O"riիu^L'9ƻAۨ"\K|xwcBtMQD7o +.D'>+jn1%+tZ*Qb!:dT>= +endstream +endobj +230 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +231 0 obj +<< +/Filter /FlateDecode +/Length 2706 +>> +stream +xڽYYsγ~+O@\L޼2RJdm&#l= ]>VZp陾r^ .WG{;ȋ&.!OFʘ\J兣a588@+FQ `4O%/NG*9K3LRRIf4L +~x"trLeeLqpr =D$&iPY{,NL* ^EH*EJ;||l&dE̊~|Y. Kq"4B'.NժWUY(UJ{& +2%/`"S4JTKo؄Ny3UPHR:ͽuUk؛t&UЅ)|2 :U!N䋎ҨdٲX\ +uaw%B@tq"/ѮSjv&dMY%lǶԚ}“ЖFHVI9H q? .v؞f*0'Iu$f]NUȦ*Mgz{3F$qnSKԩ&@R~k~1Oj¨#0852`.Hb ^0uj<~&w4wM^%K܊U4yM^ 7dU){DA0P1cCeFGlF\cTR.Y炠yDgSX(_@gR [2*]#kX BJ=ؖ*.ͧ5YtەVSvkVwWa_ݫl<= WӣcJ=[u\\+ۅ]uWMM7U1ݲɦbeU(hϪۯ3jACzySWR83a١/v珘4yz%Ip7S^ OjYC&B5lcJby]^ 3m'MhF zxp +ҝʃ26i+\ K|^_R|zօ1^&.Wױ„27dU{e%gwó?@'*ZQ2_bb>ED!(pP^7W{E%s,I4)|s,ׁ)j>k衴!߲/u=qC+D2! g(JP5gsLxw8<>}ʘ',:MaPJuxso4r(E Ik"JMȳ0khVG)LiC/ jۧ#S\i= C:~ t +V[łZV?C1>[Qd9 8DmfֱSe&P"UQնdb.EJ8QYdORR[.dje%g+Ʃp7gePQ|.x ֫TS+TKUC!oYcW+1ԉ +R)y;9^oB+bL'fegAJ OB9hSfC %n2֣U\Z+baʋ2~ +\E}2:}pjRDEMBJvr (M̥6 +11 {I\u3nZ)VJY =j4ֆ:ˡ+SR= + +RNPg8{cye +^]_p/-ZElՌ˔ ጗_x_D ,T-S?!@=I]|SP81HѰi0],)7rM@G=r IbB̉! v&y|9r8KYl{g%B]j-DG ;f^%9lfǺ"2iw|-:f.@ߨf&ZUx~exɪ;+ZnH*`7ɐv'J4iR.~DƳs<.dL8G\CeeݭnįV[0? SIf8moSf#kZ!"Y\*C^D,#z-$1`_:O^ɊHz>i[.fx~y9D{v-N'mP]YI).dD~\JǓ+f2ǼFeKufm[BElQ@_u7,ÎgrgUF~TND Q Oh3.B\UdRVRJ8bY]Ӡk\]m}|??l;yrx!}|>{QbDp~`#d5857Egl%vtָ3݌P"WLkds}Mitx0Ź650J'a%t;qD;-$ Yy!g|8?I%Eδi_(ْ^$m㸒8.`3dҏEb;H]K.Y8na M\6l%ս TIm*G{? !zn6?I_G/7<w[Q#uvb2R*PiHd'^e'~tpj^>9I5;tug +6/I([Ό| pc܀ҨHxLnU_ +endstream +endobj +232 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +233 0 obj +<< +/Filter /FlateDecode +/Length 2357 +>> +stream +xYYs ~ׯ`jg:SɃ րw_zv6*Arh ѰmMgS4d;~@u.(M87C +;_.hQ]j,/k]Җ%1y'qgQB +YW!t_h֖ڨxLdlU' +o]{Ut)(l}g4n鬗*,0f6xTEsxiPrT:ԥ2#RB. QȺzuf} ")+dC_ؠ]zE#@N>|w'۔MgpS< _ mI"1C_ 3vgس9F?:e[#֠Tף~ΒNLM:(aM:Ӈɍ=h ti ɻ%VB?&cx):@- #p610 #d=>YRwv|<(NcGR+:VhSSHUva\U[в32}:͠1(yi mS'lA +<8"RblRpH8"+Z8@xyG_CJ{GuZ,3jtn\/rޣ2Gz xAv <=tZᜇ^N^vo$c'>ϫ'PgeJ$9?K˲Vb\:m8zj 5hAqj=jh W<ҨD:g+)h@=,!uGwjOmoEtV^R43X`C$PHԬ +#XɬQBׅLzfz"k?SyVL%QV<#St@n ґZE:t R7,0&;ut˓ ktf l7f~I7(&mdq:a`q"k,:i U V1ӋͿA +endstream +endobj +234 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +235 0 obj +<< +/Filter /FlateDecode +/Length 2694 +>> +stream +xYIoWX ۵/F@&A/3ʁ"[KEhR-UnR%6^U{?|%Gwя#j)h2p&Gj4:y31J/|TtpGph, +brL1S̏~'؉_LzZ)qY3WcD]7y0G\8=;7O'8gq+oi toU}'O})RRY4t+2T5*JiC +jgӥ(oz⨧e/`͛ud/}ubEk8,3Kt^VQb"DtNG["[cP| 4#n׋NZ" +R^Y@hHzIy''`AS$pJo?0xbys/AȖ!>fѹ;p:?9}0% ="Kkm`],#T䙞=F+F7hQtQ s2~@N.wacMZ8B +-E4=#_Ŷf(YsϾ?u[}BC~ fٵȮ;Cv)D묓]:ۦ]R{(P8bl5 =k63^}L(QX&Cķ!*G6C2UeeØ@ j½=AË˟Oa +Y0-S.T}*؄t p ʓO)e~\<N \MIۦv&añZ@3a IWjDr@1Fʑ +֕"=|AZ !\$;n* o{0 ð]SzY^3Z%]H S~Nkj6FAp5k9$YQ〖;8pϭjRg2w8%Do +aZh]bDH(Jd=\ͥb5afDmV{L./tD)7{58_,Ϲ?̸3)w@D+7~Y#t :h[>;tvO;(iO[>=XIE޲W.qA۪1wue۵srη$-)/a#_E„`Ҷػ$ƐY&jM d!}O\GӉV?jKNGBP$,tKEόTsXމLY;8ށtt*:BςWM.]*]/}r(;(N.>|_, 0jjH-\ʥqzmSQiߩ! q>uUc&Ԓ/VQ@@Z>醱bOclYFs7=s0 Ah3kw(@8U(y{W2n{A/1ab'D#PT8_VlUD"YH7\%bx$. ׻>[S/=xHGUTAR8,`̓*5/d̴6pSyGRFr2~J4M|d_ * P Fn#ND xGubD4.GŸrVPu)(V-8mkcao5-aM1,ʛ|L3 8֙zbNr5Dł!5c>JjSu1' =ɈmmȔx +e䅋VǭO,OkMq|*Q+.zM:SbOW5@<79.(r=vtJt/^AvkO0t0v8oTKM x>ݖ'm:ͩ,izitro . +endstream +endobj +236 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +237 0 obj +<< +/Filter /FlateDecode +/Length 3147 +>> +stream +xڭZmo_!`@RiImjEEQ!gf^(F"0u۝yfa^\.zA/ +cꋫū7^\}h'EmaʦiŇ*BfWy-&>yr[ҳ#ۼɶήAvU )rRYB: >dg@U'm|]NDɏ B(Xa-=Vu`W T51߶m2%]b6ۍ,ݗD/>)ؐ&R]14Sgs9^,,Ë! P hTPÇ2ۏz_ '(/Q8:.iiD4uqS +ĺA]}gpi'R1+)KJ8Q}R fsH(! o7tRÚPx} a&*PKE:繗סR7`F29dz#&x3avU(yYJc2Fd%5A/6֎RVP n6!^+ED DS~+ȓ3C3g,LPb0_W6cop8bf/EyY߅Y!:^,1r v,> ^c/II7IץӊXcy'9CL->x%LJv')/Dv4 +EБG9|m;kHN +Fzk,-b:D3^}?l)&;~[ۢ)ӊ?Rhe=`0`u>N+)4M?9Wp2,A*P?c,Ys tK8)At;ffs`OG|Y@]t#Zqpq6dt@?i*p gi$k^yc8e1upVDVCqTP@,,ktU +! "D'6}w>IvP":9&Ѿ(-^=&v( tb=q+ZUD9Cnu=OR?GS+=io&8w+@y:LjZ* vq<2n<тHb{2b7]Y_ +g׹V`6BXiDU-B=k@od^O/5 7I-ռKI#e)uAxWT0&/}!WEYT+-i~f^c@+S8F4_%^I6^,_:*YkeEuIlfZqO=}iEB U. U!? +@%.XѱHB߉STcX:MopD)oeP+ k'4;PDE}qRűa<竐[*lHN<cFK,P(Z0ʹXB4'Rjϥ;N\PV"~+4-KY0x7N kO'\G4kzj5'/G@O|^MQ_WI`)aFJ|׾g$ Ie&>aFt,Z@6itVĕ.;v%጑KGkM \3wTӶWJi³B!3z&-R٧6 .깓9Cb_RI"ɮc+ dzKB_eJF<9!Ž8} O@E|ӳfQPl 8a=W; N|}v)գBC-~}DߕuQ#%4V*f?G + kY+*6&Kvzz> sM++qb(}}DfVCE,\xBiX?$f2G;j%1[mqqI})- .5X=7u%lud*iۺo5}< 4J2:i-zT!N_pZjV+rkV*ˣv/}b:혮tƅ z˛vIJT9y+<~\cX39cDI 6R7c{~jh [ګp(qF(Gްa<昢0"8"G0ش'Ūܚa4bq<5w=^8ᝒ}S;=0GmŢd)PB\uv2x 'NLM yš`'/?OVF>ڐF=N1J2LܕElj;EYoN}>Nz>^9K6A.1)whE YhtK;Qo]^>nIIeEg"E[7^-Ȁݸ1)~dHР`%H[.ݸb6ֳ[.h.G;@ !&X_*o3iTNzOAi '4Om N)Ƌi*'u&MUia՟JiwvÊ[\{wt}'Y~Đ|nppV/_-*{@q5X^f|?cё +endstream +endobj +238 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +239 0 obj +<< +/Filter /FlateDecode +/Length 3858 +>> +stream +xڍZYS#G~_A;bt데gF^ o~U}HL uבQ:>Y|?~CU]q}MxsPyRTGUՎM|9QMQOJ( 4zgwc|g +_*r)St/~Ӕ/ONLeܤM2;62RWX/hQRM1O +|ǚ[yxK+&!zWC$iHÜ~| +SbjL|N2Z'k +x^h &QZpt`O1M;VlerJmqjz-=H8,,2kLd`8 9p[_coX-=o.KcPy0ƶnVڷ7-Knd34VteiFflGꝬ*䓽[Lb޲ lF0ĆFZ!2%R82 2 \ƾwt'|,̨]6QD" +rZ+~Y +*!R<, `nNf_J5n=Z؊^y$yx$/^zjJ׳"\aK7oDhBQ'? '^)hAlLE^{6PPهt$hἯJ@,{m F(4 ++4(!31c)4Qkm.-{mv~LjO_Xd]fWji :ve{^[ĵ{ +OKWr AGca.y~)ٶ +:;[0ceLBur15w'UC>G~5#uyy~73fwp ϭv Ѩɐipy GG[0D=ɼ0/n;~vh" 4%C#lϧ7c7s"=Rs4(GEB:獀$Gb ;$Px]`w+%&53 )e$)$WmO9$ {/6KXi>TΆA{aF]a%q:Ct!(Ĭm䀌ܷ|^v),dm)ժ٩"D=ef thEoJYnJe:R 8.6)R9>PGqZ4#C6, +hEO`lGߌlL&ުޓra8\|٥snIpRij S9m!O\ί\nMtIfް3LOZu=+~X[DְJĂ39̰qe%d--WρGw$?5]hLXؽc%-by#6M07~vN!1?Wda:Ȳ);20 :(CmUFNx RL^RZyU. 1z-ש~d]LdZY0OMاH683+I/:%lC$qsiBё=!YHML\v#E+B^Ygv SokA!a[l#*C64}^Ք;"K]h+Wi]ڴYb³"}|}t*k^KIiyiQJo)d*a\bbp:WXŦu}e٤1[ug~@#%߽8%ArյV+cnKkJpxc +|Qɟ%wH..@pdp +ӵM 8VIKxpb!+̎Q] +I¨)Nݵ:(_cEN5P6_U6Y*sNe +{D} I7InXb玌nc1gX +)$m:H@Q}]ԥD`ԛD0a)hG0^Q:`sr|t"Km\UB.'g}c]?D =ń?Ft0ln(tjVlYq.!͈9-K)Gݷ<ʅK\Hp +;ΥqӒ52&W]B\#ל;x+MmA .rYq͢<%@̜QN"\W%>c]ZJ+7\O;pN䊣'czҼR*-IuC[*w)A?aN1g,rrI5kԧP@q T†>*fs2m~XK\O7?:_5ߖK[^}|-ָD|9]Mڍ_!+.yL\zX{'BhtG2\^n.~%LڿxKo[67[+9?${Yvy}].f}qosU.3lWB[A@ pO㠰`۔u*BRZv?m+VNӐo3[co2߷T$Hq:_R$ A>&8 +endstream +endobj +240 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +241 0 obj +<< +/Filter /FlateDecode +/Length 3023 +>> +stream +xڽYYo~Lo /|$0Pٕf9d+ȏO}Uk4! pxtW]_ߞ{BppvyxA]h/wXBTrcTAߗѩ_wYg^p ^fF>:SGG-,KZ/8!RC{gydK[u$S$HFuQjΦ/T(^[h||d-ca&]:@NڸV*#9EF|]6kZC^gV5d9NV_RATHJʂFQM0 d9^SoN?87[YFӰ93ԺD3pffjHU&lUQ-"=xNMzNȭnCFbb-Dm$'"F.[֡3) LEzwc2qM쒉I`d=i͜ +W4^&w$LQ_' +oNH'75t/Xk !*,#siX*e jwYE]̐I{ң)!3>_b5y:'EDK%kuGj9~_ncV$ +XNͯg-#,(n)Z]u我sKmE3b44b*h !+91[DvKwۨ3|yOЕ.S >)u5G~rU7P2Σ$]}LjMR` kk!咲m\((lK_<uIIqWIl~uz$34Θ)Spc8&X2ı_yL6ȕS\PkYAIRtD&ŷsj\]ё\1ib&+-ײ? R23Xx 5d"8ixi o9 nVRnL8$͟d,'2aqyM"Mw+u[XY;1 g+nl9K4#0p1=\=U=8?}XoBGCx{RM-gb髚3IKņ 6TĻv Ӥl7HQ>,^[Iy :2(qIu\=Sڵ ))BWϳe &&`/!jJ7|V!FPd'S钚%=mI(8Q\F[Dbn ]xxZvZǘ=B>QO@V) o]Bl~eC U,,]H-8,:f`>DvC ;-H_ⲁ}%wf&0c z +TlTw1{05`ϒWϲJL=yȜhYC:Xԇ%gLc*Mew=('Ȋ=C_Ip.NRS2dtb#|]cJ<;7smpBꅹ̸_/ﭓvz}3?L]/f6KBղw>) 0w*uz-[hݵW$ddQVU^P!H5H@9♆uvFu.nf2ĜXM ܩ#;*,nmЊk=X=uEUיsj@?w\81h_+iWלyj0s˜6GgGH2EZ62n_ +2l| |UD+շH[W;SN3NqϏ2i`7 .a%`T3mZpoI=GϪe֍Q Bm`9h|;Ŗ t]J#kY +endstream +endobj +242 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +243 0 obj +<< +/Filter /FlateDecode +/Length 3311 +>> +stream +xڝZY~H67ȃر/-qF>U5/Y;IGuu_ ^eZWk}e&WUVJ8W^d:p5Y=QyH&yj1yw%MfO~W/4WoN*1$uSE$- dR~x~~VE6SW_Ň/'N vLTyΗ"X1atmsU__no^̚Bd" +#*a(y6$M*KWsRŌTjޔ + )JXOh8y5=ϰAyN7G^O4uF*\|(Qr М.GPi(E]l'JSE$ 5TK2.xuwʒb1iE Yb!u$M nқ_3! +M;f#Rn[NBl3#O2{ KG=cA7a/ C $n-QC&@36wVFsY5)nC +S[WlUlpM5m{هkvs  VH:&w͞ +pb528Y./1 <Ȓ9'k.]趽Dٽ4>%DHz< DvywpC3iupwOco-).W/eςO95و +bw e&,#G  ,cENyXFg+BmNy½kpVy! +1'L>sEŕz4a AΚc,UOVl2"=";48"lTe3iB'"d.^& \nj! $) oވDD8=\$3]TnOd/q헁⭫Z̚ 3$=zɐɂa}<=yVUΟ^|xhٔ#@s@+ {Bɞ oeẽpS@j +Ԗ Ψ1xઽ`\f3 u^t)+! "62.mEwIaELpEnx c4Ed@aW. RW=O{+GAmΡrpB1 ;WtIej3-&K⊼ :n4oQž^s^dL'hĖK '#ddyCg{>F[  |Sx +6Hˋ[vN@5T1gӧ֪gZPeyA5˞G&l^>\0`V}t +t +K se]Ʃ/EpS3ZH]n):d"h>4a}Q"诉@G8&5S\eD?핷 x.=1ͮk:mkS+,88Ƶ%ws|b TYsW՛B?.> ~H#eg'Eď`'Zb.:~hSoJ RL~p”X!y8.mWY]qO+ ȻreP3^kK~WwX'qa" L+ +g76;৔2zǻY> ԏu?TDA%X6_g_cA 7F-77m]ipZ{3 ]K6f~ImLJ-Fi|YcAҬ/h!R%EXj* Zct8o{d˥<)=ߔ8|T.t2i[H;tSf<mW^ͮ#sm<}4U<|mY?4vVy4B |ts_A?;n#10 +ŸmUY9(^z5y_ +endstream +endobj +244 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +245 0 obj +<< +/Filter /FlateDecode +/Length 2623 +>> +stream +xڍYYo~XǾŎ8ƆvF9K1 q>򟟋nN"/ +3|[LfM&7M^iURΌUU|BFA.Sg[`'w]yu $qh/6yU8 }V7!enK>KMb6IbSxZBm7;4n+)ԛ:UƹάzLep(Ύr'6RISΙ SLJqqTGW(}J:1X>P $-~JK ++ԩ" +x>toNZU"71AHG9" +MÞɕgo7o*RJ{Јp[LtL,ܑ_G~{fu{=C(.:n pTl)jw{9#[xVtoL9 @Z:1 \I@ho‡SD"w<@,³9$` &DRD#.VRloCzEI*k☈sݼ$BAe$Ӊkw8ZX;_&Q/\EH6f8`?.MW!a6N"%1g. · Ae=@IJTL$R`dI P̐:=TxmD* lJD#v)D߱, |{kv|{=mryF +;9}јL*>&Tyvom*{ѮX1{w6ټX Y?:N*q=-!BCuZؤġ\Xǻ .bb.ͰZ/~oLsdL562cyꠞ߿t@e'P؉eto&yL7(䏪dUCݣ]Gӽ):8Skr3p'쪪w|覸Z.J,X/|[g4l7㑼ZyGspSHs":s]>I҄ $ukP%Y>BL(:TQTVQTWӭ\{`HBDM8 Bw!oG)kT?|IA +endstream +endobj +246 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +247 0 obj +<< +/Filter /FlateDecode +/Length 1663 +>> +stream +xڍWr6}W1iFIiI[ON;m Ks)W_= u6Kݳwv3y9=IYUd:x]MdaҔM&'\i'u2e1MwgYQ@k#j D#MgWWS|_jj]J])џ_ª$_'3|}~z% + XxJ8&U y >=jkLIHU Y +jE,>i5mWjuOvGdbR <ރjIv ݒoT䳖6 5\,c j?D~+1[WV1ɀ] #f?ᄈҐ9|_if#&Li+Of& J² u (|fTѢK picKjEÖPb`<ɇ(}|5 RPmHUD 0ܒW8+|0\7ۮUN*sj'@&Q]yM[m+oj  Goxx+^\U;jRģg0 E-q)Cd[ +ȡcQTm߮eC;m]G u'q;.icKʇgCJȉ/xhv )n)ў{ڒWE<#c:$w PʸVìfr!ߋ^ 2Go8{ 6%@:;!*B;( ؇4d(zC. +qƁ$hkb/gUjXGxW7Ty&q +#Zq;vp?̃L;EƫZ 1LRAibtNh#q5QEO ;1n-i#4l˼f854ogNQ#:mO[dݟ^*gx:6OJůw4o_IGx.gf@,8sH#Kjv,QJAblRrO29=FM7Zi٥pvy.h4RoeNE!F kf]z`_;r +7SjaѭA|LU1k3}ƩtoPRRG@#㱨<%fF2\2\RԭaRrj<=xCi.Wd0ނ|s*vqjXO$8n_kF[˟#c.ܯw?p,fLOwKNwL^wص,p| +7dݧ.#7V Yf Z]^cjj xtcd'{Vte<4 +ڃ(((|YQNU9*AQZ.(EIvu| ,,Nk_X%30#bf2XQr9> n߶9άA| =MT5F5@z܌Hr<>Ẍ́Bpu^ւOl:,͘0pd;:24!Qty ܡ3Rb=޲l 0jy*l`g!'mUK *u9=HD6 +endstream +endobj +248 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +249 0 obj +<< +/Filter /FlateDecode +/Length 3600 +>> +stream +xڽZYG~Wt} > F4# +n.aMYYy|ͣI_EB.r^2EY,/䲾$M=AVeEţ1EVO_E^~ޤ=CR*ɓ4$/i&Xg.QVr֋ GҞ-\ۤurHE~+oxLd2{1MׅlDz#gR6駽Lf}#Z?+bʝsn))5M>b vŖAPf͔bsG57۴W&7sP6r_Fl+nI(Is[h +a#C(pxeNT;}.%{1|#PH6[QP̺P qt#uu:O$90 nCQb|t>W{Zr ޛkFΛGsوCJx`[ynٞ>bqgLVV<ыjT~&=j9N2urZryrײk\.EL^buMJDx̑l(fwժ<~U{U +65NBl'[f5׏^l̝ͲWi)LˢDJ)`< $%mJ,$ ۲qm+k( U2@* E2gpݡCzO2[aUV꽞IdȌ3<22z=r[;HA#.ƅFڀjjzBAӔBƃMTrZy~{3̛9gOa d Ǯ,|5YZFh1; +mЊ3dM^הzMi |Tb*#M \Gsl0T@=DjJ8!× +dB +ZGTMueUީs X ߠV jxEP:o$L#`.8sxEu4,@cԃ28/?\W!6M$| # [+ +3b L;Ild.wr0brYk + yd'z)p|L},bnMɳȮŶZ᫻kcyhalz +z5jno`h,2m\K\m'JĝuVCgz8E}O]vy a6Qt8ZhHa(h(,T0kI`+IedseGPEsKeg DVU6vvE(vʓ|KQ5f"z=g)ƛb0klRɡ7.6gEc){Zj6l? @@[5L iw<9@.<`cu|&n4DYL2b iƈڈAQѤ[kQ-=R@ eN0iFG>_F!w D/ˇN?pޟ+8+N$4L8)0a3z|рgywKxg}+鬪[3u<X)~AA~miMęUb'#更.Ss>~a7*4+xêa*S inkeYX6mNjѾG$/(ޠg{Tnb4k[r0VP[p]Yѐc/0'a;K 44XkY9$N43>M(W+G0i4b8s豗£̩uq%C;ڃӅ +iN; Z溇!tsxAq \'`qTq4j™">Ln6A@kYU[uMd۲;gSM΂g}3eyǃ~I U̧>3&[CޯR>ɜU4|p?}5?{&Aulڡv5):fbF6!IQlsWVIuf~gdysbzdLu;ޜ#%A"8w`C^CfvCV:zKUdu%]푵\++Nx*ncve8{>ә,S^˦) gDqrD+//)D~DHПl*+ 4Lf(Tyj[޾~z^?/ +0jRK}_rA:*0~b +U^iʊGu8̌-ѻΰG5!#E$q-o3NӢ8]Kc=y %-kZNյ5Eӂ.yî +"#HY:azoͣ +endstream +endobj +250 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +251 0 obj +<< +/BaseFont /cmti12 +/FirstChar 67 +/FontDescriptor 281 0 R +/LastChar 117 +/Name /F1 +/Subtype /Type1 +/Type /Font +/Widths [700 1000 1000 1000 1000 1000 1000 513 1000 1000 1000 1000 1000 1000 1000 1000 +1000 700 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 +1000 1000 450 1000 1000 500 1000 1000 1000 250 800 550 500 500 1000 413 +1000 325 525] +>> +endobj +252 0 obj +<< +/Filter /FlateDecode +/Length 2421 +>> +stream +xYYWH~W-UcEj!yplc,s,ai&INduKznV|y7yM/Cop{p% +/D&J ^ Źb҉ 76PFqzrI[ Ng?Š ;y\epѸ89&f.s- 3kɔs!͐~ߑjL?"EQdZLq%VRb +RE1@p&w۴Th ~RYq;ZKxZ*+Tsр3_/*8<;kkai7* +5wy0bh>~G̼͉;nct{K/P*RY_mA"6SH/.D8p8d_HA+%Dzl]@ +_(tX:[Pq]|iLx OZڢ"Hc-`uՌb7/<<܋} h!BH㌱!2pzHkVMXasW0? ۙgt/3._@;rƿNN /Æ bqKOv6!ﰗ +cC]'>PE8`xJgjR-I)r,泵eݎ DWXO}#!pPYTY3b6<RuD{!>]7ANg)r,ΦMr \SlK6̐ZKJmE( 8ܐW'̮*W8\nxUYE~a]eM#YQLGL։wu̧?9e;vBtIbgh ArА/y y#5XrmmTۈ + +D`g3XO o|ժȃ +H4?@,@+1|+ @O0d! v3_ <ľ|z_l"mlBdFS74w-.l#E#N*ʆ^{tFV8х?dň<ŕ8YF|o=o}WcDH3 +vTc tiUiHG =djrpvXgO^E#3xަ`I1:@## "3ڥ+,ѫjOmC>[V=&1FCҖp~.4ZQ"!OD$|jǚ`Ry䟯.~2 Ť%@fCnoDžVOG..[ctcScY^";gzj x*(C4%UD%rYN(b +Ȓpm +;Ĭ~kʨUS}4Rt,ADjy|bH|EkzQ%D\=04"ĺJC bOz;-zvz#, &4d\˒q\ƹ{`EFi3H+NĹ8wYPVSJMQˑlDZ]~vh +endstream +endobj +253 0 obj +<< +/OP false +/SA false +/Type /ExtGState +>> +endobj +254 0 obj +<< +/Filter /FlateDecode +/Length 1553 +>> +stream +xڍWMsF W;2o2Diܩ'ѥ{$ZRCQ}vIIni2K <~nzQ^~4~_h0ʛQqU?aKr4\ o﫬hΡ1y^E3eam.[tg[ r<\%J|?d)-J-HʿmeTO͔u(K;haˈ̜b+_ŔAî+l;A#* 2BUjHO.rQ˾<&t=MLP u>H$˂9Hb+iH#+3,T@p ^jJl[);``/ib1+J]Rz( +/6뎂 V|],f8!颂wDRUQYBXe:푖le MU2>/KaF/l%;dB/NmNp~LSH6d/c lӄyn@k+KuTˬFu +g0PLKSAdŁLs4?(Q obg*w& g׬ `9&JE`ۘXϗ}mM%_2[ Gu&>-jri2}Z:M!Ys2v?fO)r1, mM%J<)Ld$hIb~f/E0/h$sz&avl'">6Cu{a > +endobj +256 0 obj +<< +/Ascent 693 +/CapHeight 685 +/Descent -200 +/Flags 6 +/FontBBox [-57 -250 1139 750] +/FontFile 282 0 R +/FontName /cmbx12 +/ItalicAngle 0 +/StemV 136 +/Type /FontDescriptor +/XHeight 443 +>> +endobj +257 0 obj +<< +/Ascent 693 +/CapHeight 685 +/Descent -200 +/Flags 6 +/FontBBox [-60 -250 1164 750] +/FontFile 283 0 R +/FontName /cmbx10 +/ItalicAngle 0 +/StemV 146 +/Type /FontDescriptor +>> +endobj +258 0 obj +<< +/Differences [13 /circlecopyrt] +/Type /Encoding +>> +endobj +259 0 obj +<< +/Ascent 0 +/CapHeight 0 +/CharSet (/circlecopyrt) +/Descent 0 +/Flags 4 +/FontBBox [-26 -267 1338 829] +/FontFile 284 0 R +/FontName /NOPIMM+cmbsy10 +/ItalicAngle 0 +/StemV 61 +/Type /FontDescriptor +>> +endobj +260 0 obj +<< +/A << +/D [29 0 R /XYZ 144 193.961777 null] +/S /GoTo +>> +/Next 285 0 R +/Parent 97 0 R +/Title (1.1 The Benets of Z3PLUS) +>> +endobj +261 0 obj +<< +/A << +/D [31 0 R /XYZ 144 351.401764 null] +/S /GoTo +>> +/Parent 97 0 R +/Prev 286 0 R +/Title (1.4 Using This Manual) +>> +endobj +262 0 obj +<< +/A << +/D [33 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -4 +/First 287 0 R +/Last 288 0 R +/Next 289 0 R +/Parent 4 0 R +/Prev 97 0 R +/Title (#2 Starting Z3PLUS the First Time) +>> +endobj +263 0 obj +<< +/Differences [13 /fl] +/Type /Encoding +>> +endobj +264 0 obj +<< +/Ascent 693 +/CapHeight 682 +/Descent -205 +/Flags 6 +/FontBBox [-44 -250 1009 750] +/FontFile 290 0 R +/FontName /cmr10 +/ItalicAngle 0 +/StemV 93 +/Type /FontDescriptor +/XHeight 430 +>> +endobj +265 0 obj +<< +/Ascent 610 +/CapHeight 610 +/Descent -228 +/Flags 6 +/FontBBox [-6 -233 539 698] +/FontFile 291 0 R +/FontName /cmtt10 +/ItalicAngle 0 +/StemV 73 +/Type /FontDescriptor +/XHeight 430 +>> +endobj +266 0 obj +<< +/A << +/D [77 0 R /XYZ 144 289.24176 null] +/S /GoTo +>> +/Count -2 +/First 292 0 R +/Last 293 0 R +/Next 294 0 R +/Parent 21 0 R +/Prev 103 0 R +/Title (6.2 Files Supplied with Z3PLUS) +>> +endobj +267 0 obj +<< +/A << +/D [85 0 R /XYZ 144 656.201782 null] +/S /GoTo +>> +/Count -7 +/First 295 0 R +/Last 296 0 R +/Next 104 0 R +/Parent 21 0 R +/Prev 297 0 R +/Title (6.6 Dierences Between Z3PLUS and CP/M-Plus) +>> +endobj +268 0 obj +<< +/A << +/D [67 0 R /XYZ 144 321.401764 null] +/S /GoTo +>> +/Count -2 +/First 298 0 R +/Last 299 0 R +/Next 300 0 R +/Parent 105 0 R +/Title (5.1 Alternative Invocation Commands) +>> +endobj +269 0 obj +<< +/A << +/D [71 0 R /XYZ 144 309.641785 null] +/S /GoTo +>> +/Count -2 +/First 301 0 R +/Last 302 0 R +/Parent 105 0 R +/Prev 300 0 R +/Title (5.3 Customizing Your Z3PLUS System) +>> +endobj +270 0 obj +<< +/A << +/D [51 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -4 +/First 303 0 R +/Last 304 0 R +/Next 105 0 R +/Parent 4 0 R +/Prev 289 0 R +/Title (#4 Learning More About Z-System) +>> +endobj +271 0 obj +<< +/Ascent 693 +/CapHeight 682 +/Descent -204 +/Flags 6 +/FontBBox [-35 -250 1125 750] +/FontFile 305 0 R +/FontName /cmti10 +/ItalicAngle 0 +/StemV 91 +/Type /FontDescriptor +>> +endobj +272 0 obj +<< +/Ascent 0 +/CapHeight 682 +/Descent 0 +/Flags 4 +/FontBBox [-65 -250 1123 750] +/FontFile 306 0 R +/FontName /cmsl10 +/ItalicAngle 0 +/StemV 38 +/Type /FontDescriptor +>> +endobj +273 0 obj +<< +/Ascent 0 +/CapHeight 0 +/Descent 0 +/Flags 4 +/FontBBox [-29 -272 1123 779] +/FontFile 307 0 R +/FontName /cmsy10 +/ItalicAngle 0 +/StemV 40 +/Type /FontDescriptor +>> +endobj +274 0 obj +<< +/Ascent 0 +/CapHeight 0 +/Descent 0 +/Flags 4 +/FontBBox [-34 -219 1048 750] +/FontFile 308 0 R +/FontName /cmmi10 +/ItalicAngle 0 +/StemV 29 +/Type /FontDescriptor +>> +endobj +275 0 obj +<< +/Ascent 0 +/CapHeight 0 +/Descent 0 +/Flags 4 +/FontBBox [-31 -251 1122 750] +/FontFile 309 0 R +/FontName /cmr7 +/ItalicAngle 0 +/StemV 99 +/Type /FontDescriptor +>> +endobj +276 0 obj +<< +/Ascent 0 +/CapHeight 0 +/Descent 0 +/Flags 4 +/FontBBox [-24 -250 1193 750] +/FontFile 310 0 R +/FontName /cmr6 +/ItalicAngle 0 +/StemV 104 +/Type /FontDescriptor +>> +endobj +277 0 obj +<< +/Differences [13 /fl] +/Type /Encoding +>> +endobj +278 0 obj +<< +/Ascent 693 +/CapHeight 682 +/Descent -204 +/Flags 6 +/FontBBox [-40 -250 1070 750] +/FontFile 311 0 R +/FontName /cmr8 +/ItalicAngle 0 +/StemV 96 +/Type /FontDescriptor +/XHeight 430 +>> +endobj +279 0 obj +<< +/Ascent 0 +/CapHeight 610 +/Descent 0 +/Flags 6 +/FontBBox [-7 -232 547 701] +/FontFile 312 0 R +/FontName /cmtt8 +/ItalicAngle 0 +/StemV 80 +/Type /FontDescriptor +>> +endobj +280 0 obj +<< +/Ascent 0 +/CapHeight 0 +/Descent 0 +/Flags 4 +/FontBBox [-34 -250 1190 750] +/FontFile 313 0 R +/FontName /cmti8 +/ItalicAngle 0 +/StemV 87 +/Type /FontDescriptor +>> +endobj +281 0 obj +<< +/Ascent 0 +/CapHeight 682 +/Descent 0 +/Flags 6 +/FontBBox [-36 -251 1104 750] +/FontFile 314 0 R +/FontName /cmti12 +/ItalicAngle 0 +/StemV 82 +/Type /FontDescriptor +>> +endobj +282 0 obj +<< +/Length 11774 +/Length1 1692 +/Length2 10080 +/Length3 0 +>> +stream +%!FontType1-1.0: cmbx12 1 +13 dict begin +/FontName /cmbx12 def +/FontType 1 def +/FontBBox {-57 -250 1139 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmbx12) readonly def +/FamilyName (cmbx12) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmbx12) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 39 /quoteright put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 89 /Y put +dup 90 /Z put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 124 /emdash put +dup 174 /ff put +dup 175 /fi put +readonly def +currentdict end +currentfile eexec +DSncd.K!6E .Ø{0FuUGsA +לLgyv?>pHNAc^3ˉÓB"5_E(.d-ݬ +^ʚO5+m"B)#KO:Cbš7^āqί%>I%儀Z=vdS#F# +O|qJk&׵Yi{ڀ 4:KY$4 {VivkAژgH>z`tisr *V'tA@],N| }c`-Frv8ީs jTale aIXfWVZM{ =zCX軌9a\r^I>ko`Tq>n2c2#̗3DvKq-UB + +A]H{ ^ ӝR /ӗRh義N Z)z͐89?Y0ƿ&rWbҚ:W8)w|mS{#y%\ڕt D|Yeݶq$.6vCki(5Ъ-qn8=OH'k6C^"1)o )c` +V7mݐ tSogZpPNJ/ ঄αNVNKa*._ZCL}#3wRY +\>*i(SmixTqR {m|@#If +cW0A2ȇ]cJc̴BiqӀE9~ýZУ(*M}ʠxH$ +OuauxkMV2a `w6շ8KGq`vڛ !NZø%S,!<\#U@Mؙ-Ԃ[bOEO[XY#~BSVP+}ߕ_(2\!vM%w ϊ8/:p;SO7XJˀޥߑ'ƥj;`KUqe[bTeR,w;pZFp2ElѰ#!/LbC6-\E}~2p) dHBqpFBz<\$H汬eT.FSz#8oI]UCXp!C*V(PyPrߘȯfjZBj'e>tZ0cAo,g^{,:1FO]S)ۍ]8S6CNK;GBu $zc,m$oNL7n8;Q +tղcW{=FVrͬyKܩ~p}(ĝEuiR~26D̊0bx.pj"%u9x7To6-tܥbr\K1ǝBsbrp.&:vaszݦoq(PDՆI*@F*=7w:xwP+`'4H v]DM|D +|דԓDS'˭5Ǥl#D^';{fi-R9>7y;v+j.?;- _|y^)efGs( DGZc?ɛ -8ӺexBfCwױ_z‡˗*XGۣp%α ~kRNPC>׿}P٣zz3b>2jڸ9ݐcd I\nX .,(Wb=}^!$d>M/Qiϡ|1 ,mD٩챮'Xc̭qGlᒱ1٭`ނ|Wa?N+OEBb GVA%1zIqD}:U#mG0$dI֭~Ѳbp)gD㮹(::R(kAĞ؅QN +ABP񜧀{C遝Y{ ?0r&/&@lZCڸMhY3\lE2ݍ4`BJƊ +Ne^H|mb(L2h&\0=,h?](8=;p,ۻ2jz#:b28[_q4.;(GĆb{(V$4D|Y*|!?T 3JMZWʣ6o{៵㛑4pסz#0>S/1d(3 +mL +y0zDŽqƻw<-֋Ij"t +shƾDkG75a™VΪTW5QZEH__}fTGzR@H^lGkRdc~'f1|k'.mT^I05D&d`S 0'21zqg[C #`-̦vL^Qd>$KځQ9 ;F[4czYw cg'_ c>l|[*5FL#7Eݕ />7{}/RU]t'Ag +P]AnRiu٤1VE9KfI* "3r ٔ^ `de`1 y)>Ƈ¦<K.2}Qs1!r!֊-K׷3Zwk^ӄN˦0L,WJg] +\5Y.ZH#w2l:&Y wy$Ra\z)#`̒u`P34IsIQ=&]{(|%|Wy[w@R|b"+"'zKxnvxUma2 AJlGUTeҗ,QOoȓR +EƈZ@ aPv?"\VfEɈf9]Lٻv+u8&sWg>ؗ|brZz4!wEkH‹N F$bN__oոSH44DuQT$ zye"fBa^v,8Hr#"vr]rgCD]QN'hFڗLL@ +/l̃CV[ e},%/^zaPr3Z[H%c;g@Q"i%8' EbG_t&'` )嘶4{ fk'uC~⠨]:iQv¬wNwD(;ݳ'{PA6xf|qXu X4phI({Ld߬Z 'k4$ yd=x(:C2z ++?)P!JrL͖Z7'Z^`ʇIsH=j,?T=KjL+6X^`Ӗ+gx''_;v6}.vJZ#gY|kǬ:Iuw"KO;nL"*qD:pƠl#@b洛#͌,xTn8 ^qSc:4_m"9CB^ >#w_R%Q17TUD rRIǢVGH'0PBMޚ#r(&^Cx_ +)(MٔzM +q$7@v~,qa(͊XqW'r0Dh*]eLE.~:ԥYw*/XH%Mpτ+9t͛_l3ylKOSmd{5Dr{EBX5yS R@ ]:VS[ՓR rxb^eӒsA(P %ͬvʠ'ܫQ'*fK <-09']%%NG|\p>cb鎂o%EōGN ۀ|_*rVت}w ecbV%HP2z-;Xmв%©b=oA"щ5}\H87mb I`pE +4..̙U +UUyCd{v']2+ 7m,ycϘRrhޭ"'G@]dTFo0Ou\6g>?]*'@7GdU-+>)bvn (WZ҈m ~fMʉ~[f@ZI5=n.l#/C Z<=JcA9u4K$$X4e vNJ;}Lb[D15k!r#3$y6lW13*ZYY`.RH΍dFM]LGbS۾BbhJjNC`z&UMGR<zoAVӸd (`DtN]ۆBM`uiڼ&]:=Jb U$'ay$ߑf3aX$0Wbeӓ+~SW)F‚=$"K!|L :Zfo_xxΔe|S'DGY%jSLEX*-y.UP ^] +}f|}^Y:=?B I9]Ũ,~=MIqLG֩\^w~8^JC+ʢ ñcj'ƒM L&A9hIEf꼩:pUKڃ5 U["\('ʂ1In]`#$q^D'#ÇaW:/4!ѽg?u+rޕjt$md2'/Eu)SMlUQJ=lu_"ý}ꋿU*] +(wb}we0Щ +jFZDP(%\aۺ{ uRO X}ͨNESq.E`co+fBc+h㚮R;RX(I]apu]k + L^8hƨ?U >V hQ4zԴioWפYh# ++(}`>,:9ФW2r>Y& +n ź< +~eOjG|wTJw.F\u|Xh,S 2ޝ/Fxˊ{]V(IsŕD\g;H1б{33UFƽ`ǣ_<*$1=i +ʆw֣!pV)BP<[=4M[sA#3`}К>*j{q>~{vs|H*erh5[E-җ=ŷV {k xjA W7H$=k/>D* +5cmz>8!8b+8uC?QA8f^v^W a&eg]?x&*^&_>PfQn<6Fu|@ 5()á#sI1&agm[uO] ;PܵC1g1r)Gm}[;κ CStōiAo?}wQVfg_5(q#iHL_WOٌ6]5ġ\ј/ܓ'D0fq7IQyqH>F6#& ]#9gf*ghm1mt?E}ZZ}2Ceݿ# ־ {8If`4D 1 3Nށ{u]_f;2a8s-jh!bѪ1Dqd$[3fT + +endstream +endobj +283 0 obj +<< +/Length 11479 +/Length1 1637 +/Length2 9840 +/Length3 0 +>> +stream +%!FontType1-1.0: cmbx10 1 +13 dict begin +/FontName /cmbx10 def +/FontType 1 def +/FontBBox {-60 -250 1164 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmbx10) readonly def +/FamilyName (cmbx10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmbx10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 42 /asterisk put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 90 /Z put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 119 /w put +dup 121 /y put +dup 123 /endash put +dup 175 /fi put +readonly def +currentdict end +currentfile eexec +mFBqv%k~N.q. + ħgSc@EA_0k&Oy VS̈́3WsKT5wT eu6nCite +޽O?FC^ږԘL? +2ΩNhJTHCѪ'أ!!~J6iEoT#Rh^EJ!и$ @ߵ +V@KHא{ ed `ee֟_=u;g +mE[~& HB/|lq^}/ΔJ JnC*^*`zv|ԗx:˂C05!j9-,L,-K9rDVCP#$}5b§-0D$"6㞅TYgx0^6gTܺ go0mx:9l=@zrmؐ>&2o# Wo*Xui )֟yNͣD1l,2kof48ƍ{z:8n/>OԞ>\Tnܠifcm !ij&$4EBS{ด]]ӎ +\x2Bs2M<bRbuSYeeZ|F`Ibcu+nqpgqdR@3=xWUާ/0@[:hbyJ6Y%͍%wZkoϽ]vޛ췥.:'X$vV.h'M(ݡQlp"S^5eȭ!CV46 " fM Ah fw@ƍ%beXԀj4ɤ#v0OKe7gIj +e\8Rv8}S~D!dgBHReX  =%o_"أ" ^`t*ҙ{͚\Иnt,*gƦ {II4=FL ȹkD[k|8pjbzKv +kEZ~q1QOBV^A:xu{ +E1\Eg4*/ssq x3ZZkD= BI@QQ4:hO_WBӲŏdJ BZF!wr(aGn]Y,r"8l-[u/kÚAKoNݤeöhE!D4䏗ZDVԷFƯ,}I=V5 A])*e":{p_ħ#!Je +ҾHIdJ1@x,/mU +۴KCȍnhs9 fTct2R1 @)-? +۵6'1إb.ɣve>J݋Pl\`S1-؛g6 +~'lY=*py 0/vwyWFt79, jN0 gE0˵WNhU \4-X\| +`CÁjbe0xQFX`cvjOӒߎG6r QWjOmB1ٌ\܂ҍbԕ+5_;Yr^:|!a-vkҁ:iP0}(## :t8 + H܊,3rPӍBu>U}=Kߟ|uےy5@>bX +,c܎vHN \1Oz{]azt +lԙQ HS"øE$L12WU|0O臲P9.Ӂj峇YT {cQcSy`0`B=-uU\s +lEsvr gb +2]?i +nqTRD'LVD؃ ȩoeX KGCKGpqVo6[%r52u^nGZJ^CRy;|h8$[c~&*'V dwRz!?c@z9CVr[K;' 2JPYuϹ(0 +^I*kT(v\>XO3Ěʱ'=4F +[/'𵀎el h?ǏZ`KMF)W&Kt{Ep ߳ӈF\jV,c }r:)8E;/ǍACX,pqT#a3h'Djxz'ZQ~:b FmJmF>6z2OLA^2ԐA&zqW˷Qͨ([QG|br8+o"ggl@=f)5=|P.w\=˚™l?LF@t߅p!H ? dEp=ղġSDaYJ J^{x#)9b\01-ؙÉ-02qTgt;ptmVlv}/+:;CjQ`8ɮ4fsM@md#U$MY&:uI# +I/VD:{b(IU1UIFE;hKVEx^(@#~M +7ȗOgc3a}ۋbS6DNA>r1ſ6Z~>a]s95JhtZt^Ԧ\qJ>ZgSkB.r(a@fIc _Jn,H=: RA +UR輹P.Ѕô1䗔ʔI8+ݽ :\4hmX<ײNda;Qs ¾x^ ܳ;IDo WҀnXXˇ.z[L /-Ive$Bvp +>\M2~Zr@Iݪ!2Q!B4H]Yh2dD᫊1⼕_ϓ}G|bj BE\qd9H?k{Gbw_yR!Zy1ra1Um-ύ d)};)ZU6~g;u#dԌDC-#RuI&Kjm]Gɠo~m3{(@B63AAXJWq Om*PݔJ&M̷`2hCQn-# aXb;i`9럖>cz V +f'1:{{kGz_`kj lP.O)EF~jYfNߒkآUzH(bE mӼb,`y*Okg.=䳢5Brts FՎ[ܖ55@O)jD(~Tb/Q8&Kb,o[W%@rtjcH[[+:<+F)O FGF,&kDfLLEl)y Jb\,6Xܕ,aе!z>sЬ3,x,5ôqn?e75hj5!ք֌aPv>Ճ/8YBJ}Ѳ`tcVM"zd,e;RRbu"26;b0?\rVLooOgnS΁ +ƟT71Y'3)rJC'qQ̢f>}!\^tZ%tX!1 -wI{# V;.{Ã88]">U]Ute0$Ƕܷ=%aUY(o@6^ A7bfW w#17ӭT`X",pdc~գժM+<±ߪi: +Yp|:|zĻiTDLJ@~1s\B)ep +{BTj-z9f];boC, .x ']@Ѷ34_E\ Fmɼ@Q2+\?x/;i:;E&/ZSi >+̲oojȀ +e+Dxm[!bTeCa#^l?c]E :ӶX`7qjO0g@=݂:X~ >6{V6:nhמ5?CCFw9c8ąD,X,)p4YhPWgCBu.K?++QlW?G!.O>4NXk901dE1a^a qCrդ (8f6FZt\(Yd7^-l6U&G9\kYs +}ѝ-ԡdE(> u +bd3^+x;:ObHL|GùyΑ*>F.G{#ܴvc& {lqKܩe6ONc,S/lH4XNGkxb{%Wm5 .zoPj` wyJ p Q,bͰuK#*fm6*̲]ˬ 1Qb#|zFڿۆ&zVƣlSôAޕ+^aՏ\7b]r. `mhAc"MSvJ8Մ0É+(hG|2W;qҀv^825zhj\ u^"I ~@zmZ,l$ +]P[SEH(=eɛ&7|TH|N\#]Z3nmVhil[6`KQɻ=Ŭ:N)mQGH?'Jr>:::4K~j1!uƾov;ꖵ3Y? +]. }4xí7m/c7,)wp :H1NG'⾖` }(@prS/# 06ħhLXS8f;&M=Czwݴ(%h]6X;{xk8&-0Q3(9)oCLNQOY\aF/ݷOpeSL MxBik탁é|3O+NZHY1:#)+@q>r}bK0R?M?6$ [*!${ IЄ({jWƕ[BP :QUjGeqmp0/^F lKCs +&{D%b/~'cHę!Tx 1 Kx?<+'t8i?$,L + .pPlwWH Mn9 \rOŕ\Q 9d s{BN* %pȘ,$q8aeA⛫[-Uq<\a#\` +{sR@Na|l3nRImKٸkƏ(pHm^P/Y}w }ֹ`z礫$ |;..M*X-*25z|b@8|AU{@:sSꋨpw*=W)ٖ尻i%|ݞV#XY"9k +Yw(6 a* s )ly)-lV+aB\D5'{2)/}(VbꥱdTVȉc1Vo2qj/rB(Ɵ&)-@W ⢯ӥx.kBB+r=.~|𱐌[E94,k/G5(w*\J|ChzwodN kSYswͮI$;^喷ZA3= +5#p Ko4P9*n/)Ė=V Q,܅17VKhZ*wMK\܎/8|T6GjcIـ;Ξ Uc ,9Ge%%ᭇI5Z58V$Q&p`MThl@1eI + +endstream +endobj +284 0 obj +<< +/Length 1935 +/Length1 767 +/Length2 1166 +/Length3 0 +>> +stream +%!FontType1-1.0: NOPIMM+cmbsy10 1 +13 dict begin +/FontName /NOPIMM+cmbsy10 def +/FontType 1 def +/FontBBox {-26 -267 1338 829} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmbsy10) readonly def +/FamilyName (cmbsy10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmbsy10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 13 /circlecopyrt put +dup 176 /circlecopyrt put +readonly def +currentdict end +currentfile eexec +ic,ƓK'͒0ErNCHs@]”7kVr^@;YyɊqhd&rqYa=~jkܻ6nכ`qDً_!nw*+]11B,2RtV4eCT򠓡Hڻv3hjlhd c 1hZh܂pD2Bo۬| o3.9GkDGu1uV>u= iяjL5nBdZu:{5ч>BBGE,n,i`lEIМpE}j vVD~jVo]~cSpQ᭷%MSNW#|p^IH$|PZr3BԒGbW3 օ]Ro e]k] U.W,hYm/%S-PYvDb]V:I4@/ran͡{eb%a 4mXg ʸЬCοWz*o1{|NwA 2)ìqbw9 XJs0X.Q-ApVj3'?6\Vv:(I:3qe({/@3ġ6-5#!6g{\fmLU9Ӛ{ ɁRnoә2Nt=V;ib{H-KP~dAg;vo Yvn +z;f:K8~?lC<:>?-ل5d8T獇~館Ϋh`>)\f{P8[13@&R9SE [1 \oşwd]qy(&EDx~6$~T|VW?]4$w@Bw/\[o' NedTZ\q{̣uPrK=[;,%jaK"ֻ+TsbxOczKH# U L T>ТaYS-ʤrZxùtNӏ&K!8ZSxv]."n;f ҶMKc{6m7o2R=y5D6y9 + +endstream +endobj +285 0 obj +<< +/A << +/D [30 0 R /XYZ 133.199997 371.801758 null] +/S /GoTo +>> +/Next 286 0 R +/Parent 97 0 R +/Prev 260 0 R +/Title (1.2 The New Command-Processing Fea- tures) +>> +endobj +286 0 obj +<< +/A << +/D [31 0 R /XYZ 144 572.201782 null] +/S /GoTo +>> +/Next 261 0 R +/Parent 97 0 R +/Prev 285 0 R +/Title (1.3 Other Major Features) +>> +endobj +287 0 obj +<< +/A << +/D [33 0 R /XYZ 144 426.041779 null] +/S /GoTo +>> +/Next 315 0 R +/Parent 262 0 R +/Title (2.1 Introduction) +>> +endobj +288 0 obj +<< +/A << +/D [36 0 R /XYZ 133.199997 499.721771 null] +/S /GoTo +>> +/Parent 262 0 R +/Prev 316 0 R +/Title (2.4 Organizing Your Files) +>> +endobj +289 0 obj +<< +/A << +/D [37 0 R /XYZ 144 579.939453 null] +/S /GoTo +>> +/Count -7 +/First 317 0 R +/Last 318 0 R +/Next 270 0 R +/Parent 4 0 R +/Prev 262 0 R +/Title (#3 Getting Acquainted with Z3PLUS) +>> +endobj +290 0 obj +<< +/Length 16139 +/Length1 2175 +/Length2 13962 +/Length3 0 +>> +stream +%!FontType1-1.0: cmr10 1 +13 dict begin +/FontName /cmr10 def +/FontType 1 def +/FontBBox {-44 -250 1009 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmr10) readonly def +/FamilyName (cmr10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmr10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 14 /ffi put +dup 33 /exclam put +dup 34 /quotedblright put +dup 36 /dollar put +dup 37 /percent put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 43 /plus put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 61 /equal put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +dup 124 /emdash put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +dup 177 /ffi put +readonly def +currentdict end +currentfile eexec +QTkh@kFRO^bgݾJ~V}%4"cY+#1U)+)W/+t"rB`-hg.TAgaa0;d7OBiqZ&.BvK9ql?dZtr9w&\܋Zm6ZmEG֥P>5>84 o&oh%LVfN eZ7G&Hɂ3/V)JMkg牼j%=o0mQzԵMGV¢9|P]cW1 H6v)3#3sZbPT%=9KDBmȄyS6=F92~`uLҾq| 627ɩd[ǡUEè*Hk|scV7FD3qPN<ɖ+e؃@[r*%UAеcd;{L@;W `KFjDDrZcT{\#UX;NowJ=*Zd'7@PR~A +MF^6۹ҳ8M_#\!fG0&Oꟿ7c%zA܀!۵D_pY3C㤿+sOuJ̝e,*ƒ<:<TW:^Ęr6,1Z K"8T΄h" +0S0;R><-T5Vs INݦuZi?OtI{uCy]'$'@gGL>01A8(ZUс! +&Zx>}729 a>WGB|L#U +㋁F緺IP lҬ8!NV|sk)Rn*olBawe*G*ipBp "!/.BzGdTw^rƦ;,>P8f +-1&ZN,@!in"ym>hކNc40f ,^-qQ͡3h &~խ2]n& p|(N46r&Xža^.rϸ<|Ȋ<8CoV BeUg}V)Ù{&jw x?'Lզ5.m8qToB v Ha+DIm t( +ߵ̚[2?X6M1Uaq2{,"ax3}n4ү ~Ucl*K^hYr]^I ^Ȟs*d?SuENXV1;gY_ALA|ȁW.Į(݄;|Ѓi1$?;C %p-/KZ.TжAli@e2 0 z~C DgoCG,$Fש"eM ߉#mZ? F J)}8y~WSPh|Z#} 93e-]NPٝGA*Ù;2MJX},sX7Q[ÝYl Fx]^EX[/ae>\ΊLU% sDrЪ#Tgq#p?2av;_ǎ4E0]-r}A2#t서*4/Co:5ӡSpNAɉ35E |<;ue3807B h#SfSG&ݥ?Gʳ+p $ؔT8 W]lBtw-M9qbpHQ#{6c( U]E=?*GqJ))?*茠[?Wٺl>?iJ*C)Lkmإ.O +Yz{Qj[\h60+2{B-3iR6t"x^!U&T*Ҡ_Ӄ)HJ5CU,w(#T#ݪ !t۾H,5mL¡뾿 < ]ETf"1 ujȲ3uУ2,#Y /8r/0 | P:hLϓ")isg5(!,$AK޽ .|F= ={w=a zXSvkO Zs0,zY<'cOȔ~Ҿcg Y19*HiO3ЌO%}<ۡ4O?[)|b7޲Bd?qF[PFv v_H |FsǺB־~Oݨ%J ,4;HR\+S?tP>N!DxoOqUFM +MI) \m:Z<9i`:Yq*! z$^)|XZBpz9^h}0J0/ZSr!@e҈{p Z0~芤hb+1Q?UeC>_xy\bx͔`:G<| bewFH{Cj ڏbj|ct0 ^j2xV (cSJL;аX xU|4ޛ?z +9\e轕3WHt(4 u+P:Qk`PA\Je*Oh_S-@B$t yR 99jnj6dzl.fVRV;[Ұ]܏XP֤Dύ)Il?̛p L0-(%s8v\BXx/KDREQ{ ++.h+_*WSw^" )Ĝ *´2ŕs؝j-!vX?EHbxr;ӗteWhlao >1 n@P +ރOzMDOHVY +Pg}5v'"agqd?-te K + 45]^'n$ӓƗ4_2]lJ~]4Gyy'ˤ<y՞ξ b~<6'f7V2f̘r%Ha8T4\Ox9֦M f=;LeHa1DzXkrPj$1:tgKJ18u9Hm}x#$$ȥ^ %v*3H Fzfi5|wV>F18tkN;OJލͦ ཹA>Gd$nc]Cx >"sz?*8eپ@Kk `y#*՛' >sT'텨 r_źu9VĂN# ⧗^ j]Nv_Dcm.ї [vǫ 6Jpʔ6/eN=ky-V4u;5,#O|l.ڪ۰70;u`FOkgG3֜!k ύRF*N +&Ƒ $ +_+T=_31eMTw3l"AV"?ŖC)SӢV%W8Ǜ_o?m Z')ߓeK +1gPP 0sh罂V7Vx +7OfP A NH(}?] dž Ixp ~ 7d^d̰ӱ@(mnǸuj+/ #| gGgݙUI*fIW0 lLvt2#07&l5T/̳f0bB´)v~ 4'} 揜_u!a`CΘ%`9fA-WVʓs;bET 򤶡eNѤȓ +ȱBXdZ<kb(]o|mM<2f:"iT3 S(p,,|+Q ~d_axڐHbVY i^Sj r]oI]=AujxŮ.Wۈe*QBnʃ]PMxץ=+jS`y5ԱR !ɥ28y;7Yj5U5:{F(O`%8`nu2jO @}EbT˩`$R}<g4!۲(.a ?pzlʼps+6 d3~_˶lZPCJ\wii|OM/o@&kV(EEG~f_f li¯ucĻwG}QYZNO X<%ҴUތU$3n ptm%uj +?'rj`} + ;X;r8ﺅ?w&ުC [0I;4 ՙnߣt:mGB[v3Bŷ^'%M{it+j$ܾR#1b*M#[IW^fuvwUk7^)Bx8!Ѐ9jeR툏cޫdlF2k-\3Z Jv䲛*+8ᦖFl~RO1<<;I,b .Y4SB9"x BY Q2*@{vs=Dނzk>O^ۻ' l–`zfӉ,.^Rh%$e ,x'!Q;>3yd֏4ۖx :dk[b5 :2ux{^-ÁȚH8%u?DE3yz/ZRu|+^Q'J61uiRף4,n3 K"L3Wd6Yh=r< {7ٍA˕f_;RVu&?An_^El0go7H&MQcg";[@Ex%%X6f|KXLs+P8JLVs z``6J\Ruѩ:%qdwҞnG,Mcxq> +z20  +1a[sDa_M[\j;͔·(_\|V$uT|ウNv_U3 ^s~w ܵlI],~i!NL7빦ND;扜I_Tw- ^i%.kS)` =ma8Xv)]EbX ac$6p!ʏRzNʺZY)!y7Ӭ֔8SF)Z^>6%qۍՈ_;-gtduz1T'ͧ(H?t bx`S<4l喟$i]L=xdrT.![iF[%&0ٸHXmHAla8N>m#(x5半IR ȼJ >6} i,TTt RiG`{ay*C-ĸU[&$+q6Il|¸}l.l`@9n4yr|q{9->S D.-ړN {zi2פWvţp^/rk;j +PD&_ <DsW +OV ~1hըVX +v чsK'&Kݬ/3%mQ.%,ޟJCRuGd;]`B?n+.Z&Ӳ e0i@kdwi_#{uû]q0>]W踗rqX6a?/C1?J?9Lu ՙ;!nhZ5K4#dgt9N0}]H:r +ᑢisY⭭; }/4Yc+ Eav= 6?ԝtm FϷ<œ,mYC3t.鷩&3\{DՎ6y57fƄ(WOEպxYjԃuSO(qSD|~#QrEOK|m#T^gm۹ϟꥪ9Ox µ:7i&>ʟ2QD1{Q1 kay؈G^O92r$\o[BvϯYH$bPG(R l\d{ȡc!q]nQim ){\r.ZMy_yIudp"OdN.>*3NmM@am '3c%\^nڟg̃O)B_]C{wBPq?b!#|-n}Gq;Υ $^V<}3փU +p "xt c%>c&u *x.|9׏* Oʙ|E>b]sbN=\E'?N@ jϨHHpODna`ar=q]x39TneQzMsUĖvzPbI +f_]ᒨ?ƹ #t@|]Q2+nV>L$jW'ٹc\h}CKDl$~Y=nHb .{Wv),^ 6ۈv>/ AvX[ʇzo?$7I +]_Jbec9-KktC#oj+^$( =H1OYT?;ɲ(G@c>)=>v)B(H*Y3jff'' Vs!?OFd]پ U`))2h|wN݇Eb1\t?z(?sNϜBUd*el1qi{;!y7pe/\{G1B4"i+DŽ@DZd-zG|~ںdѥU +=9tn26 QR1zMg6Ty? 0x޹>GtDix3o %8ٺ۫Tt{]J+~81-e]_O z+|դEǂhl3&}\X>04Z>X/WZޮuׅcNA"G&G-Za ]GYtOll'/9e2U;-kŪR i~{/3!6=+Ӡa$N/#v&P;A@,続8#(\RVwvX)3cn`$-Rʤ[Ѷ T2gTN(AxX sJ&M͛cE/5xʯ[P"&J<ȜH},⭫> VM8@n^ (rlt7r5 r=Ka!WeilsʾD#g(aUiAAďi%.^w'LﯸVkr5ctnZ27'ȏ(f̦ήޘzK4(RytqG {P(y +CziE3{K4}Igy6/.=%u'D&k0o%Jpсc'(-yo$gDk٨_r?4~I,M gۉʡi8|3prц7,`WƉ}_QAƙT(8h@CeXa›R2 qxY.\G b߇ nM[wɜW\1П,@=T_vvaR5`2[z3v-}Bӥ.ed&ωȼ?N.zz)8xϕKNZ?K{FAxyJTc.s%}-Ɏ4QoN/ ~5Emnj;"o 3 cfNw=:."A3^vqL0ijzʙ:~ [x%^:[&Y3 +{KYpTha̸;,n>U_Mx l{=^y X=oKGQXCTSUА5^Kpu!_Tw: UHN+"Ƕ2=!T5l3fri)08[2X2t݇`osh]^q9*J1b_Mi]:זRa#+y2v :M apm4W;dm/F,?|AC2(xj7:4',w0Ώ%ᷚLqIO{O@~h"X9o* pm=YZ5ʖn's0tG?V;݋358ق4伋E# P~?Vm>_hy[OyPkKw*NJ\#o_2eV7W|0%NAv݂} 9ØX/ȴĹ\#{uq چ1xagu+z=J|8*#ⓉtJ[/Rў'V\|Y<;{q=Qb2$upfZb +yE$jJeRcP#GFgmBU\`3]*+qaJC8hq`V H51DQ(xp^&+*Аm8@IP>jZyL"1}غnlv\c2\#U!gkK|?-_(Wjngxg9,kA7֬4egJJs934mIUɰhnR~M*۔òt=D%%a/Y#G(qḣfxM<&qВ ꠵DpxH%9uR[)؄#w!mjf,J%jL6-G\:Bk6<5!IJx'2HP Seۉ6qYfZ(PE?ˮ{9 w5? +~(M L+^o+lIP x%1 ~ZbLuu f뿨3zo3OaeV@R<.4>6Sŋ@ +-wIͻ1΀ˠ?O vf3&{a34\a}z9Sx5<ʡ\cv;duuJG +V5+f}Je#:5k +#È1YO7:kzuY\ƤzR&sk4؁oY|Mllbz1ݹ#)Qfx^6)WǕ|/HЖ4>:0K?(CD 8Ê*ư#7 !z2Jq=_Jঝ8ݗ`_ +uP+mq>kRwn8)gnI75[!Tl<.LҦ*l؄KZ~xi? AdJ%ڭVӚ:w2iԁq69Lu_5ϣ:R'IDۚs\'ތ<#Mxb-> ?Q7c4\MݎA;zToBnT=V?4 rgKm'7f¥#0S@Ji +$/LV BT,깻g&GCGj6x[4H%8w NekD4.- kD;8t~1rn+L.9~,濿>۵WfC%J8< A6%Ty3ޝ1+DoDo_^;[JA`B|!żvP$ kxӲ@,Jv 00ʼnd0wRG@c#P[nDm1>2*H5/.P + +endstream +endobj +291 0 obj +<< +/Length 15219 +/Length1 1939 +/Length2 13278 +/Length3 0 +>> +stream +%!FontType1-1.0: cmtt10 1 +13 dict begin +/FontName /cmtt10 def +/FontType 1 def +/FontBBox {-6 -233 539 698} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmtt10) readonly def +/FamilyName (cmtt10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmtt10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 33 /exclam put +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 38 /ampersand put +dup 39 /quoteright put +dup 42 /asterisk put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 61 /equal put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +`F\IB%SxfCu F(Mh+GdT;a_[i?)#8I&k@1KZ!)ǯ۩\x@=EJ_Ʃ5g̉F7 OG+#[`EL 7z7UgCxf/7. +#-ꯗ%Fbxw=){ظnHG>7qNp +G낛Ux09.Mm݂YX-[D96k.oAUyP\klX$‰Gзe$o_ѽDSHÕqApDF&SU.q(G_TO +gW ^)LmFZUN0w*X6ɋB9f o3?G.JBּ9iaBm=>h؏=&Yh?[`ᜭY֪P+o_Ξ"[MF<<4\Ɲ%5gjq/˜ +En@'0ux$B#W$3LeNjO=_͊bR{>Ĵo|hDidaگl;Wk^*`gP$7L@J#M_mǪ)iQoj6`R3p^@pwCݵTsF}=`ȱz^GOқMCӜ퉈?-8a!-R¨SgI`$ZoYdzTL[0A9JW&^)"#;̉-'myBVAh&Ya2;/uq=R҈?q057htz%Ѱﶩd\€<ReGBUj`x E+ lpD(,Em͕CsdiP[EWڟry#R-oK[M$-A a r&GUH°]3acq8>T~i +G2ՂF?WqbA(,tvf2Bgyȭ2R)w%zҏYze<4[|4f~ro(kli%N1ZJ&_(Lp~iU-|vTIF +͙CC ;ahAfS0nӌ@uOKjwvc,'2z"$ \QcDu)5Z Z +i n.$Jxoυ`+]dOBHJÀ҅SưLd &U=Z(Ϲš_&5R}:P/uZ?􍦺ʆN*$6̴Z8=?{H1#0J`;UF>+G3,AP2,feJf7$sۿ; ,ƗYԋ$,Cq(ɣ ϢNx7K}-=3Kg5-fm(F~Fmj^4}.7><5JGc9Iazedy͎vQyz{A8W^#Ny0|&ǥf^h _zMymf< !X#at!/@OM15>;U& +Hem ?Ī調 z*@&ƙHڔLؠ njK=F$ +^aiu2}wL~0* ?\!Kuk%Er=?UAu!Bʈ} +;5˜^}8[f$)a!j Dmzx%LVoģ{Ӥ!r/0._؜*zPj[w.|>iqXi| u%3gl>%-!ݰėO[:V3w.̰Ac͆i# +39&`;c7Ia-CY/F +jeYI86qw e4Gۅq젘SP#UЛ)<4Ӛ6 *BwDZc; $!Gm$dut 0DV~ˉ +9%] +(oGK +<\ffUeNJ7Y ˃'zFydHvudowg[57S"rt&VJa*c \.p\.% ԡ#C+Vhn$ S,SbWZMSVyȂtT?GYH*yU)uiFS3okyXfYx |hv#F +\aYZǔZWI<<Hw拹L1u۳F'Co0Gb1n;=_A5 1 ;Ka2~:`S#u5 \`1ܾC#v|+ 3eݓ鯲r{fW_  "_ (Ar\"Y;/pk3.haL*7G1bV4 oB>7UH(-uJ7F+_m7l4[zgzحHV&֗9.3USkx#|'qR fӮ QpB5zdFاWxJuI/F+2%xҠޭjRJu +\5oﴖjbZפÉK*c[.P-hC$ID&u2s G+Qjl7"}?ah9+h*`>)JUgt9V LrUaΈ~c/#Ɪ +[JM lPk|\a +\l16L}:L2[Z#`;4eٽ!2a-#J05+vh3vxZ \(H!C0[9%(A0tEC|9l 9C2zg .dyVV 8c' h>ʄp c|fz}SayNq K\w. ]F-\ D + #,vm=Oe(-&{r23=ى,Wۓ4'1\shn/軬nWGaR%t:/bӲ,x^/LL=\ٜ7##OKcDf~Xū='p6+" +@DSQ3a/pPwF݄)e|x3~#[}a +ň+]Upnls$3:x7&аrCe.8)2Xl)"\*"}wmcS]qE-[Cw1'[Pcy}Q=lƆ[=xFxG9^o̍)Y?#%Gtߡrh !;^\h3V/qfʾq"Sdg61Oxsѕt]H>24x;yv+̨߫-1} I"Gzw\NeR̂ʩ/Hܑ60V5P9~t>a4ِ}/םH-&5yi)==iM?)+`Nƒ/yRȢ_$jPu=B&PZ2q6IOx/_<~4p.c~æmY̖.pIK! #~I9@.U P>ۄB5N(PʙW]!M?I8e/ o;uUm ؝wlsۋu>ˡkD>-fv: sU]qHԻKko(YMYGI7o*EkgЧU79{iFgI({AYO4(zZ8+k2w0R#5T|IkOT))+97G&;ӲS;rۣ&S\7XZ9tw()HʛIy};;6^\8쭌a<^Boɬ+6@5͏ 33n0#S>c`; +AzwXN+ HiZhBK¸SՀ!r&z 5)Wl072@/F Eq+?wwsOSht|քX/ofMQXZ\: 5f&d ;\+s7El.v#?ԐnfOƥp@3Uͼo}[_w ^ q.|N4$QY>´yIM}EJE*GyRzFȞ?03.yES]]ĶF.uW#@Os{PnDZ-1& =m!&So3% +B|Ixq~nze~QܟakOX ޚeF8@91>*h:M~ De3i 8iE?<7!*f-Y[bo. ko0#;~)C;0VY@vi(˼Nܐ"ض +Bmx,KEfsIT؇o+nsdU@cEu'Y&E}Y[}<4zGx$&^l@Ε™ˠ2#x;S{VhW g_ #{TtazO*A5%Dwf/P.lTUH*sdrma*3K[~!]: qk 4&`,=!ɈN)t)dܑp3m|^ +qLt?dߤ*8!+% Jʫ iCh^B+Q cO(e(&s^DpU#-D!{(]y*#X fcRu1Zb5V;C޶ĨEI؇.[,6wjjÏ:Nvu<GMZjNe]HqWkHT<,52,^PO"Zbz׆~f@.w("{|ەY9RcqRh Eۅ5rjƒɐ2\4RIGǟիO +aVKENM:DN1Gk#A&]$@0:qk|6(hݔ|PE6AVi+-r4ޗ`A :X-oKډKݨn(0'Qf&tKjea=dR❗Er_=LٕkM˓װ6:LXfBbfἛgV?#ח +"DBYM*stm8)NjD&)a >si nc44Q0ަ6{jJb +%UһJf,W +!I d1{yI[exz9$aJx &!lEbʾj=lyȥniO QgTXk%mٯQ_ac[=v$ "VPi'4ќhAj_A#5Wzy,\ީJ:5D0/*::@4Hmkɳ/#jwNEڿF ,bROPRxBfj[df<&*&̣g|Trz#Eŵ[q-MHpJv9~3f%/K|͠TmE#ZJQI$g:z2U%K9k<#Sw0"wK+enGΧⴶ޵~.ӓu{=R"@aE"X1W\zC5Oy]ja C2jޒAW_ JgjhOoU +wPWÏ^H7B0jì5 k{~`Pq46I/t$:R;m|iHj8Ps-VA4 %Bi!o b7'XDSedrڱR0?L #_wJJ +)t<IE҈e3jd8V'%&])^ܘ0Q2I}sgSQfA!+~g>}j 䈪o@| sSB*/.I +u/UçF nռ(ٸ#ˡ gj/1J4'5HM1DQ-?̘1 ::b"MV }?Pr`A4\>6C f-'Oo6I'WO +n*:(U Wv1+(Ȗ9Bbb>QJ ~g/g-Hnt-(<⃖[-s /.oY\?"2ن*gҗ{4b5kdҍmE'b-ꞦDB[/Y]>M`mNQGccgi'd1mQ냼}2sJIƴ8=eH$L]toJ'09v7PN,]_' WƄlr~Hbbwb6_n030ߣg|w~2Y^Xm>Kt +,l"Q[[}F?&1 oTUy6eY0dEw'i6}Η.%kN?Q2#kvJ05Juh.w:AݝڞOߚdz+$[0(-!z{1E.i bEz|`&ơl`4Hk'Z[쑜zud›ǐ;Vp"䔄-_rFBE_#5N`ƚāWexV2 RlFbM0t>0$s>`֛q- jk/z Қ/SM̧ +W"b _EڇkukW3(SCq +ce[0/Q%E13_s_e/XQs}#<1SP~,_M8/OJ=]{8֏1pDHvڻUz0~)7qQTU( !1Y 9~0elWpGo%P7v? +zGFC&UAvOHǢ+{oOMҧ5d  Iwy?R7g UR+NwD'2^rdk[p$^Yk [5|{sN$ST%h2GP'y¢?~\R"ũҪ"6+$ي3)y(F=+;ζ؉QhxEv_*RCBa!DȨqLz0ܟHl@R<:#菇MR %2O"#$tqS+lpaV\a}/{SnܜLh׮|gsLoU#4HkRP5 / M> $XᏲ՟*/ Є ϻCJf vAs~>qy)dR;>gE:xܡ'8v2[;|462ނXL +[7+t2p +ؕ^buA&GHtٳO(`MNq $!t#$f.CB˶OAVSf3XV=az9Ј_O E:5zذ!!oA- ^i!C[T#@GkުA8:lIHln~ B9<%'뒇`ך-BrԈ>&u<-` +e1oT1b; GԁB;Zܭћ_A пD"\'R Pɔ!N_pYF ؘ=LMO,[o S:]fʮؠ Lh+Rc9 .22~c \k3WB<Y*m +]UF$&1#< meR|ԋyA&9 oXd7@+!iX}+\+3$? 0jٵ OuI6p&"W)艇p0̿) +i8zDis#O7X%OBJ-NcR JDm +kl>9 bѷ1!I<4ɩ·*8~P! Sm&̭O]n4!mHyyu&rR&f 4Cn`A|WA=Ka'J )JΒG)tCјEHh"5g _(/v}d,7x NfH9T8/⠽=>g[d쿸wլ$,">Kq ~5 +dۇH#GzcKPo(H`2Be/K]{C ȋǖO>x۳ 8_u Hx.Ӥ+w넣AUeJb#OjX%[zmFG ٌl= yHդxO1Y7R#>HA]9/ؿϑ7tŒ +! +*f;=IgE`]k1CÜqZn`pݓth0{Wg~ONqr0qASD AʣdCs_m lg{UB)-Tsd@Ffd'g6~CLב#HA7tpsV' ~.ϞC`50;z"]WɵȳG}t_@;4Ȅ}+̔ +fȂ6>Ek + +endstream +endobj +292 0 obj +<< +/A << +/D [77 0 R /XYZ 144 197.584824 null] +/S /GoTo +>> +/Next 293 0 R +/Parent 266 0 R +/Title (6.2.1 Z3PLUS System Files) +>> +endobj +293 0 obj +<< +/A << +/D [78 0 R /XYZ 133.199997 394.864807 null] +/S /GoTo +>> +/Parent 266 0 R +/Prev 292 0 R +/Title (6.2.2 Tools and Utilities) +>> +endobj +294 0 obj +<< +/A << +/D [81 0 R /XYZ 144 587.561768 null] +/S /GoTo +>> +/Count -4 +/First 319 0 R +/Last 320 0 R +/Next 321 0 R +/Parent 21 0 R +/Prev 266 0 R +/Title (6.3 Z3PLUS Command Lines) +>> +endobj +295 0 obj +<< +/A << +/D [85 0 R /XYZ 144 551.344788 null] +/S /GoTo +>> +/Next 322 0 R +/Parent 267 0 R +/Title (6.6.1 GET Command) +>> +endobj +296 0 obj +<< +/A << +/D [87 0 R /XYZ 144 654.5448 null] +/S /GoTo +>> +/Parent 267 0 R +/Prev 323 0 R +/Title (6.6.7 Conditional Execution) +>> +endobj +297 0 obj +<< +/A << +/D [84 0 R /XYZ 133.199997 417.161774 null] +/S /GoTo +>> +/Next 267 0 R +/Parent 21 0 R +/Prev 321 0 R +/Title (6.5 Patching Z3PLUS.COM) +>> +endobj +298 0 obj +<< +/A << +/D [67 0 R /XYZ 144 222.544815 null] +/S /GoTo +>> +/Next 299 0 R +/Parent 268 0 R +/Title (5.1.1 Alternative Loading Methods) +>> +endobj +299 0 obj +<< +/A << +/D [68 0 R /XYZ 133.199997 283.504822 null] +/S /GoTo +>> +/Parent 268 0 R +/Prev 298 0 R +/Title (5.1.2 Alternative Default Systems) +>> +endobj +300 0 obj +<< +/A << +/D [69 0 R /XYZ 144 394.361786 null] +/S /GoTo +>> +/Next 269 0 R +/Parent 105 0 R +/Prev 268 0 R +/Title (5.2 Changing Systems on the Fly) +>> +endobj +301 0 obj +<< +/A << +/D [71 0 R /XYZ 144 197.104828 null] +/S /GoTo +>> +/Next 302 0 R +/Parent 269 0 R +/Title (5.3.1 Temporary Changes) +>> +endobj +302 0 obj +<< +/A << +/D [72 0 R /XYZ 133.199997 400.864807 null] +/S /GoTo +>> +/Parent 269 0 R +/Prev 301 0 R +/Title (5.3.2 Custom Congurations) +>> +endobj +303 0 obj +<< +/A << +/D [51 0 R /XYZ 144 234.521774 null] +/S /GoTo +>> +/Next 324 0 R +/Parent 270 0 R +/Title (4.1 Resident Z3PLUS Components) +>> +endobj +304 0 obj +<< +/A << +/D [64 0 R /XYZ 133.199997 390.041779 null] +/S /GoTo +>> +/Count -2 +/First 325 0 R +/Last 326 0 R +/Parent 270 0 R +/Prev 327 0 R +/Title (4.4 Command Hierarchy) +>> +endobj +305 0 obj +<< +/Length 9570 +/Length1 1309 +/Length2 8259 +/Length3 0 +>> +stream +%!FontType1-1.0: cmti10 1 +13 dict begin +/FontName /cmti10 def +/FontType 1 def +/FontBBox {-35 -250 1125 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmti10) readonly def +/FamilyName (cmti10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmti10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 39 /quoteright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 51 /three put +dup 58 /colon put +dup 67 /C put +dup 71 /G put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 90 /Z put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 121 /y put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +HX5d~m%Tgr^&p#Bd}/Tx~XZsh&Gֵ׮]D0*DŽ3O|u; 5RN@C;g}. %g1'}A بy6vղ;ϋ1- @3xf휒itrZV'>7|0 G=vޅZ_2U!{FDo(/)𵩉 s{{i&bx^PXTzn[d)~4wcT`z&8U0K{F,_Ά0E*sQA( *FTkEfvS>Ctohq]׉?go"Iө 8IJa%E_юØ7ԋ\'Nxv~[rAG?nmZf%ĺXfz>_((+9 (D%;e }~9s%^zO@Xnt_bwFGoaoQi#%`ˮu/^R$Pع +췁+f k* L|lVy6Rm)=-|'KJ"rq%g| ;K 4'*Xa6WYgW\Wrrb1i|y6lO2A l}ru{N+ +k y@{jITH`Yu#$9ZÈd/Ӎ2$9+Q,{IDL?G#J`!?E;Ns109q~ĭ:&Ta]\X +s+Ѡś&1rɵ[\g(,OOz( =|H!!ݒhޗNAC`{|Fg}*pU¨`(|·xJKɑ)~\NEIvG>BU#D%Ne0b4)$zq +1TU` cC8VEE7;܋5w൴ m]3HI8xga\@0#z6zFU=R+;>X:Pm?4)64}a&-|Z6a+ &W(B>1N]g*EG]n6 =9sC@DZ2?ow&ŵH݈b+;qȽtuUAٿSA?IGC˲/| nT_GD2*L ېfU)jNW)dRsffsQ~+%Of"HvH0apǭ?vn3i~@q-ן~cŧ/U' XLw˭? Q,-aJ%e^2AHA~HS*aR' +Qڢ]⫃V):yNհh(dQe1nIY8*<I H8H3v{E1TLOm&3&fNw:o®`K mޱ $r~Ll:)K& %ՄD:$)h IY}52(ϻ10ۀTrvƩOܿ%@ on{ܽꑲ69Cd]]ԃ>癳.^1_P7'^3@Tv6n oc#A狡ƀx!VgV߹4F)xyM\f5Lgx*^= +G|Hym_])S]=م= B}lXe/ Е,'tuK% F=lBCm)gܯ5)8W wJCխ!( ˠv?a<;"9*u cT.T/1uz$M,Wd#HK6MY+bc 4g[en +h ĝ\$zc;PxC ͝f I,$]`2WetwD 5*e鷽r|wU8L)k:Yprf>E&h^w~&{nngbO>EhwƦ{LxxN9T6\l~紪ԋ ,'KQ5&Auf"2 ș#;?fupXG3][ojXzčF 5ۙ7GYh˞d^jG_c`x7K=]-߹5x%GY u}j.?[7Y@.>>ngAAZHeLx5Muݯ-MٔZD^e]]د oV^c\m7X}/J̤`vjOZ,w0pjաU*)xXY#I֥&h25۠d06<ۭ(V8e EskQ}Hvf]%6EN&ѻbwrPĝSFB`0ghkx%78h-d-A]jGo+}jj{e}eS\YZge k'K=|G80+n¹f;,v.9 *NGP ,y?eyxo"`p "ƁxJQ{V,@".}{ϼ1g˯ _;C$\تA{x?īBDj9 E!PƦ.y(4~.bC\^"L=nL*pd|$gG 1fr~K`B?W)Nq]uS.nkؠS>ZU0s(]e/|+OaxIt,&V5v#aATqخ5(N6: $aMt #*L,[=$a8!.2 &㲐k{ȡѢ[6~-ntc {_=̮$uITJc'88/Nm;t]> kcY'.idR$Dxz[D0 +.LLֺ#!)4)b$*)Ln~H[ O, ֫Ѧ7+Lf6iiFG )[&8L Z> "5)=# +~xNj_я~]S~#vAPrG<z0x]|ѝއ2K.znUI ǗdP NVi>I: z5vU;bA!ɯ0v mpr=[\̈́oY KEDO|qv%7#`͛e_ X=v*03ʇzѹU ((6+eo@WAkЀ#w UU4a/$hNzc+\KneA$֏:HYcSBQƊpϜd8D\Pv©~nNk^,{"P|cՔ!ɛUQ _9 +jnIg:; f:GMǐ繩UsX"^U%]+x!1vd41$>eȝ+)MލGVB2NzY՟Ȥ~MFbD9#%Tz8 o![zqľ" 5;>8JiVKS ΅7,'2oU<HnS9ѧHg=paBqv*D<79 W=|ˆ+83*JGH0aF9["B"E-LI_/vPhw&t}l+\rRcBR&eR*=e2'@͇=cQu8V~5kk9ºFg,FH倏,&LrJ&X0/ӗWs{ \PR`r-vߐ2秹$AE['~pMg~"x$Џ{OLO2|}hyxR:?PIQ-'\ЗHPJ^7kJQx=>6_6eLWEW抺S ~*8sEgW$ _zE8Nzcl10\Tvۓ64rD`'O!m@J&'waq}dkɐN~z }]-?njR +LB,4)KzeM0 +xnLX 9&RQY>2ݙ3b 粼MD-jX;zl}Ԗş;Ӣ4/n 6BkVtP;6 Ri$ʵ?*pNa=aޡ/I̥( +c&,*ajl hG&}?DA f)xҠFe5{:K٣ܻ^`.Q=nu dH}$Xpy>H)} +~eR|ӟEڿU]M2mW#F˛O[mވ~W:m6z:z"7QZA*9UomҒAS@+VqKlfH|uF4 c6kP{WSak Z8ASʶHXb@leC~ifWc՘EeBi +-YIlKѨ,ބ>iC@F[ie3!o(Bg;nPh0\kg+N%43Ns~6KsT)k&UΧxh&H=A0bc} /ƩcF{)FNʲuLlK{H}f~?q.ꘛ1IbH'ĝ.*/}|-1> Q6eW"UScY9Z 0IVCii[=11Pq*T̷6OwT7[=D+hrr9խ:O츤n\ >UA8EzRYUslCG[t +J-ӻ7<~RR6Q·A<,ƾOCU#XflkzĴٻL}[ NXL6QԹ@W )F% N Pw  +'X~=cVL=9R2uH(.Q d hJZk/pLfu2y~0-=9;IW*{F[k/}8d+1耖NxDݰef?4v/11,) T3Ϥ 80eƯ!`s؎I&Brj{ hʍ5$01q +oU}#r:XwJmCHA+@O7D6L\J.&%Xo%=nh5.̤Љ(|P% + +endstream +endobj +306 0 obj +<< +/Length 7958 +/Length1 1244 +/Length2 6712 +/Length3 0 +>> +stream +%!FontType1-1.0: cmsl10 1 +13 dict begin +/FontName /cmsl10 def +/FontType 1 def +/FontBBox {-65 -250 1123 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmsl10) readonly def +/FamilyName (cmsl10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmsl10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 89 /Y put +dup 90 /Z put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +-~_[vt UjZ0>v>v<+4$~V.P8Lv- K]7Bnr{%{-bZP @DfHU>ϒ!VTQg=SQI +kɬ!!T4! n9z_sXN纈m!( UfduoOUM4cc I>tBͧPoJ磷&|h Iʸ4lWWNI Gl]o%9E|8. #? 1BhL!3@6n4!?M&Y/m,pQi oX@#;[k)~6s< |eS6!140f?Ow0{2 -R@2vFȲ HApK¿Z|1 '/z[̉u_k5T,͌34%q[ $chꈅj1/ڹ,d Z@7 LWrlj7燡'gueR̪qIÀy']ۣl"5"=P!,=xKYx6wE`XmڄU+Hj3ldE[x 3v3/G֒972R30Fl@ n5Un4Q*[RHp܃?cvngFop(\CM;8D2Zn3MdD +t<*[_,.L;&a3-yߡ"ˆ񝐞'%ٸsFYq v~a#k6-;L]\wU*+;e? !AKxЭ\x7/Y@vrFzM]TY`!A/uibꬤc.L!wu iPB7RHuu*uau<^dG\" 6CYL 4AնJ@aR@i!Jg;|BE4,PVaIVEϪNZRf'˞!6j/"L W)_ӂׇѼÎ!Є:{MPDKTc$VrIeq>/<)r%[E[S7$m*LtRfEY9އD}ʿݸ~Vf{ZŢ`Vx,ȍnSsrXL-Ry*(&p_b0aVf]$S%yrYžWJ̣aZpxa5Qiv# knpipqcdɨ\MuiPX-p2>w ݰp{!m  dX$ :,M 1> !xHIoV6g{Bu'!`:dQl&#i:zU $@}'T|z<''L 1|=݈c|S[Dg N񿾑,p)*& L^/ekS;Q5Tk{a9|?dOTK"L]^&myG6W1 iF8"4:Ɍ_I`gGI1,c-GQ#KkN- &FiFP0Qքbo @3t{ꔵ9]@ŷaI PU,:qZDpuyBŠcWa% +@HP>'JkCUֆEio y4! x%n([id5gO"^䫯&/uNov͚}$ X 7ɦ(W)G7}ȠP,d{9rҫ59,Cs{|`?w"{t{F_XD-Db0嬎DMskE=zUKPnEuع`^V8R@,=Vi8s L(\K'ܖP;X.VG7&SU| xM򜲫+\s qr]'ijqu^!|~%Q9NhE NP?8 U l*D嵞+w#}ehaUW  >%O7`8̩ k1d1#qt$!c + xc]'R#|w6Kw=1wbWrܤ W,> Kd6`|C+5Wz'HhZZ'3zNQR,Dq&WS6mZ<7Angs~[ !P^).)}KXDɌTH!px6Pc Ƚ!~JHAB_Щz}f +;E5m0 x'˛yƮi-wKFb,oZtVj_څn*1OWp[@ᡖ4TD=rwV.55"yw&\𑭒QNPʈfSD -wϱc!;0zui7R #M3!uC?zWBOP{V(a{rɥgc%JF_ѿԞ6JVmJ90egdrT? fecm LY| +*5RtdZ_] Z3m6,iN~@Jdtzr,`ok(.EE[ēsj@ LV-sNdB 1SmnW}JqN":HaЍJ7{(ǏwRڰ*F&b̏k~H}mUc\Ӷ06'&mAx{?l6,))^F6I[, Yusӗ&"7-{9Hbr.F<14+;5/ǥU%Hם]Bk΍R*軰0q&x@%N/+Q_ :لP.[|HHiqIMXlxAvϚ*[Au: eTWuhb *a'5%[92+ѦP 7=lkxC15o(N&l' Ն` +xTeP fE6.yiҰXNvɩ(l2Z:D3 >c(Q"*yh8$I ZF2Sj}_NՉcm]>7qx}3@d=Q2e Ãs )p>D:Ҁ3 a82={dCo&]T)ꯄ[8˧4BHXl:\Z;3G u%J<ϐ.rv'|H`DZq~;&; r՟S.ieHUL:_YT|I iF᪳ ^ +b60:cĨ,P:/̟Mw fBXKpkK}5+_[uwvXL`u$(E[鬐a#k 7zqKDy%ֺ>M5?ĚvuS~C񬜘"(OЏ`$:@VN]P s*Ikי i$@p,C +&A%*ON9mq eRJH'}dPjǿϪQsW `Z  5ΝPW6q-ŀN[uܞнޫM򨇥 N/)+I>D5.eam +><98%޵3Pm/U>rۍBieޫ&Rhӛ-{~z1\0B.79IoQuZ[i61vKז9M﮵K l¶ Sƚ%)hG8}]zDC VȲ` j;|fQUq2>Og=dCjC'5L3s@T 3$H|6ɝds 녗5djF%dYF˼zyOy +IH"zx FzdeT=hc?Zfw)mI}$P빥Q7zCi@4ZܿJl-eyp͞y~n$2{\sx|34LP q诈+w(JgHJ.s']3p q* 9%TB% Dl+ 8xܨˢrg jwO\tZ?a+4ĺD$ՊGJi>$fv9웓j pf.tcs9:g>#CF_oXzGHp)/j&"ؖ o{9Iq ,F4#<^vG-׸ O̬r7PnJpi ﷼3OpL&}Ӎ*f9]m'puNEUse)y1BZRY~ k\Cs$ + +endstream +endobj +307 0 obj +<< +/Length 2312 +/Length1 794 +/Length2 1516 +/Length3 0 +>> +stream +%!FontType1-1.0: cmsy10 1 +13 dict begin +/FontName /cmsy10 def +/FontType 1 def +/FontBBox {-29 -272 1123 779} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmsy10) readonly def +/FamilyName (cmsy10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmsy10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 15 /bullet put +dup 24 /similar put +dup 106 /bar put +dup 178 /bullet put +dup 187 /similar put +readonly def +currentdict end +currentfile eexec +m;Bp6nFhB_Wq=v!!fJ .ۆS$-ˈH$aj`瘥'f<ws{inW{\;st*e +fq.+5WO!%Хw3x:ΖBvF 8JS6Ű& ޒfF?5N$&AM@br`hP#CE[l me |QX0L?G#W³g^njm xxőo}$~oKzo{yg^ZpV 7+Ŋ1u$ Ńc_8yŰUe;">ۯڬ!oWɱǯR-21jjַ|6i-=gЦ [tbMEkASy,IЁP{>{>N)))^? rnMiO\7Y쩇 +YJh`~y$Jtդ Qn ׬-3`9@w3$]j/4prx5eT7W޶I۪"K Nq-o`,W'kŖ9 +CX.mƪvƃ~lj N$u|B g\_] +9Te 5åp%܉I@b)L=[z/ ,b"BӚQsC!AToynBi8ҪJU]PNBHIUiwest>&GdMx) >hJL쵷 ׀׏6r.o:fbŬQƞ1{*? > 16RaO>5m/=!+xi[BV'H3~,dek#2[&ՐGAOl@gGJ:а⟥8۸pnGD- ;e븝փ5sjrγ%p4!zхaӅ#,x&\ukOxjo!r?C Tq%b}ۙ;4^Gs]8W %V&;܇?('=nIܶA9 UoLjF8o +h⩥]3R\| |X + +endstream +endobj +308 0 obj +<< +/Length 2016 +/Length1 750 +/Length2 1264 +/Length3 0 +>> +stream +%!FontType1-1.0: cmmi10 1 +13 dict begin +/FontName /cmmi10 def +/FontType 1 def +/FontBBox {-34 -219 1048 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmmi10) readonly def +/FamilyName (cmmi10) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmmi10) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 60 /less put +dup 62 /greater put +dup 255 /a put +readonly def +currentdict end +currentfile eexec + za`ќRc_ +0^%̄)ubo\t#}fIBH6}Rt7Qt뾧 w/e2Okz:KkhlՅe:3(SH?k̋7\C+wgƂ;;9D/P$<1oR%BuSoOg7+=hQ?j/>3ɥpΣW+K%_hB1 +qd1"XvkNCuT4K5*+T%lgcѢ}Y?)"*`occ/3>ӑNj +hJ=zZ`[УGCO(0A8"ctJ>kRmԗ8畜B-'O~Aaz\X"7zC'ͧt2&qQx<;Ej5>I:Ck#*cE/& FeCs"Ɋ>]"1Di!0l#Kr!b/w:lhJ_m.t+W؇dRI^:ra Vy5ݽ;OgB0G8cEKV*@c 5D[XMߏA h޵K>y8/,6$Un _pK9np6A%Y/ֻiW3QԢ:s!xF@? EQ]NjV[G?Ӓ$4 Z .{+1͎<8aRO%> +/3'X~À%yZA(33 Ch3tÔVt{ˮ+(Em*Xzũ;dŪ$%3||;?l30j=Z$$K uVխ,B&Uivrx+:034}xтKqm+j/v6VȸPB_l΀ +o&:+%|:x JZ36h'-MbXV5ߧd36?2A6) rj!6w坸0Wʃ2D^S e ID? + +endstream +endobj +309 0 obj +<< +/Length 2977 +/Length1 821 +/Length2 2154 +/Length3 0 +>> +stream +%!FontType1-1.0: cmr7 1 +13 dict begin +/FontName /cmr7 def +/FontType 1 def +/FontBBox {-31 -251 1122 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmr7) readonly def +/FamilyName (cmr7) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmr7) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +4e +Ounۤ=hz3Gweeħ8~8)%Q9rOq7/pdKY s  9v1Fu<;H*plOժX>P;oxf{1*Y2ԛϗ*4';Ĥv n}#vAjUL6[ 5@Vܹub'Ak,[Gѧ fd~8mWyL5[(8i;ݒKR>yi dpIBW'H<0r\:ߺ#p R\>"Z0NsV'x +&^Y7uub/ƻnG@z썪,-8G{PS$X^In e-x#70Y,5n$:;Jz0m58،_eV>/5T74i\OW3;.Kg~\qh0-GXҺ8 Nkd `חK ^Jo\2;%X3D_/ð7^"6>S ֘-J>3Iٸ +F3 X]/Ѻr)E/ZJ53= 7NmO'R +mƸQmZueUTד26(wVY7qhf+ಕF.ڒ0cz(%ɮu"X >:̂ B|vs4~H;аJ6HH괭!zA. U{!, [a^'A-$= lO<(ȄIwbdCsxxB}C26UGծ#MY`|) + +ߒ9G$PQndΪ.CѠؾO;P2h/ӓ*IQePE>0}f_!h;BU l4՜c "a + ߘM.ekEj:<&%`?iTJk]…OsGE/K>ߤde%/(J#2M[j~'x3fM$c7"BUp/J@ٳD#}e2$qItT$OVH. )rn!799̔~x>vAa &ݭ!ЄwzLB?!_ؚRGړ*ˣ 6`h[x\27釈AOa#M4O_@Bqw sՓg-]/;ѯTj7ku}Cѩ:ۆo5}p^|P|JA 0/* bkCqD[-RTl& +) nrH!s{؞IS>U>iܮB=sI]vQ2h(//C|vEl88uKTMu0`d!-罔r`Xͩ?B2@?#Xȓ4[8i4 n·kdF2@zEʌOSa@'x:kV{@da86W~P>im + +endstream +endobj +310 0 obj +<< +/Length 2964 +/Length1 821 +/Length2 2141 +/Length3 0 +>> +stream +%!FontType1-1.0: cmr6 1 +13 dict begin +/FontName /cmr6 def +/FontType 1 def +/FontBBox {-24 -250 1193 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmr6) readonly def +/FamilyName (cmr6) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmr6) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +\fƸCL4>M trP32)ӑI(f̚6|J[r #S'zM&&'yC U߮X;LJr +9Rl#LnjVY}uT D?6dSsջ`@^c̝| q7[He"RXg + %&PZ%FܖFh侢 MRfQ[C/֎O P jlD[:.qM!ɗ%S~d?MN/+oP"5|=TiY>]\ۚ5u[Հ0eu>ʳ{TXwJ,<5`إDlӑT9^Z>gʍ+>,s_#0Am/v klnV K(\I ރ5n]zHM<jCE,I'&YPLb$.+']N1*Zk؉ +,0姗i/-YFRb$/9XJyӏGk)e+?79(8>?>OSvO4 c/.ΤMo#klb{%h ߣ2r'p[Xhjv01/J;'%7XKTc~ $fI%LHVV;jKS3R4_ҭJ;O>5A4Kr+3]  QT^`QPo vgM/zW`lQ5-9hzQ +5D#"uEȡY X6uM~iuaqvmRtuӬfѹYP֬Qӥk1ٙ:izפ\hu"$A=m S5K%Zݗ.U%mİX95HJ%`mؔ(.8DIBg"$[M̳*yFzK_ҿK5BAŖ֤IۍQ66/Y[Q3n۱W2/_A/LBR^2lUf +(ptv#L/~o>]9]9M˛A$-kJɚUJPv>5^9h[0c=8Rijh>gxMa)=<'R$ .~͊'j-%`q`|SvY2GS͙J +ih՜1%'eV^FGP:/UD"f\)&O&0ٴjt`|Hg=MR =jqak[Tٲ@ҁ :[-Rc`r4 #kɛ&GSꬑ7xvc#w\VDw.OhLTˣ@_}hlErFE I$Xښ.Hs!!%2JI8gՊaE)rZ~l/ Ч !-v]ae>+:ZT9;Ҏ,7EJ-Yn` +@UF|LR(RczhZ-6hqO3S2ﵳz/<^<5He> PXFy녦ˀ!M{8JX}>n|9lLجrV}<*Ff7|=>s)YA;Q\ZGIj™ ֺ18^Ba ~ +=/ZD$t"P_\vJuz1'8@jJ t/ݷQURRxFڕ)Ex}XtI r)g(ʌ5&[lE:T*6eZze^2 B-ӮwfswL^ xVYDJeb 7ztD OHLm*(e [oԍ[EwF̽ZrJP~wXqI/eP8z N[$ w + +endstream +endobj +311 0 obj +<< +/Length 11808 +/Length1 1688 +/Length2 10118 +/Length3 0 +>> +stream +%!FontType1-1.0: cmr8 1 +13 dict begin +/FontName /cmr8 def +/FontType 1 def +/FontBBox {-40 -250 1070 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmr8) readonly def +/FamilyName (cmr8) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmr8) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 13 /fl put +dup 34 /quotedblright put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 59 /semicolon put +dup 63 /question put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 87 /W put +dup 89 /Y put +dup 90 /Z put +dup 92 /quotedblleft put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 174 /ff put +dup 175 /fi put +dup 176 /fl put +readonly def +currentdict end +currentfile eexec +K3!RN+ cC +ErFheİb6?̶G1۾Q@,܉I@j<;)?=5NˍmqMY(YGfۡ,{ F^9d}6@EV ##~G|` wmf_1Җ#0v /ƱJ{fkre*22mr̊r(dA~녩ge +v!`V9 ]Ҕqq~Ov0C[?~jɐq^YҨnws[h+!LD"mۃ|HBN`IViuIMWh28w[>?ŰEYjm2p5yf4ULdp191Wn!(lp]Z7iE{SDPe(+brٰ.{ H79 _RVSTjbV61^U_k-ࢍJ|<R3HWe彍- 5hDtW<壊 e*[LVe += = ^~d:n熅BLC*5,+7y}EKN/ <ҩzf~fFh6&}z"5$Jc]ĤοO7'k6Zl +6S<(jW~21E=Z敔Wx PGo( `4V-Ťg:x  5cmCrK^`Ųb*"Mt wg4+W-A.۝G}.o}vW I:k[)&UN,'±%f,e\>PόC+"z 7&/wcr@GAFa09!&لê&.{r=MtaE9ƧL"AY/Vx +[( x6ԌO)''wThven 3ok?ӗ{击V脽[I?*&XUIVW6v *W+ rvdؕv \[EX\;P>}.i2mݩ&a,e > ~W*xpDJ >M5|n}4އJj2Tހkd^I+qPRڬ"׌0LQ>&d PO%'AyX>l0S`9Agú.8 +eZ2:Xdt+F! +q q 'diV+nVV-[[WpK:[d`$X?N^*!Fρ)}q7NL4_[<,Ȟ*!Nn,w=}[!HLPmjtďDz33.KsZ>VO|݆*5asEpJpD_l7y^C;鸧06-xZ?SXSE!=OKZ. 8ƭ8$.b͠WEVPibif +bOWx">nu=wBKDμP37L'fOɆq'z+9 5:!+&A V o=$/-o_Mmóq 0!;q!ŦFևK{VBwCґQfO*Z2D4@B3ov>>%=UXkY痏yw~Pp\Xw mBrAq䬙HXl&lSEz`%omi¡zvDMi,D jzF Cpp3NW8k۽|n瑄ݭ (෈ ~TjcBËEQQL.YoN VWM<%nBƙG ӗGC6ۖa I0c hjĂVƑpYSfZ kUz6sᄡ'TTӥD-3S)2R"PbƇ>0 o'q,w_/Hęr$FIc%NAZyZkRҷќH=fC0S +_ Ub5c~1)&Kdj뷞^NC ag!:}7Tޙ(M*:&^}NT>$Cؾ'ZLqu؄˚y/"`+^tVC!TF +{ͨZe\ crօAVHB}4ay+eNk˝n[i%t!a@/Ur_սQX.p~NzncU=  ^h"NG2!1_:=K[Ox%뗶_8šOÞॻBBm'&?.#ߟ)6ZNQ/(/DwD晋6;FY~<=CZOvejeI='\itpS!2#WPd @Ei:F;Xe)Al"nגHR#csr +ǂ%BLd$r*WSiWA"KMk*r9k(<,0gˡ:j(F` JkIv<%gs25i:_Io&`J12$"Si010_xNl\w`_i6$7Ȧsk^;s^rjl!xwg|6tI.G-vpn4[>bl bwhu9 =x?6ㅎ}~wQenGƉolLjѣo7WY3vr=Jזk`07t2'~͠I}C]RSMa: MMciN)!̐R-FJ[HOG"HҺsJzP rGF{Zbbӷ:I}z:X"Jit7qP#MF +ݬAR#=|lvښ:g0{).TD^*_%oZ5=w)l ++Dd-3RY72 +1gv*|?i/^󸪟)ڈ.Yih"nf[΃rrdPH:7fҷ; )1IS*4~a#ҷ1,̌ a}6Vu}ݶ5TJ݉ju/GMXO7@gZHl /YI%FJ +4@xK!ΨƊmCddVg\pnfk-^+!1GWq2I0 wHBx)ʉ +xDΘ?sQt .ÆZ0؃d6rfjcMY % +6 ڹx H0>='*7.;]e8ToX=[n,4%ÒyB-L4Iu#,=%wlrViqa;}hp+ӆ\vs6+n֊KТ$#ߌZN*9IP/V+EqjP`I&M7Š}o\KdᬓCSf Ĩ=4zt[ x ^n"b.?ox:u˅됌֣] -{mNTqzPpئ몀E5aNfI1k},{5V_3)6Gs RћiC$lcv@XC(D:_/喍p(Z#l_3BQg@"-i +WK]Sn0qpb]bhSaiC.Q3gj _(euBo!T27*vAPF&БŦA瘘#4*HA庌$kǛ&RY^’{f><Jq{L$ޓ jp7s5)>JgVH'rSHŒ> ԇ1љduǢ3s E3 +'8L" ʦ =en$t am==^Yаh. +H'_ٴxv۽3)r'r UtIM]&~´)8D>dK6n6yO/E49)PŰP ް}G )s)jZfWzfcP~VzĮ;:B)*!'D_IU]POHNE frӃkX,)&}iDV(tMy=NCNfgOcw(S\ab +йXr˻Ԧ H辅vq ,Ʊ&5nab^:-Qǥn cِ[fw,p7A_׽*-J~@d:JZe0e~(.Q0ʽ %ŕW"C>A3 pnۘ^'d֊d4 Q]XrWPl׊RK[W1肅B>“@v#W K;&,joٱ'MF^ߝvDwgytq^<4mrJt0v/61!(2J (d[@*4HDgT6(qdI I-`yLv鱰Fxz\->62C'ʛS GF| +ҙGWګAFW r`do`k +Ǒr՚d,Bz{NAÂ3H:Wcd(LT7$Ō?jkfMXoqPqY-X'΀/s%P $*,Zb%˯swo9^9 9xNϕ%Ob_V'UHf֡d}Fcg-R޹t3#BD*MlEX#3F5VB39T6'?k "˹ tڍwfY.6Cwt[!qiBꍔ UK4{5~p]h1zmoBmU08G^G +\lnZ`SW/> bM/ʨ3&F 9iT53'cK!"auQ-8fǕpb,V&T4oyf=oׄw-2YS(axt'!. + zzE4\~G "&S_kU8(> e 2aRo*RJ{V^`]Zڂ\6/L:L\[㽘+U\aUq:NyJBht^7.V^:]&+ ˜?`ņbۻP5zK9 5y_nr9 /q~s`g=GIV1Wk')ZCg3)taXC(QU#pVJo.b#PW㙍 '#F$켶M9g nteGGʂr?2`ൃ[i ;ㄝ,}*F"\Tx| کg^ vW23eawtZ}/|gWA#j{X-f7n&c*!6جDz'di ١*{q]ȵW~avb +2%'aZRGrnc̠nXJp[ \4AqIBt1`T_ LUbCZz[N/җWS7D񏖛 i5ʆ ЁH +07"~mYqW:! ^, hY&HLiOSEqTX _TAlXmXKe-7:lAo(WVrT9P] Ni:ؒqfu[uQ|%p5CþkeLf +N VTa; DVƻR7[zx9 w4s%lkæ[ͱĺ2H3`W(a"Զ2V}>B"'s˸4-'_r뗒.V nxAϽV<=7qW+slĹ&v DW3=#xFmJLuu DW&F ZD 3(Z`EGo-?b֛vj +9u +t4zMڙ: +o}8Oc[ 5 kOh"m{WT#1 1C'[ HɰOj,{̈X͜GZfi)qzF3=KoƲ9Qu_beU&0HbyeJFW+WQfŲ\{3@-W2%v_/,R!^+i\sW#9$sYýEu5ۗ# +{sխ<8hژ7 -Bl1v +\UfF@3&X A{7#Px1u ~ 핪ϝ+#X@7mv#3'LW,KxUC ==@)Ix +{NErKC!ݞ"( GޚA]e+4bM`j @%塉qjlڈERe: ,dsVf(g,LVnɮmcᰕF[<(k[OXC1&2vخjaf 8t Gm +Z>L KJ[:<}*dXVd4%\m{i*,gRW`(Τs'X!~t7-pl'1-?RW4?j(+f$)yMR *0$q2zoOM!3ەw;nQ$-^8X +)QGy7.3*DZh()E3(FB兂ix^7DPVG71t 7nv9o[, egȤ{T%*s?.tٸp2<(hV s&b3auXdfMXakPˤS1xȅR"$`&G}}uO + +endstream +endobj +312 0 obj +<< +/Length 8903 +/Length1 1287 +/Length2 7614 +/Length3 0 +>> +stream +%!FontType1-1.0: cmtt8 1 +13 dict begin +/FontName /cmtt8 def +/FontType 1 def +/FontBBox {-7 -232 547 701} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmtt8) readonly def +/FamilyName (cmtt8) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmtt8) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 51 /three put +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 101 /e put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 111 /o put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 121 /y put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +o7?MBAvY*:C]G!25'nr4m>=% J“z867~!E}/jȂ?S?1DiLh_9R[Vb#PuF~ԽlCÍ܌ jIUvDIIbȿ^0#A"$">pU߽JXy7L/B +m[u iyS5Ra_'!F5O<@8vñ7 L}ޱuj~ًUj,/6 ׶0z hl̀=W .* ,u&;ҖQE9( Tϙj DvC1T% BulLuȿVA=0 OI+5E/z)xBz'~k#יE!Ysu7aDR@-zN륡yQsuSڄ`7Ϧw_ѶXtIz<"E ֛-0Nz+vzZ;>}suvj5L[ͯf>]~ՎW +jѬt/X%f~_m|=~8d+v>,=#O+xb_*w V<8lqk@c-|;3jE'%UpUgeS)>?Fa%MȠŝ?fnD"ru4:[X 3@cfNX?%,RXG`sVWqBIm.湡΅`>Ur#1y΢&ohVhY?7EO ADӊQ%d5yܾ +@Jb$8rFVv6ـbt!10ӥ_r/_tR(ńYW6)Ag +|^ aZ +Y_-jwܭ:iTt$?$Aq@򜐣2 LB`>Mn\ϧkEΓtBhɒJc-J&bnAx-@lΧR1 +Nm_NHZ5*ꁃf ڍ ]cW\04K\{c!D~-_vyjn^ &2-۰e3d,mn.XCŠ)43}=wuqc[1pxG]pG9ׅXJ:f{WyC xi+xm\9_* ]S +(a%.[g!\}MZ8rec>!1J[N_L%(bN^~'4v B jb]-H|3Zg)QBFVٜqhS$-lWHF^ћG=U->n;2闧U"Z|Y;8ɗo,gpwR(:+͢B5Efk9*@s 1ށH"I,&A,}udXF {T +.,SuF} +?x6pH#&9h?GLUX A-)^0\ +6Wei Gt &2ڨ=m]쮆'RhJ \kP[.$DG>An]]&P{i#` quj'z] D-VM +R7˥5l@*>Dk[GHLCOXb̈o\G$C&|sk'QN$=))!ps.|X%.ǟ:?G +Õa|`NN +RIKauFyF<0 X$86 ֛eB.u6 - Z.pPnu"3M>K4!*[n؆qxL;tf:D10-@k5En y3yg*+tkC7sq\i'mȰII @ & ]XK +ZTu~!DFdꩬ9o^/(Wܸb2+67XpƝ)E@V5-E=ZXp3\dTsP ݼakVpvzf> 7# ЦZu(Hn1r&$({Fwx-]s]@-y# +~fhGviS %0\$BfBfs[xW?D|eet{!=BIVrhD8SU5m&ؑV/52@`EWzBKߣ$"?t +̴@o@cku&U[ky\^R4޾#T_K lƷEHG:t&&-b~ϢG%z.l[*(^;Êf)aÑXy:ۀqj :jrF8>5Pp`HjMG$?Ջf3>Q'G`GeVce*Ƣh;ǿ}$t +l^!{[36lԩ7Zꮳ$Q@*'(qTѨMG"rJ NqKjf=L{?JSRELre&I8lSmOFF6|ÒwMCd irs[i_qoP6i7x +!'L |˙*ΩB{5ԃz +IsaÇB,0d.z͞wX)gڅF,Dx8*W;Ǭ9a$ܕk8ha5 urJ13"C* (ٷC&6j|ᠫؾV̼ޜ +g o۠|YRHkQnk +F .ʝlR_Bs,Yz`)+>crSkw9@䶵RMxYW09frKXs!n%$fCp>#0EkM-X-*@2Wf_G|1WfYkt!)xg6e,[Xʙ +XMNjW-WY1Sm?C=/KY%͢1-mbE"ɟoԧÆ^mwf6e9+i#,}zL5SD3O=:cyT,C,h;Zruݯ~4͍@G^OB$(2e%u7t&?sLW4F+E 9dK\zY'@ȍɸ$-~VXIx2dҼqH =SPKؚw3\\6{[k""qe3fkK,ǝ~GГ DSdZŊ*Jm % JoI!CV|Y9фamFvc4 ǘrzQLw{G'45TpW4*q % ZG]1Ş Q rÙ͜A/wm;j%=1#{ޟL_({`?`>"cNrE.sCkxdqFut_i- R|QכC{$i11rgW_SvTjZWzC d{YjRzմVsĔizoĉE±y=kb9Ɛ%S䠇#(}P˥#7~{ٟ@ϱg]TB*G^aO$)ܿQq͘)~=dFYЗwͨxWSbv*~8}9Y]{n,kW0;)O wuSknT@‡o7S)HB1׋FFW A%*25r&J8J_iY&ֆIW Y@"05@L1懱'=*7b'0^&h_ R X\IC% p&lAcc!OmbmBKCv7Ut(x1K<>BT?狥@;H<$"=n`@U咯49`vhCzz} ;`UsKUl D )8MtK,`{r9p!j1·v~x5y`*ߵk֩!,~ !h[9 (~zӿU(f_0#eb Ze[vd?6ӕ/4)d˥OݳD-~_ $f/,e^e}PEP32󿼁e*$2{%cU.P$GgDFֿwض.K̖2# 8Gڢ&q$STS@q)J9kO0 LWz(ɣNn̖aY靊L`*vT\QL+;8x=\b gŲḄ̑3'/dv¶xZHt`׈IO}} #Y"jv;[cpp[Oޓ+{NȎ:&)hf5N\7wb[M:r`œdgfeXH0g27bde"b)Cȿ=TmG|lcن>%*m29^t +逰KLuT-[fZ&O>rpdf.,h*Ju_=}`h>\83_ui%1P`']:^߅Ht˄:ϻ\:=3K&WԝQ*<:'Lbigv`oȡSRNL%A`!>L"t+O) @? ` ]0݃?|*>mnO,2GGi)}֩._ |F;.k Ҥr4>512P`v;5NoJ (uwrv _ 3/zL<=t)vqU;?$tTi4/Dv)E[ ?[$kq~EP N;ȉ{bg#m%3]4YI+^AUNFȋ%15!6Ծ} +m sH1x#!Y3& 3j,< U_8~t[ubU; :Q?;߿}M_9X na;6?|:;ilr 'Պ}C``n8C͵(I56EA6hwh1cj/esG7sDuT^ɈqN?*%%`j ;AhU+ҙᵬ5\.QS`/1MPj>9…vBfzձ"9xRPz%<{YhK"A z= FQrnF k/] % +@@,BA̺=l wy'}SrzdVOE;իm( F55S!H=8ev^MSsgOI&ˁj pWV?xb&'X*`1ޝՇkV炘/ OB`6WdZ:.;bFv;n@}+ +,3ڧtx+S<Θ溺}$=JzR|UD򔋛JUK5y^EQF؂XhLwb%B}:j-e'WVU@hP|fV7=ziEMW[T@=%¬.MMX2>S{=DYD= 00p=6#! _ρKKU?`vNo(KlAesؠ/YMؤ)1ʙƐO^%"Հ-`(3Pi + +endstream +endobj +313 0 obj +<< +/Length 2513 +/Length1 768 +/Length2 1743 +/Length3 0 +>> +stream +%!FontType1-1.0: cmti8 1 +13 dict begin +/FontName /cmti8 def +/FontType 1 def +/FontBBox {-34 -250 1190 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmti8) readonly def +/FamilyName (cmti8) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmti8) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 101 /e put +dup 114 /r put +dup 118 /v put +dup 121 /y put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +,-6W1ApŢò}]] ɦ'7 jga@J;|V_']e# `{rTN +[B_,>NoΑχE_e")D|xB̬&jbO\kYYLLD0g'\E?2RyĻe^s=y'IF,=rI(K_s Wڗp +nei +QRRWٝd7]9}*Lbdd%_-95bfW~[ܰ +M9hBq7} (r6|1T`'.Ust1:\=LXYg+|(Ymayg8ZxFI@-G#3WP_: aA֘j^^"KѦ(P9MeS"I(GcF[keُƾqhWs`VJ2zOLF :)iBZ&%-#$PeI㢖{6;gUK4 d-t{Fkg,JdTs-Ax1+Kts,y\o +v#+xMR z/W[Gwg5?J}4TINV43s Q\)/kY\7߶&62.oՎgn,G7H只w301T\ պ:q֊ؔ]'j}"*L+&_ZKcENjo pcXY=8PNI+A'ӎKf$3VLyYң.yі)z|S[p3D[8EٗcΪyv-+?wY*0ڭ=~^>5cDv{E0mIJ&sAj1wph^̍>1d5*xf8wgde3V72^)X6 Xrw7[FZъځxf~,vk^37|*7ZF{xiTm4]t%F qYV.F8OYeá6 ~0f) \7ǖa6ZzS5o*8 +_apq"ϔb =/)~Oz` dm6IP՟aas4`ʴ *r d=*O)p3On#J$|4R%1ogLƺVAI~)m(Fo&ߠ boF*u2/ca֝ W! 9z\R ͵<y=MV}Yk37&Gܢ)Nqp0o\˝ݏTQhqrP o, 6:({K'! +uS2zL-$.U7t3 +1enʌE{#TKإ=Z& >{-1 + +endstream +endobj +314 0 obj +<< +/Length 4481 +/Length1 919 +/Length2 3560 +/Length3 0 +>> +stream +%!FontType1-1.0: cmti12 1 +13 dict begin +/FontName /cmti12 def +/FontType 1 def +/FontBBox {-36 -251 1104 750} readonly def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/PaintType 0 def +/FontInfo 12 dict dup begin +/version (1.1/12-Nov-94) readonly def +/Notice (Copyright (C) 1994, Basil K. Malyshev. All Rights Reserved. +BaKoMa Fonts Collection, Level-B.) readonly def +/FullName (cmti12) readonly def +/FamilyName (cmti12) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -133 def +/UnderlineThickness 20 def +/Weight (Regular) def +/BaseFontName (cmti12) def +end def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 67 /C put +dup 74 /J put +dup 84 /T put +dup 97 /a put +dup 101 /e put +dup 104 /h put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 116 /t put +dup 117 /u put +dup 255 /a put +readonly def +currentdict end +currentfile eexec +3hqolcOP {I6Eea3Wwhd3 Җ\^A )tJFcL?"YEPc'HvEfwP!U9P/@MNVr;wSsMi`F`t._S39Q+9 Jn\FSQy5՝#b2)i2=0:k[XF싕3wWz3g_H=7c ӼzR# [ m uˢpi4܂aۀBta + 'Mdңe 3*ob84ӣYUAY_>piLl]{hV( OtPc/Cpc>f6"2nfYSz@A wu J(%^ +=\?W<Ìٵ9`<|qZnàELύ!NrEo:7[' T QZ*_5A(f  ryaIH9:oH:^bw5IZEmai ߣe KX{*@ qރ{ѷJW86ę76w5߇4:{LT ~] +7(s>un\BUlja܁!^*fo؎m`b%R|rQH]bd ڰc Ǽ;(M)@k{xVw }*pp|BIBQc}p5o{<'1I V:&0 :G8{[n4ρfoo< zu>KdN]wpkL1p6j<_ gfu՚!!a#?4#R_)|/Z͕ӫsBo)3 Sa8mե6\s:rZ]r&r3*`+jAϚр=xu@$wv 2SO@li8f阮T]xIv^>梋vͼG=@hB<.Cv[VFſ'#r>m`|zS-. Y9TyVZ9- \ŵ|CE# Ny>>C;#;dʬpǡZ-4)lQXW3?[/21F?cL,^i5^*iuA\!L1ߗ2%Fg{P[] ?|@=xobia$pFh`ΪYF̈́ +@\mԖ; '._y"t7Pń:Zz_HEQ['*-v;^-{uY A )%|̱;ЉjdrqTS6eK + XP^A+G[![ZC^ ??3rq$sϥuӭZҵE$lZˆsVK9K&6V̿@RD­[-oNwr_؊@ȜwŷZ%>C +3.N8D`En8iCVAN K~h:4s<ضkLYQi" H,ʞHw‰-.K+P)'}׍ftWHNz`2}rA +ll `#  {(叇_֪82>nM汒׎iUysaGu}(Vj +Ia MEזdUOҴ h޼i +e𕡖8#]QH+ z 3XZ =yzQ(!D7cT48|:~@o+aw]1k fAńj fi3BUUMyq*CL'/ +_#pJTm?^6[W. Nocԫ+G&ћw>UbQ">Nμty-:PTc FͺQp2Ա=3ZQ~I!V#.ցk< p$jƤ(?&#$Ssqێ/@#R!3oEyfMϙk:ijҩ[U%=d"- `[-=_{ J50ԑ?1U]q6͔M#_9n@Hj{[88@Dwoy Oire$ң?|q%U<=Ԡ[3At +>#Źܵe #Pl|('Pu7 "b1V"n9߀齲y2aMW/E֏Ȩ7fUW*pLA!^mLF$T&bk {gT"66H|au]yj!գ{C÷y:H慸u- +GS@l/ i_T.5/#'x!sITjԷ)AR8NS]Ga|&&SG3P&#4<Ǿ#Vy`^f + +endstream +endobj +315 0 obj +<< +/A << +/D [34 0 R /XYZ 133.199997 579.401794 null] +/S /GoTo +>> +/Next 316 0 R +/Parent 262 0 R +/Prev 287 0 R +/Title (2.2 Setting Up the Files) +>> +endobj +316 0 obj +<< +/A << +/D [35 0 R /XYZ 144 295.481781 null] +/S /GoTo +>> +/Next 288 0 R +/Parent 262 0 R +/Prev 315 0 R +/Title (2.3 Running Z3PLUS) +>> +endobj +317 0 obj +<< +/A << +/D [37 0 R /XYZ 144 381.401764 null] +/S /GoTo +>> +/Next 328 0 R +/Parent 289 0 R +/Title (3.1 Creating an Alias) +>> +endobj +318 0 obj +<< +/A << +/D [48 0 R /XYZ 133.199997 390.281769 null] +/S /GoTo +>> +/Parent 289 0 R +/Prev 329 0 R +/Title (3.4 Incompatible Programs) +>> +endobj +319 0 obj +<< +/A << +/D [81 0 R /XYZ 144 556.144775 null] +/S /GoTo +>> +/Next 330 0 R +/Parent 294 0 R +/Title (6.3.1 Help Screens) +>> +endobj +320 0 obj +<< +/A << +/D [82 0 R /XYZ 133.199997 220.624817 null] +/S /GoTo +>> +/Parent 294 0 R +/Prev 331 0 R +/Title (6.3.4 Loading Specic System Modules) +>> +endobj +321 0 obj +<< +/A << +/D [83 0 R /XYZ 144 267.641785 null] +/S /GoTo +>> +/Next 297 0 R +/Parent 21 0 R +/Prev 294 0 R +/Title (6.4 The JetLDR Program) +>> +endobj +322 0 obj +<< +/A << +/D [85 0 R /XYZ 144 385.984833 null] +/S /GoTo +>> +/Next 332 0 R +/Parent 267 0 R +/Prev 295 0 R +/Title (6.6.2 IOP Input/Output Packages) +>> +endobj +323 0 obj +<< +/A << +/D [86 0 R /XYZ 133.199997 245.104828 null] +/S /GoTo +>> +/Next 296 0 R +/Parent 267 0 R +/Prev 333 0 R +/Title (6.6.6 Multiple Commands) +>> +endobj +324 0 obj +<< +/A << +/D [52 0 R /XYZ 133.199997 419.561768 null] +/S /GoTo +>> +/Count -3 +/First 334 0 R +/Last 335 0 R +/Next 327 0 R +/Parent 270 0 R +/Prev 303 0 R +/Title (4.2 Automatic Commands) +>> +endobj +325 0 obj +<< +/A << +/D [64 0 R /XYZ 133.199997 279.184814 null] +/S /GoTo +>> +/Next 326 0 R +/Parent 304 0 R +/Title (4.4.1 Command Acquisition) +>> +endobj +326 0 obj +<< +/A << +/D [65 0 R /XYZ 144 536.224792 null] +/S /GoTo +>> +/Parent 304 0 R +/Prev 325 0 R +/Title (4.4.2 Command Resolution) +>> +endobj +327 0 obj +<< +/A << +/D [58 0 R /XYZ 133.199997 399.641785 null] +/S /GoTo +>> +/Count -6 +/First 336 0 R +/Last 337 0 R +/Next 304 0 R +/Parent 270 0 R +/Prev 324 0 R +/Title (4.3 Other Z-System Tools) +>> +endobj +328 0 obj +<< +/A << +/D [39 0 R /XYZ 144 656.201782 null] +/S /GoTo +>> +/Next 338 0 R +/Parent 289 0 R +/Prev 317 0 R +/Title (3.2 The Available Commands) +>> +endobj +329 0 obj +<< +/A << +/D [46 0 R /XYZ 133.199997 305.104828 null] +/S /GoTo +>> +/Next 318 0 R +/Parent 289 0 R +/Prev 339 0 R +/Title (3.2.4 Transient Commands) +>> +endobj +330 0 obj +<< +/A << +/D [81 0 R /XYZ 144 401.344818 null] +/S /GoTo +>> +/Next 331 0 R +/Parent 294 0 R +/Prev 319 0 R +/Title (6.3.2 Loading the Default Systems) +>> +endobj +331 0 obj +<< +/A << +/D [82 0 R /XYZ 133.199997 314.224823 null] +/S /GoTo +>> +/Next 320 0 R +/Parent 294 0 R +/Prev 330 0 R +/Title (6.3.3 Removing Z3PLUS) +>> +endobj +332 0 obj +<< +/A << +/D [85 0 R /XYZ 144 256.624817 null] +/S /GoTo +>> +/Next 340 0 R +/Parent 267 0 R +/Prev 322 0 R +/Title (6.6.3 Public Files) +>> +endobj +333 0 obj +<< +/A << +/D [86 0 R /XYZ 133.199997 479.584808 null] +/S /GoTo +>> +/Next 323 0 R +/Parent 267 0 R +/Prev 340 0 R +/Title (6.6.5 Command Search Path) +>> +endobj +334 0 obj +<< +/A << +/D [52 0 R /XYZ 133.199997 344.224823 null] +/S /GoTo +>> +/Next 341 0 R +/Parent 324 0 R +/Title (4.2.1 Extended Command Processor) +>> +endobj +335 0 obj +<< +/A << +/D [54 0 R /XYZ 133.199997 654.5448 null] +/S /GoTo +>> +/Parent 324 0 R +/Prev 341 0 R +/Title (4.2.3 Command Shells) +>> +endobj +336 0 obj +<< +/A << +/D [58 0 R /XYZ 133.199997 274.864807 null] +/S /GoTo +>> +/Next 342 0 R +/Parent 327 0 R +/Title (4.3.1 ARUNZ) +>> +endobj +337 0 obj +<< +/A << +/D [64 0 R /XYZ 133.199997 499.264832 null] +/S /GoTo +>> +/Parent 327 0 R +/Prev 343 0 R +/Title (4.3.6 Other Tools) +>> +endobj +338 0 obj +<< +/A << +/D [39 0 R /XYZ 144 220.864822 null] +/S /GoTo +>> +/Next 344 0 R +/Parent 289 0 R +/Prev 328 0 R +/Title (3.2.1 RCP Commands) +>> +endobj +339 0 obj +<< +/A << +/D [44 0 R /XYZ 133.199997 335.344818 null] +/S /GoTo +>> +/Next 329 0 R +/Parent 289 0 R +/Prev 344 0 R +/Title (3.2.3 CPR Commands) +>> +endobj +340 0 obj +<< +/A << +/D [86 0 R /XYZ 133.199997 654.5448 null] +/S /GoTo +>> +/Next 333 0 R +/Parent 267 0 R +/Prev 332 0 R +/Title (6.6.4 Passwords) +>> +endobj +341 0 obj +<< +/A << +/D [53 0 R /XYZ 144 358.864807 null] +/S /GoTo +>> +/Next 335 0 R +/Parent 324 0 R +/Prev 334 0 R +/Title (4.2.2 Error Handler) +>> +endobj +342 0 obj +<< +/A << +/D [60 0 R /XYZ 133.199997 221.344818 null] +/S /GoTo +>> +/Next 345 0 R +/Parent 327 0 R +/Prev 336 0 R +/Title (4.3.2 HELP) +>> +endobj +343 0 obj +<< +/A << +/D [62 0 R /XYZ 133.199997 295.264832 null] +/S /GoTo +>> +/Next 337 0 R +/Parent 327 0 R +/Prev 346 0 R +/Title (4.3.5 Named Directory Tools) +>> +endobj +344 0 obj +<< +/A << +/D [41 0 R /XYZ 144 483.424835 null] +/S /GoTo +>> +/Next 339 0 R +/Parent 289 0 R +/Prev 338 0 R +/Title (3.2.2 FCP Commands) +>> +endobj +345 0 obj +<< +/A << +/D [61 0 R /XYZ 144 388.144806 null] +/S /GoTo +>> +/Next 346 0 R +/Parent 327 0 R +/Prev 342 0 R +/Title (4.3.3 Library Tools) +>> +endobj +346 0 obj +<< +/A << +/D [62 0 R /XYZ 133.199997 559.744812 null] +/S /GoTo +>> +/Next 343 0 R +/Parent 327 0 R +/Prev 345 0 R +/Title (4.3.4 File Compression) +>> +endobj +xref +0 347 +0000000000 65535 f +0000000015 00000 n +0000000378 00000 n +0000000507 00000 n +0000003865 00000 n +0000003921 00000 n +0000004051 00000 n +0000004204 00000 n +0000004369 00000 n +0000004505 00000 n +0000004641 00000 n +0000004778 00000 n +0000004915 00000 n +0000005052 00000 n +0000005189 00000 n +0000005326 00000 n +0000005406 00000 n +0000005655 00000 n +0000005789 00000 n +0000006041 00000 n +0000006171 00000 n +0000006317 00000 n +0000006505 00000 n +0000006735 00000 n +0000006988 00000 n +0000007166 00000 n +0000007418 00000 n +0000007659 00000 n +0000007912 00000 n +0000008142 00000 n +0000008395 00000 n +0000008683 00000 n +0000008960 00000 n +0000009214 00000 n +0000009467 00000 n +0000009767 00000 n +0000010056 00000 n +0000010345 00000 n +0000010622 00000 n +0000010900 00000 n +0000011189 00000 n +0000011467 00000 n +0000011781 00000 n +0000012072 00000 n +0000012351 00000 n +0000012641 00000 n +0000012968 00000 n +0000013294 00000 n +0000013561 00000 n +0000013887 00000 n +0000014142 00000 n +0000014385 00000 n +0000014651 00000 n +0000014988 00000 n +0000015351 00000 n +0000015640 00000 n +0000015919 00000 n +0000016209 00000 n +0000016536 00000 n +0000016813 00000 n +0000017092 00000 n +0000017382 00000 n +0000017672 00000 n +0000018010 00000 n +0000018289 00000 n +0000018579 00000 n +0000018893 00000 n +0000019220 00000 n +0000019498 00000 n +0000019849 00000 n +0000020175 00000 n +0000020502 00000 n +0000020792 00000 n +0000021070 00000 n +0000021337 00000 n +0000021675 00000 n +0000021965 00000 n +0000022232 00000 n +0000022486 00000 n +0000022800 00000 n +0000023091 00000 n +0000023382 00000 n +0000023672 00000 n +0000023974 00000 n +0000024264 00000 n +0000024554 00000 n +0000024844 00000 n +0000025110 00000 n +0000025376 00000 n +0000025631 00000 n +0000025921 00000 n +0000026199 00000 n +0000026466 00000 n +0000027172 00000 n +0000027231 00000 n +0000028135 00000 n +0000029037 00000 n +0000030024 00000 n +0000030208 00000 n +0000032622 00000 n +0000032681 00000 n +0000033586 00000 n +0000034102 00000 n +0000034261 00000 n +0000034405 00000 n +0000034545 00000 n +0000034742 00000 n +0000035029 00000 n +0000035089 00000 n +0000038837 00000 n +0000038897 00000 n +0000038973 00000 n +0000039012 00000 n +0000040139 00000 n +0000040199 00000 n +0000041574 00000 n +0000041634 00000 n +0000043076 00000 n +0000043136 00000 n +0000043654 00000 n +0000043806 00000 n +0000043866 00000 n +0000046113 00000 n +0000046173 00000 n +0000048986 00000 n +0000049046 00000 n +0000049382 00000 n +0000050383 00000 n +0000053219 00000 n +0000053279 00000 n +0000055535 00000 n +0000055595 00000 n +0000058001 00000 n +0000058061 00000 n +0000061618 00000 n +0000061678 00000 n +0000061831 00000 n +0000064761 00000 n +0000064821 00000 n +0000067849 00000 n +0000067909 00000 n +0000069992 00000 n +0000070052 00000 n +0000073103 00000 n +0000073163 00000 n +0000075713 00000 n +0000075773 00000 n +0000078768 00000 n +0000078828 00000 n +0000083200 00000 n +0000083260 00000 n +0000083426 00000 n +0000083592 00000 n +0000084517 00000 n +0000085003 00000 n +0000088623 00000 n +0000088683 00000 n +0000091543 00000 n +0000091603 00000 n +0000094608 00000 n +0000094668 00000 n +0000097895 00000 n +0000097955 00000 n +0000101939 00000 n +0000101999 00000 n +0000105461 00000 n +0000105521 00000 n +0000108973 00000 n +0000109033 00000 n +0000110816 00000 n +0000110876 00000 n +0000111132 00000 n +0000111192 00000 n +0000112816 00000 n +0000112876 00000 n +0000116065 00000 n +0000116125 00000 n +0000119536 00000 n +0000119596 00000 n +0000123474 00000 n +0000123534 00000 n +0000127309 00000 n +0000127369 00000 n +0000130845 00000 n +0000130905 00000 n +0000134877 00000 n +0000134937 00000 n +0000138847 00000 n +0000138907 00000 n +0000142181 00000 n +0000142241 00000 n +0000145750 00000 n +0000145810 00000 n +0000149701 00000 n +0000149761 00000 n +0000152986 00000 n +0000153046 00000 n +0000155990 00000 n +0000156050 00000 n +0000158699 00000 n +0000158759 00000 n +0000162053 00000 n +0000162113 00000 n +0000164874 00000 n +0000164934 00000 n +0000165176 00000 n +0000167108 00000 n +0000167168 00000 n +0000170765 00000 n +0000170825 00000 n +0000174592 00000 n +0000174652 00000 n +0000179106 00000 n +0000179166 00000 n +0000182571 00000 n +0000182631 00000 n +0000186627 00000 n +0000186687 00000 n +0000190597 00000 n +0000190657 00000 n +0000194709 00000 n +0000194769 00000 n +0000197825 00000 n +0000197885 00000 n +0000199592 00000 n +0000199652 00000 n +0000201698 00000 n +0000201758 00000 n +0000204765 00000 n +0000204825 00000 n +0000207399 00000 n +0000207459 00000 n +0000210240 00000 n +0000210300 00000 n +0000212732 00000 n +0000212792 00000 n +0000215561 00000 n +0000215621 00000 n +0000218843 00000 n +0000218903 00000 n +0000222836 00000 n +0000222896 00000 n +0000225994 00000 n +0000226054 00000 n +0000229440 00000 n +0000229500 00000 n +0000232198 00000 n +0000232258 00000 n +0000233996 00000 n +0000234056 00000 n +0000237731 00000 n +0000237791 00000 n +0000238173 00000 n +0000240669 00000 n +0000240729 00000 n +0000242357 00000 n +0000242417 00000 n +0000242617 00000 n +0000242804 00000 n +0000242875 00000 n +0000243087 00000 n +0000243229 00000 n +0000243367 00000 n +0000243568 00000 n +0000243629 00000 n +0000243827 00000 n +0000244024 00000 n +0000244223 00000 n +0000244481 00000 n +0000244673 00000 n +0000244864 00000 n +0000245064 00000 n +0000245250 00000 n +0000245431 00000 n +0000245610 00000 n +0000245789 00000 n +0000245966 00000 n +0000246144 00000 n +0000246205 00000 n +0000246402 00000 n +0000246580 00000 n +0000246758 00000 n +0000246939 00000 n +0000258808 00000 n +0000270381 00000 n +0000272408 00000 n +0000272587 00000 n +0000272742 00000 n +0000272876 00000 n +0000273026 00000 n +0000273228 00000 n +0000289462 00000 n +0000304776 00000 n +0000304919 00000 n +0000305069 00000 n +0000305263 00000 n +0000305398 00000 n +0000305541 00000 n +0000305702 00000 n +0000305853 00000 n +0000306011 00000 n +0000306174 00000 n +0000306315 00000 n +0000306466 00000 n +0000306614 00000 n +0000306799 00000 n +0000316462 00000 n +0000324513 00000 n +0000326917 00000 n +0000329025 00000 n +0000332094 00000 n +0000335150 00000 n +0000347053 00000 n +0000356049 00000 n +0000358654 00000 n +0000363227 00000 n +0000363390 00000 n +0000363540 00000 n +0000363679 00000 n +0000363829 00000 n +0000363965 00000 n +0000364126 00000 n +0000364279 00000 n +0000364444 00000 n +0000364606 00000 n +0000364806 00000 n +0000364956 00000 n +0000365098 00000 n +0000365300 00000 n +0000365458 00000 n +0000365621 00000 n +0000365786 00000 n +0000365946 00000 n +0000366096 00000 n +0000366260 00000 n +0000366417 00000 n +0000366560 00000 n +0000366696 00000 n +0000366838 00000 n +0000366988 00000 n +0000367145 00000 n +0000367297 00000 n +0000367448 00000 n +0000367597 00000 n +0000367763 00000 n +0000367913 00000 n +0000368064 00000 n +trailer +<< +/ID [<266B28C26609F6924FC6A220D08ADCB4> <266B28C26609F6924FC6A220D08ADCB4>] +/Info 1 0 R +/Root 2 0 R +/Size 347 +>> +startxref +368225 +%%EOF diff --git a/Doc/ZCPR Manual.pdf b/Doc/CPM/ZCPR Manual.pdf similarity index 100% rename from Doc/ZCPR Manual.pdf rename to Doc/CPM/ZCPR Manual.pdf diff --git a/Doc/ZCPR-DJ.doc b/Doc/CPM/ZCPR-DJ.doc similarity index 100% rename from Doc/ZCPR-DJ.doc rename to Doc/CPM/ZCPR-DJ.doc diff --git a/Doc/CPM/ZCPR3.3 User Guide.pdf b/Doc/CPM/ZCPR3.3 User Guide.pdf new file mode 100644 index 00000000..05737195 Binary files /dev/null and b/Doc/CPM/ZCPR3.3 User Guide.pdf differ diff --git a/Doc/ZSDOS Manual.pdf b/Doc/CPM/ZSDOS Manual.pdf similarity index 100% rename from Doc/ZSDOS Manual.pdf rename to Doc/CPM/ZSDOS Manual.pdf diff --git a/Doc/qcp27.pdf b/Doc/CPM/qcp27.pdf similarity index 100% rename from Doc/qcp27.pdf rename to Doc/CPM/qcp27.pdf diff --git a/Doc/qdos27.pdf b/Doc/CPM/qdos27.pdf similarity index 100% rename from Doc/qdos27.pdf rename to Doc/CPM/qdos27.pdf diff --git a/Doc/qpm27.pdf b/Doc/CPM/qpm27.pdf similarity index 100% rename from Doc/qpm27.pdf rename to Doc/CPM/qpm27.pdf diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 551e3362..9b31569a 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -14,6 +14,40 @@ Version 3.5 - DDW: Added support for Duodyne Media board - WBW: Auto restore TMS video on user reset (CP/M warm boot) - L?B: Added support for NABU w/ RomWBW Option Board +- MAP: Reorganization of Doc directory introducing subfolders +- WBW: Upgraded BBCBASIC to v5.00 +- W?S: Updated FLASH utility to v1.3.9 +- WBW: Support RCBus PS/2 Keyboard (EP/Sally) +- M?R: Update Timer app to display output in decimal +- WBW: Preliminary support for S100 FPGA Z80 platform +- WBW: Added simple serial (SSER) driver +- WBW: Added preliminary support for S100 FPGA Z80 SD Cards +- M?R: Consolidated ROM Applications document into the Applications document +- M?R: Reviewed and substantially improved the Applications document +- WBW: Added support for DS1305 RTC on S100 FPGA Z80 +- WBW: Added support for Les Bird's RCBus Graphics/Sound/Joystick module +- WBW: Added support for Les Bird's Dual 16C550 UART module +- WBW: Refactor UART driver for more flexible configuration +- M?R: Added hour/minute/second display to timer app +- WBW: Substantial customization of NZ-COM disk image +- WBW: Refactor build post-processing (ZRC, ZZRCC, etc.) +- MAP: Improved section Real Time Clock in User Guide document +- WBW: Support for Hitachi HD44780-based LCD display +- DRJ: Added support for Genesis STD Bus Z180 platform +- MAP: Improved section Disk Management in User Guide document +- WBW: Add CPU speed selection for HEATH platform to HBIOS +- WBW: Add Warm/Cold reboot options to CPUSPD utility +- D?N: Added support for eZ80 CPU +- MAP: Contributed COPYSL utility +- MAP: Added new HBIOS function EXT_SLICE (orginally SYSGET_DIOMED) +- MAP: ROMLDR now uses EXT_SLICE to get Slice Sector for boot +- MAP: CBIOS now uses EXT_SLICE during drive selection +- MAP: CPM3 Boot Loader, and BIOS (drive select) now use EXT_SLICE +- M?R: Added REBOOT application +- MAP: Significant improvement in Disk Catalog document +- MAP: Added Disk Image for the Z3PLUS (Z-System for CP/M-Plus) os. +- H?H: Fix XModem 12.3 WRERR to put CAN char in proper register to send. +- MAP: Initial NVRAM configuration infrastructure Version 3.4 ----------- @@ -682,4 +716,4 @@ interrupts disabled the BIOS will now start OK even if some vagrant hardware is asserting an interrupt (DISKIO). Seems like this is better anyway -- general idea is that we only enable interupts precisely when desired for very specific controled purposes since there is no -concept of interrupt dispatching available. \ No newline at end of file +concept of interrupt dispatching available. diff --git a/Doc/Contrib/AY-3-8910 Registers.xlsx b/Doc/Contrib/AY-3-8910 Registers.xlsx new file mode 100644 index 00000000..6fdc0b5e Binary files /dev/null and b/Doc/Contrib/AY-3-8910 Registers.xlsx differ diff --git a/Doc/Contrib/ZSystem.txt b/Doc/Contrib/ZSystem.txt index 0dda8d31..f5166ef9 100644 --- a/Doc/Contrib/ZSystem.txt +++ b/Doc/Contrib/ZSystem.txt @@ -4,7 +4,7 @@ ZSDOS Adaptation Notes for RomWBW Wayne Warthen wwarthen@gmail.com -This file is a log of the work done to adapt the ZSDOS distribution to the N8VEM platforms under RomWBW. I strongly recommend reviewing the zsdos.pdf file in the Doc directory. +This file is a log of the work done to adapt the ZSDOS distribution to the N8VEM platforms under RomWBW. I strongly recommend reviewing the zsdos.pdf file in the Doc/CPM directory. The starting point was the general public release of ZSDOS that is generally available. The first line of the README file is "ZSDOS-GP. General Public Release of the ZSDOS 1.x Operating System." @@ -20,7 +20,7 @@ Beyond the construction and integration of the actual DOS itself, the majority o The remainder of this document details the changes I made as I went along. In all cases, my goal was to keep the result as close to the original distribution as possible. I started by copying all of the files from the distribution (contained in zsdos2.zip) into Support\ZSDOS. From there I tested, modified, updated, and customized as documented below. Finally, I cherry picked files that made sense to include on the ZSystem ROM disks. -1. CLOCKS.DAT has been updated to include the RomWBW clock driver, HBCLK. I have also added the SIMHCLOK clock driver. +1. CLOCKS.DAT has been updated to include the RomWBW clock driver, WBWCLK. I have also added the SIMHCLOK clock driver. 2. STAMPS.DAT has been replaced with an updated version. The update was called STAMPS11.DAT and was found on the Walnut Creek CP/M CDROM. The original version has a bug that prevents RSX (resident system extension) mode to load properly. @@ -52,4 +52,4 @@ Usage Notes 6. After using PUTDS to initialize a directory for ZDS date stamping, I am finding that it is necessary to run RELOG before the stamping routines will actually start working. -7. Generic CP/M PIP and ZSDOS path searching do not play well together if you use PIP to copy to or from a directory in the ZSDOS search path. Best to use COPY from the ZSDOS distribution. \ No newline at end of file +7. Generic CP/M PIP and ZSDOS path searching do not play well together if you use PIP to copy to or from a directory in the ZSDOS search path. Best to use COPY from the ZSDOS distribution. diff --git a/Doc/Hard Disk Anatomy.pdf b/Doc/Hard Disk Anatomy.pdf index a65a9912..d525eb68 100644 Binary files a/Doc/Hard Disk Anatomy.pdf and b/Doc/Hard Disk Anatomy.pdf differ diff --git a/Doc/Aztec_C_1.06_User_Manual_Mar84.pdf b/Doc/Language/Aztec_C_1.06_User_Manual_Mar84.pdf similarity index 100% rename from Doc/Aztec_C_1.06_User_Manual_Mar84.pdf rename to Doc/Language/Aztec_C_1.06_User_Manual_Mar84.pdf diff --git a/Doc/Cowgol Language.pdf b/Doc/Language/Cowgol Language.pdf similarity index 100% rename from Doc/Cowgol Language.pdf rename to Doc/Language/Cowgol Language.pdf diff --git a/Doc/HI-TECH Z80 C Compiler Manual.txt b/Doc/Language/HI-TECH Z80 C Compiler Manual.txt similarity index 100% rename from Doc/HI-TECH Z80 C Compiler Manual.txt rename to Doc/Language/HI-TECH Z80 C Compiler Manual.txt diff --git a/Doc/Microsoft Basic-80 Reference Manual v5.0.pdf b/Doc/Language/Microsoft Basic-80 Reference Manual v5.0.pdf similarity index 100% rename from Doc/Microsoft Basic-80 Reference Manual v5.0.pdf rename to Doc/Language/Microsoft Basic-80 Reference Manual v5.0.pdf diff --git a/Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf b/Doc/Language/Microsoft_FORTRAN-80_Users_Manual_1977.pdf similarity index 100% rename from Doc/Microsoft_FORTRAN-80_Users_Manual_1977.pdf rename to Doc/Language/Microsoft_FORTRAN-80_Users_Manual_1977.pdf diff --git a/Doc/Language/ReadMe.txt b/Doc/Language/ReadMe.txt new file mode 100644 index 00000000..3fb9b397 --- /dev/null +++ b/Doc/Language/ReadMe.txt @@ -0,0 +1,62 @@ +*********************************************************************** +*** *** +*** R o m W B W *** +*** *** +*** Z80/Z180 System Software *** +*** *** +*********************************************************************** + +This directory ("Doc/Language") is part of the RomWBW System Software +distribution archive. It contains documentation for Programming +Languages provided with the system. + + +Aztec C Compiler User Manual (Aztec_C_1.06_User_Manual_Mar84.pdf) +----------------------------------------------------------------- + +Official user manual for the Aztec C Compiler included in the aztecc disk image. + + +Borland TurboPascal User Manual (Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf) +------------------------------------------------------------------------------------ + +Official user manual Borland TurboPascal included in the pascal disk image. + + +Cowgol Lanaguage (Cowgol Language.pdf) +-------------------------------------- + +Documentation for Cowgol Language included in the cowgol disk image + + +HI-TECH C Compiler User Manual (HI-TECH Z80 C Compiler Manual.txt) +------------------------------------------------------------------ + +Official user manual for the HI-TECH C Compiler included in the +hitechc disk image. + + +Microsoft Basic-80 Reference Manual v5.0 (Microsoft Basic-80 Reference Manual v5.0.pdf) +--------------------------------------------------------------------------------------- + +Official manual for Microsoft BASIC as included in RomWBW. + + +Microsoft FORTRAN-80 User Manual (Microsoft_FORTRAN-80_Users_Manual_1977.pdf) +----------------------------------------------------------------------------- + +Official user manual for Microsoft's FORTRAN-80 compiler included in the fortran +disk image. + + +Z80 Assembler User Manual (z80asm (SLR Systems).pdf) +---------------------------------------------------- + +Official user manual for the Z80 Macro Assembler by SLR Systems +included in the z80asm disk image. + + + + + + diff --git a/Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf b/Doc/Language/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf similarity index 100% rename from Doc/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf rename to Doc/Language/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf diff --git a/Doc/z80asm (SLR Systems).pdf b/Doc/Language/z80asm (SLR Systems).pdf similarity index 100% rename from Doc/z80asm (SLR Systems).pdf rename to Doc/Language/z80asm (SLR Systems).pdf diff --git a/Doc/ReadMe.txt b/Doc/ReadMe.txt index 49f8a7cc..1e183872 100644 --- a/Doc/ReadMe.txt +++ b/Doc/ReadMe.txt @@ -10,6 +10,18 @@ This directory ("Doc") is part of the RomWBW System Software distribution archive. It contains documentation for components of the system. +CPM (Directory) +--------------- + +Documentation specific to CP/M, including all versions and derivatives. + + +Language (Directory) +-------------------- + +Documentation specific to programming languages, provided with the system + + ChangeLog.txt ------------- @@ -31,25 +43,6 @@ and utilities are detailed in the Applications and ROM Applications documents. -CPM Manual ("CPM Manual.pdf") ------------------------------ - -The original DRI CP/M 2.x Operating System Manual. This should be -considered the primary reference for system operation. The section -on CP/M 2 Alteration can be ignored since this work has already been -completed as part of the RomWBW distribution. - - -CPM3 Command Summary ("CPM3 Command Summary.pdf") -CPM3 Programmer's Guide ("CPM3 Programmers Guide.pdf") -CPM3 System Guide ("CPM3 System Guide.pdf") -CPM3 User's Guide ("CPM3 Users Guide.pdf") ------------------------------------------------------- - -The original DRI CP/M 3.0 Operating System Documentation Set. This -should be considered the primary reference for CP/M 3 system operation. - - DDTZ Manual ("DDTZ.doc") ------------------------ @@ -69,47 +62,6 @@ Hard Disk Anatomy ("Hard Disk Anatomy.pdf") Diagram of a CP/M & MS-DOS (FAT) hybrid hard disk layout. -NZCOM User's Manual ("NZCOM Users Manual.pdf") ----------------------------------------------- - -NZCOM operating system operation manual. - - -ZCPR Manual ("ZCPR Manual.pdf") -------------------------------- - -ZCPR is the command proccessor portion of Z-System. This is the -manual for ZCPR 1.x as included in RomWBW. The installation -instructions can be ignored since that work has already been -completed as part of the RomWBW distribution. - -ZCPR D&J Manual ("ZCPR-DJ.doc") -------------------------------- - -ZCPR D&J User Manual. This manual supplements the ZCPR Manual. - - -ZSDOS Manual ("ZSDOS Manual.pdf") ---------------------------------- - -ZSDOS is the DOS portion of Z-System. This is the manual for ZSDOS -1.x as included in RomWBW. The installation instructions can be -ignored since that work has already been completed as part of the -RomWBW distribution. - -Microsoft Basic-80 Reference Manual v5.0 (Microsoft Basic-80 Reference Manual v5.0.pdf) ---------------------------------------------------------------------------------------- - -Official manual for Microsoft BASIC as included in RomWBW. - - -QP/M 2.7 Installation Guide and Supplements ("qpm27.pdf") -QP/M 2.7 Interface Guide ("qdos27.pdf") -QP/M 2.7 Features and Facilities ("qcp27.pdf") --------------------------------------------- - -Official documentation set for QP/M 2.7 from original QP/M distribution. - SIO+CTC Baud Rate Options (SIO+CTC Baud Rate Options.pdf) --------------------------------------------------------- @@ -132,37 +84,4 @@ UCSD p-System Users Manual ("UCSD p-System Users Manual.pdf") Official user manual for p-System operating system included with RomWBW. - -Z80 Assembler User Manual (z80asm (SLR Systems).pdf) ----------------------------------------------------- - -Official user manual for the Z80 Macro Assembler by SLR Systems -included in the z80asm disk image. - - -HI-TECH C Compiler User Manual (HI-TECH Z80 C Compiler Manual.txt) ------------------------------------------------------------------- - -Official user manual for the HI-TECH C Compiler included in the -hitechc disk image. - - -Borland TurboPascal User Manual (Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf) ------------------------------------------------------------------------------------- - -Official user manual Borland TurboPascal included in the pascal disk image. - - -Aztec C Compiler User Manual (Aztec_C_1.06_User_Manual_Mar84.pdf) ------------------------------------------------------------------ - -Official user manual for the Aztec C Compiler included in the aztecc disk image. - - -FORTRAN-80 User Manual (Microsoft_FORTRAN-80_Users_Manual_1977.pdf) ---------------------------------------------------------------- - -Official user manual for Microsoft's FORTRAN-80 compiler included in the fortran -disk image. - ---WBW 5:18 PM 6/14/2023 \ No newline at end of file +--WBW 5:18 PM 6/14/2023 diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index ea50c203..6b3ed77d 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 99872a35..e8115b57 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index 3ec0d57b..7c09fff8 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf deleted file mode 100644 index d04b6903..00000000 Binary files a/Doc/RomWBW ROM Applications.pdf and /dev/null differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 7ec5c43e..64c54ef4 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 20925a21..b66ef8f7 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/Doc/Testing Notes.txt b/Doc/Testing Notes.txt deleted file mode 100644 index 9175409f..00000000 --- a/Doc/Testing Notes.txt +++ /dev/null @@ -1,144 +0,0 @@ -SIMH (X) ----- -- Test UART driver -- Test HDSK driver - -Zeta 1 (X) ------- -- Test UART driver -- Test PPP detection (startup w/ and w/o PPP) -- Test boot to CRT -- Test PPPSD driver -- Test PPPCON driver (video & kbd) -- Test FD driver -- Test FDU app - -Zeta 2 (X) ------- -- Test UART driver -- Test PPP detection (startup w/ and w/o PPP) -- Test boot to CRT -- Test PPPSD driver -- Test PPPCON driver (video & kbd) -- Test FD driver -- Test FDU app - -RCBus (X) ------- -- Test SIO driver (Serial Module) -- Test ACIA driver (Dual Serial Module) -- Test IDE driver (Compact Flash Module) -- Test PPIDE driver (IDE Module) -- Test FD driver (SMC and WDC) -- Test FDU app (SMC and WDC) - -N8-2312 (X) -------- -- Test ASCI driver -- Test SD driver (CSIO mode) -- Test FD driver -- Test FDU app -- Test TMS driver (video & kbd) - -N8-2511 (X) -------- -- Test ASCI driver -- Test SD driver (Juha mode) -- Test FD driver -- Test FDU app -- Test TMS driver (video & kbd) - -SBC (X) ---- -- Test UART driver -- Test PPIDE driver -- Test PPISD driver -- Test PRP detection -- Test boot to CRT console - -MK4 (X) ---- -- Test ASCI driver -- Test IDE driver -- Test SD driver -- Test PRP detection - -RAMF (X) ----- -- Test RAMF driver - -PRP (X) ---- -- Test PRPSD driver -- Test PRPCON driver (video & kbd) - -SCG (X) ---- -- Test TMS driver (video) - -VDU (X) ---- -- Test CVDU driver (video & kbd) - -CVDU (X) ----- -- Test CVDU driver (video & kbd) - -VGA (X) ---- -- Test VGA driver (video & kbd) - -DIO (X) ---- -- Test FD driver -- Test FDU app -- Test IDE driver - -DIO3 (X) ----- -- Test FD driver -- Test FDU app -- Test PPIDE driver - -DIDE (X) ----- -- Test FD driver -- Test FDU app -- Test IDE driver - -DSD (X) ---- -- Test SD driver - -4UART (X) ------ -- Test UART driver - - -UNA (X) ---- -- General Startup -- Boot from disk functionality -- Image loading -- Monitor -- XM app -- ASSIGN app -- MODE app -- SYSCOPY app -- OSLDR app -- FDU app -- FDISK80 app - -GENERAL (X) -------- -- Boot to ROM -- Boot to Disk -- Boot to Monitor -- XM app -- XM port auto-detect -- ASSIGN app -- MODE app -- SYSCOPY app -- FDU app -- FDISK80 app -- TUNE app diff --git a/Doc/The Cowgol language.pdf b/Doc/The Cowgol language.pdf deleted file mode 100644 index dd352c1a..00000000 Binary files a/Doc/The Cowgol language.pdf and /dev/null differ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..d2e716e1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +FROM ubuntu:jammy-20240111 as basebuilder + +# This docker file can be used to build a tool chain docker image for building RomWBW images. + +# Tested on a ubuntu host and on Windows un WSL (with docker desktop) + +# First build the docker image (will b) +# docker build --progress plain -t romwbw-chain . + +# After you have built the above image (called romwbw-chain), you can use it to compile and build the RomWBW images +# as per the standard make scripts within RomWBW. +# Start a new terminal, cd to where you have clone RomWBW, and then run this command: +# docker run -v ${PWD}:/src/ --privileged=true -u $(id -u ${USER}):$(id -g ${USER}) -it romwbw-chain:latest + +# you can now compile and build the required images: + +# cd Tools && make +# cd Source && make # at least once to build many common units +# cd Source && make rom ROM_PLATFORM=RCEZ80 ROM_CONFIG=std + +# when finish, type 'exit' to return to back to your standard terminal session + +LABEL Maintainer="Dean Netherton" \ + Description="spike to use clang for ez80 target" + +ENV DEBIAN_FRONTEND=noninteractive + + +RUN dpkg --add-architecture i386 +RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu/http:\/\/au.archive.ubuntu.com\/ubuntu/g' /etc/apt/sources.list +RUN apt update -y +RUN apt dist-upgrade -y +RUN apt install -y --no-install-recommends cmake lzip ca-certificates mtools build-essential dos2unix libboost-all-dev texinfo texi2html libxml2-dev subversion bison flex zlib1g-dev m4 git wget dosfstools curl + +RUN mkdir work +WORKDIR /work + +FROM basebuilder as main + +LABEL Maintainer="Dean Netherton" \ + Description="spike to build RomWBW" + +RUN mkdir /src +WORKDIR /src/ + +RUN apt install -y --no-install-recommends build-essential libncurses-dev srecord bsdmainutils + +RUN adduser --disabled-password --gecos "" builder diff --git a/Makefile b/Makefile index 6bf9e4a4..87fb9244 100644 --- a/Makefile +++ b/Makefile @@ -28,4 +28,4 @@ dist: $(MAKE) --directory Source clean distlog: - $(MAKE) dist 2>&1 | tee make.log + time -p $(MAKE) dist 2>&1 | tee make.log diff --git a/ReadMe.md b/ReadMe.md index c91cec6d..3d49bb8b 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.5 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -03 May 2024 +08 Nov 2024 # Overview @@ -112,22 +112,20 @@ functionality. Complete instructions for installation and operation of RomWBW are found in the [RomWBW User -Guide](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20User%20Guide.pdf). +Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf). ## Documentation Documentation for RomWBW includes: - [RomWBW User - Guide](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20User%20Guide.pdf) + Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20User%20Guide.pdf) - [RomWBW System - Guide](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20System%20Guide.pdf) + Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%20Guide.pdf) - [RomWBW - Applications](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20Applications.pdf) -- [RomWBW ROM - Applications](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20ROM%20Applications.pdf) + Applications](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Applications.pdf) - [RomWBW - Errata](https://github.com/wwarthen/RomWBW/raw/dev/Doc/RomWBW%20Errata.pdf) + Errata](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Errata.pdf) # Acknowledgments @@ -188,8 +186,8 @@ let me know if I missed you! - Tasty Basic is a product of Dimitri Theulings. -- Dean Netherton contributed the sound driver interface and the SN76489 - sound driver. +- Dean Netherton contributed eZ80 CPU support, the sound driver + interface, and the SN76489 sound driver. - The RomWBW Disk Catalog document was produced by Mykl Orders. @@ -198,7 +196,11 @@ let me know if I missed you! Microsoft Fortran Compiler, and a Games compendium. - Martin R has provided substantial help reviewing and improving the - User Guide. + User Guide and Applications documents. + +- Mark Pruden has also contributed a great deal of content to the Disk + Catalog, User Guide as well as contributing the disk image for the + Z3PLUS operating system, and the COPYSL utility. - Jacques Pelletier has contributed the DS1501 RTC driver code. diff --git a/ReadMe.txt b/ReadMe.txt index bb14f64f..86e19209 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -03 May 2024 +08 Nov 2024 @@ -122,7 +122,6 @@ Documentation for RomWBW includes: - RomWBW User Guide - RomWBW System Guide - RomWBW Applications -- RomWBW ROM Applications - RomWBW Errata @@ -188,8 +187,8 @@ let me know if I missed you! - Tasty Basic is a product of Dimitri Theulings. -- Dean Netherton contributed the sound driver interface and the - SN76489 sound driver. +- Dean Netherton contributed eZ80 CPU support, the sound driver + interface, and the SN76489 sound driver. - The RomWBW Disk Catalog document was produced by Mykl Orders. @@ -198,7 +197,11 @@ let me know if I missed you! BASIC Compiler, Microsoft Fortran Compiler, and a Games compendium. - Martin R has provided substantial help reviewing and improving the - User Guide. + User Guide and Applications documents. + +- Mark Pruden has also contributed a great deal of content to the Disk + Catalog, User Guide as well as contributing the disk image for the + Z3PLUS operating system, and the COPYSL utility. - Jacques Pelletier has contributed the DS1501 RTC driver code. diff --git a/Source/Apps/BBCBASIC/Build.cmd b/Source/Apps/BBCBASIC/Build.cmd new file mode 100644 index 00000000..715a96e1 --- /dev/null +++ b/Source/Apps/BBCBASIC/Build.cmd @@ -0,0 +1,23 @@ +@echo off +setlocal + +set TOOLS=..\..\..\Tools + +set PATH=%TOOLS%\zxcc;%PATH% + +set CPMDIR80=%TOOLS%/cpm/ + +zxcc z80asm -dist/FM +zxcc z80asm -main/FM +zxcc z80asm -exec/FM +zxcc z80asm -eval/FM +zxcc z80asm -asmb/FM +zxcc z80asm -cmos/FM +zxcc z80asm -math/FM +zxcc z80asm -hook/FM +zxcc z80asm -data/FM + +zxcc slrnk -/v,/a:0100,dist,main,exec,eval,asmb,math,hook,cmos,/p:4B00,data,bbcbasic/n,/e + +copy /Y bbcbasic.com ..\..\..\Binary\Apps\ || exit /b +copy /Y bbcbasic.txt ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/BBCBASIC/Clean.cmd b/Source/Apps/BBCBASIC/Clean.cmd new file mode 100644 index 00000000..3de5bc26 --- /dev/null +++ b/Source/Apps/BBCBASIC/Clean.cmd @@ -0,0 +1,9 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.hex del *.hex +if exist *.prn del *.prn +if exist *.rel del *.rel +if exist *.sym del *.sym diff --git a/Source/Apps/BBCBASIC/Makefile b/Source/Apps/BBCBASIC/Makefile new file mode 100644 index 00000000..57ffda4c --- /dev/null +++ b/Source/Apps/BBCBASIC/Makefile @@ -0,0 +1,11 @@ +OBJECTS = bbcbasic.com +DOCS = bbcbasic.txt +DEST = ../../../Binary/Apps +DOCDEST = ../../../Binary/Apps +TOOLS = ../../../Tools +OTHERS = *.rel + +include $(TOOLS)/Makefile.inc + +bbcbasic.com: dist.rel main.rel exec.rel eval.rel asmb.rel cmos.rel math.rel hook.rel data.rel + $(ZXCC) SLRNK -/V,/A:0100,DIST,MAIN,EXEC,EVAL,ASMB,MATH,HOOK,CMOS,/P:4B00,DATA,BBCBASIC/N,/E diff --git a/Source/Apps/BBCBASIC/asmb.z80 b/Source/Apps/BBCBASIC/asmb.z80 new file mode 100644 index 00000000..f1a6951d --- /dev/null +++ b/Source/Apps/BBCBASIC/asmb.z80 @@ -0,0 +1,1010 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024 + NAME ('ASMB') +; +;BBC BASIC INTERPRETER - Z80 VERSION +;Z80 CPU ASSEMBLER MODULE - "ASMB" +;(C) COPYRIGHT R.T.RUSSELL 1981-2024 +; +;THE NAME BBC BASIC IS USED WITH THE PERMISSION +;OF THE BRITISH BROADCASTING CORPORATION AND IS +;NOT TRANSFERRABLE TO A FORKED OR DERIVED WORK. +; +;VERSION 5.0, 14-05-2024 +; + GLOBAL ASSEM +; + EXTRN TABIT + EXTRN CRLF + EXTRN OUT + EXTRN VAR + EXTRN ZERO + EXTRN STOREN + EXTRN ERROR + EXTRN EXPRI + EXTRN EXPRS +; + EXTRN LISTON + EXTRN COUNT + EXTRN ACCS + EXTRN OC + EXTRN PC +; +CR EQU 0DH +TAND EQU 80H +TOR EQU 84H +TERROR EQU 85H +TCALL EQU 0D6H +TDEF EQU 0DDH +; +;ASSEMBLER: +;LANGUAGE-INDEPENDENT CONTROL SECTION: +; Outputs: A=delimiter, carry set if syntax error. +; +ASSEM: CALL SKIP + INC IY + CP ':' + JR Z,ASSEM + CP ']' + RET Z + CP CR + RET Z + DEC IY + LD IX,(PC) ;PROGRAM COUNTER + LD HL,LISTON + BIT 6,(HL) + JR Z,ASSEM0 + LD IX,(OC) ;ORIGIN of CODE +ASSEM0: PUSH IX + PUSH IY + CALL ASMB + POP BC + POP DE + RET C + CALL SKIP + SCF + RET NZ + DEC IY +ASSEM3: INC IY + LD A,(IY) + CALL TERM0 + JR NZ,ASSEM3 + LD A,(LISTON) + PUSH IX + POP HL + OR A + SBC HL,DE + EX DE,HL ;DE= NO. OF BYTES + PUSH HL + LD HL,(PC) + PUSH HL + ADD HL,DE + LD (PC),HL ;UPDATE PC + BIT 6,A + JR Z,ASSEM5 + LD HL,(OC) + ADD HL,DE + LD (OC),HL ;UPDATE OC +ASSEM5: POP HL ;OLD PC + POP IX ;CODE HERE + BIT 4,A + JR Z,ASSEM + LD A,H + CALL HEX + LD A,L + CALL HEXSP + XOR A + CP E + JR Z,ASSEM2 +ASSEM1: LD A,(COUNT) + CP 17 + LD A,5 + CALL NC,TABIT ;NEXT LINE + LD A,(IX) + CALL HEXSP + INC IX + DEC E + JR NZ,ASSEM1 +ASSEM2: LD A,18 + CALL TABIT + PUSH IY + POP HL + SBC HL,BC +ASSEM4: LD A,(BC) + CALL OUT + INC BC + DEC L + JR NZ,ASSEM4 + CALL CRLF + JP ASSEM +; +HEXSP: CALL HEX + LD A,' ' + JR OUTCH1 +HEX: PUSH AF + RRCA + RRCA + RRCA + RRCA + CALL HEXOUT + POP AF +HEXOUT: AND 0FH + ADD A,90H + DAA + ADC A,40H + DAA +OUTCH1: JP OUT +; +;PROCESSOR-SPECIFIC TRANSLATION SECTION: +; +;REGISTER USAGE: B - TYPE OF MOST RECENT OPERAND +; C - OPCODE BEING BUILT +; D - (IX) OR (IY) FLAG +; E - OFFSET FROM IX OR IY +; HL - NUMERIC OPERAND VALUE +; IX - CODE DESTINATION +; IY - SOURCE TEXT POINTER +; Inputs: A = initial character +; Outputs: Carry set if syntax error. +; +ASMB: CP '.' + JR NZ,ASMB1 + INC IY + PUSH IX + CALL VAR + PUSH AF + CALL ZERO + EXX + LD HL,(PC) + EXX + LD A,(LISTON) + AND 20H + JR NZ,ASMB0 + LD A,(IX) + OR (IX+1) + LD A,3 + JP NZ,ERROR ;Multiple label +ASMB0: POP AF + CALL STOREN + POP IX +ASMB1: CALL SKIP + RET Z + CP TCALL + LD C,0C4H + INC IY + JP Z,GRPC + DEC IY + LD HL,OPCODS + CALL FIND + RET C + LD C,B ;ROOT OPCODE + LD D,0 ;CLEAR IX/IY FLAG +; +;GROUP 0 - TRIVIAL CASES REQUIRING NO COMPUTATION +;GROUP 1 - AS GROUP 0 BUT WITH "ED" PREFIX +; + SUB 39 + JR NC,GROUP2 + CP 15-39 + CALL NC,ED + JR BYTE0 +; +;GROUP 2 - BIT, RES, SET +;GROUP 3 - RLC, RRC, RL, RR, SLA, SRA, SRL +; +GROUP2: SUB 10 + JR NC,GROUP4 + CP 3-10 + CALL C,BIT + RET C + CALL REGLO + RET C + CALL CB + JR BYTE0 +; +;GROUP 4 - PUSH, POP, EX (SP) +; +GROUP4: SUB 3 + JR NC,GROUP5 +G4: CALL PAIR + RET C + JR BYTE0 +; +;GROUP 5 - SUB, AND, XOR, OR, CP +;GROUP 6 - ADD, ADC, SBC +; +GROUP5: SUB 8+2 + JR NC,GROUP7 + CP 5-8 + LD B,7 + CALL NC,OPND + LD A,B + CP 7 + JR NZ,G6HL +G6: CALL REGLO + LD A,C + JR NC,BIND1 + XOR 46H + CALL BIND +DB: CALL NUMBER + JR VAL8 +; +G6HL: AND 3FH + CP 12 + SCF + RET NZ + LD A,C + CP 80H + LD C,9 + JR Z,G4 + XOR 1CH + RRCA + LD C,A + CALL ED + JR G4 +; +;GROUP 7 - INC, DEC +; +GROUP7: SUB 2 + JR NC,GROUP8 + CALL REGHI + LD A,C +BIND1: JP NC,BIND + XOR 64H + RLCA + RLCA + RLCA + LD C,A + CALL PAIR1 + RET C +BYTE0: LD A,C + JR BYTE2 +; +;GROUP 8 - IN +;GROUP 9 - OUT +; +GROUP8: SUB 2 + JR NC,GROUPA + CP 1-2 + CALL Z,CORN + EX AF,AF' + CALL REGHI + RET C + EX AF,AF' + CALL C,CORN + INC H + JR Z,BYTE0 + LD A,B + CP 7 + SCF + RET NZ + LD A,C + XOR 3 + RLCA + RLCA + RLCA + CALL BYTE + JR VAL8 +; +;GROUP 10 - JR, DJNZ +; +GROUPA: SUB 2 + JR NC,GROUPB + CP 1-2 + CALL NZ,COND + LD A,C + JR NC,GRPA + LD A,18H +GRPA: CALL BYTE + CALL NUMBER + LD DE,(PC) + INC DE + SCF + SBC HL,DE + LD A,L + RLA + SBC A,A + CP H +TOOFAR: LD A,1 + JP NZ,ERROR ;"Out of range" +VAL8: LD A,L + JR BYTE2 +; +;GROUP 11 - JP +; +GROUPB: LD B,A + JR NZ,GROUPC + CALL COND + LD A,C + JR NC,GRPB + LD A,B + AND 3FH + CP 6 + LD A,0E9H + JR Z,BYTE2 + LD A,0C3H +GRPB: CALL BYTE + JR ADDR +; +;GROUP 12 - CALL +; +GROUPC: DJNZ GROUPD +GRPC: CALL GRPE +ADDR: CALL NUMBER +VAL16: CALL VAL8 + LD A,H + JR BYTE2 +; +;GROUP 13 - RST +; +GROUPD: DJNZ GROUPE + CALL NUMBER + AND C + OR H + JR NZ,TOOFAR + LD A,L + OR C +BYTE2: JR BYTE1 +; +;GROUP 14 - RET +; +GROUPE: DJNZ GROUPF +GRPE: CALL COND + LD A,C + JR NC,BYTE1 + OR 9 + JR BYTE1 +; +;GROUP 15 - LD +; +GROUPF: DJNZ MISC + CALL LDOP + JR NC,LDA + CALL REGHI + EX AF,AF' + CALL SKIP + CP '(' + JR Z,LDIN + EX AF,AF' + JP NC,G6 + LD C,1 + CALL PAIR1 + RET C + LD A,14 + CP B + LD B,A + CALL Z,PAIR + LD A,B + AND 3FH + CP 12 + LD A,C + JR NZ,GRPB + LD A,0F9H + JR BYTE1 +; +LDIN: EX AF,AF' + PUSH BC + CALL NC,REGLO + LD A,C + POP BC + JR NC,BIND + LD C,0AH + CALL PAIR1 + CALL LD16 + JR NC,GRPB + CALL NUMBER + LD C,2 + CALL PAIR + CALL LD16 + RET C + CALL BYTE + JR VAL16 +; +;OPT - SET OPTION +; +OPT: DEC B + JP Z,DB + DJNZ ADDR + CALL NUMBER + LD HL,LISTON + LD C,A + RLD + LD A,C + RRD + RET +; +LDA: CP 4 + CALL C,ED + LD A,B +BYTE1: JR BYTE +; +;MISC - DEFB, DEFW, DEFM +; +MISC: DJNZ OPT + PUSH IX + CALL EXPRS + POP IX + LD HL,ACCS +DEFM1: XOR A + CP E + RET Z + LD A,(HL) + INC HL + CALL BYTE + DEC E + JR DEFM1 +; +;SUBROUTINES: +; +LD16: LD A,B + JR C,LD8 + LD A,B + AND 3FH + CP 12 + LD A,C + RET Z + CALL ED + LD A,C + OR 43H + RET +; +LD8: CP 7 + SCF + RET NZ + LD A,C + OR 30H + RET +; +CORN: PUSH BC + CALL OPND + BIT 5,B + POP BC + JR Z,NUMBER + LD H,-1 +ED: LD A,0EDH + JR BYTE +; +CB: LD A,0CBH +BIND: CP 76H + SCF + RET Z ;REJECT LD (HL),(HL) + CALL BYTE + INC D + RET P + LD A,E + JR BYTE +; +OPND: PUSH HL + LD HL,OPRNDS + CALL FIND + POP HL + RET C + BIT 7,B + RET Z + BIT 3,B + PUSH HL + CALL Z,OFFSET + LD E,L + POP HL + LD A,0DDH + BIT 6,B + JR Z,OP1 + LD A,0FDH +OP1: OR A + INC D + LD D,A + RET M +BYTE: LD (IX),A + INC IX + OR A + RET +; +OFFSET: LD A,(IY) + CP ')' + LD HL,0 + RET Z +NUMBER: CALL SKIP + PUSH BC + PUSH DE + PUSH IX + CALL EXPRI + POP IX + EXX + POP DE + POP BC + LD A,L + OR A + RET +; +REG: CALL OPND + RET C + LD A,B + AND 3FH + CP 8 + CCF + RET +; +REGLO: CALL REG + RET C + JR ORC +; +REGHI: CALL REG + RET C + JR SHL3 +; +COND: CALL OPND + RET C + LD A,B + AND 1FH + SUB 16 + JR NC,SHL3 + CP -15 + SCF + RET NZ + LD A,3 + JR SHL3 +; +PAIR: CALL OPND + RET C +PAIR1: LD A,B + AND 0FH + SUB 8 + RET C + JR SHL3 +; +BIT: CALL NUMBER + CP 8 + CCF + RET C +SHL3: RLCA + RLCA + RLCA +ORC: OR C + LD C,A + RET +; +LDOP: LD HL,LDOPS +FIND: CALL SKIP +EXIT: LD B,0 + SCF + RET Z + CP TDEF + JR Z,FIND0 + CP TOR+1 + CCF + RET C +FIND0: LD A,(HL) + OR A + JR Z,EXIT + XOR (IY) + AND 01011111B + JR Z,FIND2 +FIND1: BIT 7,(HL) + INC HL + JR Z,FIND1 + INC HL + INC B + JR FIND0 +; +FIND2: PUSH IY +FIND3: BIT 7,(HL) + INC IY + INC HL + JR NZ,FIND5 + CP (HL) + CALL Z,SKIP0 + LD A,(HL) + XOR (IY) + AND 01011111B + JR Z,FIND3 +FIND4: POP IY + JR FIND1 +; +FIND5: CALL DELIM + CALL NZ,SIGN + JR NZ,FIND4 +FIND6: LD A,B + LD B,(HL) + POP HL + RET +; +SKIP0: INC HL +SKIP: CALL DELIM + RET NZ + CALL TERM + RET Z + INC IY + JR SKIP +; +SIGN: CP '+' + RET Z + CP '-' + RET +; +DELIM: LD A,(IY) ;ASSEMBLER DELIMITER + CP ' ' + RET Z + CP ',' + RET Z + CP ')' + RET Z +TERM: CP ';' ;ASSEMBLER TERMINATOR + RET Z + CP '\' + RET Z +TERM0: CP ':' ;ASSEMBLER SEPARATOR + RET NC + CP CR + RET +; +OPCODS: DEFM 'NO' + DEFB 'P'+80H + DEFB 0 + DEFM 'RLC' + DEFB 'A'+80H + DEFB 7 + DEFM 'EX' + DEFB 0 + DEFM 'AF' + DEFB 0 + DEFM 'AF' + DEFB ''''+80H + DEFB 8 + DEFM 'RRC' + DEFB 'A'+80H + DEFB 0FH + DEFM 'RL' + DEFB 'A'+80H + DEFB 17H + DEFM 'RR' + DEFB 'A'+80H + DEFB 1FH + DEFM 'DA' + DEFB 'A'+80H + DEFB 27H + DEFM 'CP' + DEFB 'L'+80H + DEFB 2FH + DEFM 'SC' + DEFB 'F'+80H + DEFB 37H + DEFM 'CC' + DEFB 'F'+80H + DEFB 3FH + DEFM 'HAL' + DEFB 'T'+80H + DEFB 76H + DEFM 'EX' + DEFB 'X'+80H + DEFB 0D9H + DEFM 'EX' + DEFB 0 + DEFM 'DE' + DEFB 0 + DEFM 'H' + DEFB 'L'+80H + DEFB 0EBH + DEFM 'D' + DEFB 'I'+80H + DEFB 0F3H + DEFM 'E' + DEFB 'I'+80H + DEFB 0FBH +; + DEFM 'NE' + DEFB 'G'+80H + DEFB 44H + DEFM 'IM' + DEFB 0 + DEFB '0'+80H + DEFB 46H + DEFM 'RET' + DEFB 'N'+80H + DEFB 45H + DEFM 'RET' + DEFB 'I'+80H + DEFB 4DH + DEFM 'IM' + DEFB 0 + DEFB '1'+80H + DEFB 56H + DEFM 'IM' + DEFB 0 + DEFB '2'+80H + DEFB 5EH + DEFM 'RR' + DEFB 'D'+80H + DEFB 67H + DEFM 'RL' + DEFB 'D'+80H + DEFB 6FH + DEFM 'LD' + DEFB 'I'+80H + DEFB 0A0H + DEFM 'CP' + DEFB 'I'+80H + DEFB 0A1H + DEFM 'IN' + DEFB 'I'+80H + DEFB 0A2H + DEFM 'OUT' + DEFB 'I'+80H + DEFB 0A3H + DEFM 'LD' + DEFB 'D'+80H + DEFB 0A8H + DEFM 'CP' + DEFB 'D'+80H + DEFB 0A9H + DEFM 'IN' + DEFB 'D'+80H + DEFB 0AAH + DEFM 'OUT' + DEFB 'D'+80H + DEFB 0ABH + DEFM 'LDI' + DEFB 'R'+80H + DEFB 0B0H + DEFM 'CPI' + DEFB 'R'+80H + DEFB 0B1H + DEFM 'INI' + DEFB 'R'+80H + DEFB 0B2H + DEFM 'OTI' + DEFB 'R'+80H + DEFB 0B3H + DEFM 'LDD' + DEFB 'R'+80H + DEFB 0B8H + DEFM 'CPD' + DEFB 'R'+80H + DEFB 0B9H + DEFM 'IND' + DEFB 'R'+80H + DEFB 0BAH + DEFM 'OTD' + DEFB 'R'+80H + DEFB 0BBH +; + DEFM 'BI' + DEFB 'T'+80H + DEFB 40H + DEFM 'RE' + DEFB 'S'+80H + DEFB 80H + DEFM 'SE' + DEFB 'T'+80H + DEFB 0C0H +; + DEFM 'RL' + DEFB 'C'+80H + DEFB 0 + DEFM 'RR' + DEFB 'C'+80H + DEFB 8 + DEFM 'R' + DEFB 'L'+80H + DEFB 10H + DEFM 'R' + DEFB 'R'+80H + DEFB 18H + DEFM 'SL' + DEFB 'A'+80H + DEFB 20H + DEFM 'SR' + DEFB 'A'+80H + DEFB 28H + DEFM 'SR' + DEFB 'L'+80H + DEFB 38H +; + DEFM 'PO' + DEFB 'P'+80H + DEFB 0C1H + DEFM 'PUS' + DEFB 'H'+80H + DEFB 0C5H + DEFM 'EX' + DEFB 0 + DEFM '(S' + DEFB 'P'+80H + DEFB 0E3H +; + DEFM 'SU' + DEFB 'B'+80H + DEFB 90H + DEFM 'AN' + DEFB 'D'+80H + DEFB 0A0H + DEFM 'XO' + DEFB 'R'+80H + DEFB 0A8H + DEFM 'O' + DEFB 'R'+80H + DEFB 0B0H + DEFM 'C' + DEFB 'P'+80H + DEFB 0B8H + DEFB TAND + DEFB 0A0H + DEFB TOR + DEFB 0B0H +; + DEFM 'AD' + DEFB 'D'+80H + DEFB 80H + DEFM 'AD' + DEFB 'C'+80H + DEFB 88H + DEFM 'SB' + DEFB 'C'+80H + DEFB 98H +; + DEFM 'IN' + DEFB 'C'+80H + DEFB 4 + DEFM 'DE' + DEFB 'C'+80H + DEFB 5 +; + DEFM 'I' + DEFB 'N'+80H + DEFB 40H + DEFM 'OU' + DEFB 'T'+80H + DEFB 41H +; + DEFM 'J' + DEFB 'R'+80H + DEFB 20H + DEFM 'DJN' + DEFB 'Z'+80H + DEFB 10H +; + DEFM 'J' + DEFB 'P'+80H + DEFB 0C2H +; + DEFM 'CAL' + DEFB 'L'+80H + DEFB 0C4H +; + DEFM 'RS' + DEFB 'T'+80H + DEFB 0C7H +; + DEFM 'RE' + DEFB 'T'+80H + DEFB 0C0H +; + DEFM 'L' + DEFB 'D'+80H + DEFB 40H +; + DEFB TDEF AND 7FH + DEFB 'M'+80H + DEFB 0 +; + DEFB TDEF AND 7FH + DEFB 'B'+80H + DEFB 0 +; + DEFM 'OP' + DEFB 'T'+80H + DEFB 0 +; + DEFB TDEF AND 7FH + DEFB 'W'+80H + DEFB 0 +; + DEFB 0 +; +OPRNDS: DEFB 'B'+80H + DEFB 0 + DEFB 'C'+80H + DEFB 1 + DEFB 'D'+80H + DEFB 2 + DEFB 'E'+80H + DEFB 3 + DEFB 'H'+80H + DEFB 4 + DEFB 'L'+80H + DEFB 5 + DEFM '(H' + DEFB 'L'+80H + DEFB 6 + DEFB 'A'+80H + DEFB 7 + DEFM '(I' + DEFB 'X'+80H + DEFB 86H + DEFM '(I' + DEFB 'Y'+80H + DEFB 0C6H +; + DEFM 'B' + DEFB 'C'+80H + DEFB 8 + DEFM 'D' + DEFB 'E'+80H + DEFB 10 + DEFM 'H' + DEFB 'L'+80H + DEFB 12 + DEFM 'I' + DEFB 'X'+80H + DEFB 8CH + DEFM 'I' + DEFB 'Y'+80H + DEFB 0CCH + DEFM 'A' + DEFB 'F'+80H + DEFB 14 + DEFM 'S' + DEFB 'P'+80H + DEFB 14 +; + DEFM 'N' + DEFB 'Z'+80H + DEFB 16 + DEFB 'Z'+80H + DEFB 17 + DEFM 'N' + DEFB 'C'+80H + DEFB 18 + DEFM 'P' + DEFB 'O'+80H + DEFB 20 + DEFM 'P' + DEFB 'E'+80H + DEFB 21 + DEFB 'P'+80H + DEFB 22 + DEFB 'M'+80H + DEFB 23 +; + DEFM '(' + DEFB 'C'+80H + DEFB 20H +; + DEFB 0 +; +LDOPS: DEFM 'I' + DEFB 0 + DEFB 'A'+80H + DEFB 47H + DEFM 'R' + DEFB 0 + DEFB 'A'+80H + DEFB 4FH + DEFM 'A' + DEFB 0 + DEFB 'I'+80H + DEFB 57H + DEFM 'A' + DEFB 0 + DEFB 'R'+80H + DEFB 5FH + DEFM '(BC' + DEFB 0 + DEFB 'A'+80H + DEFB 2 + DEFM '(DE' + DEFB 0 + DEFB 'A'+80H + DEFB 12H + DEFM 'A' + DEFB 0 + DEFM '(B' + DEFB 'C'+80H + DEFB 0AH + DEFM 'A' + DEFB 0 + DEFM '(D' + DEFB 'E'+80H + DEFB 1AH +; + DEFB 0 +; +FIN: END diff --git a/Source/Apps/BBCBASIC/bbcbasic.txt b/Source/Apps/BBCBASIC/bbcbasic.txt new file mode 100644 index 00000000..0fa96f2e --- /dev/null +++ b/Source/Apps/BBCBASIC/bbcbasic.txt @@ -0,0 +1,455 @@ +This is a RomWBW HBIOS adaptation of BBCBASIC v5.00. The +cursor and screen management assumes the use of an ANSI/VT-100 terminal +which is generally correct for RomWBW. Support for a hardware system +timer is also implemented. If your system does not have a hardware +timer, the TIME function will always return 0 and the timeout +parameter of the INKEY(n) function will not be observed (will never +timeout). + +What follows is some basic information on BBCBASIC from the +distribution. Note that it starts with the v3.00 information and +later on provides information on the changes in v5.00. + +-- WBW 1:15 PM 5/30/2024 + + + + + BBC BASIC (Z80) + + Generic CP/M Version 3.00 + + (C) Copyright R.T.Russell 1982-1999 + +1. INTRODUCTION + + BBC BASIC (Z80) has been designed to be as compatible as possible with + Version 4 of the 6502 BBC BASIC resident in the BBC Micro Master series. + The language syntax is not always identical to that of the 6502 version, + but in most cases the Z80 version is more tolerant. + + BBC BASIC (Z80) is as machine independent as possible and, as supplied, + it will run on any CP/M 2.2 (or later) system using a Z80 processor + (checks are carried out to ensure that the processor is a Z80 and that + the version of CP/M is at least 2.2). It is minimally configured for an + ADM3a-compatible VDU. + + Few CP/M systems offer colour graphics of the quality provided as + standard on the BBC Microcomputer, and no software can provide colour + high-resolution graphics from a monochrome character-orientated computer. + However, many CP/M system users are interested in the advanced program + structures available from BBC BASIC and, within the limitations of the + host computer, BBC BASIC (Z80) provides the programming structures and + the non-graphic commands and functions specified for BBC BASIC. + + In order to make full use of the facilities available in BBC BASIC (Z80) + it is necessary to install a small patch to adapt it to the capabilities + of the host computer. The source code of the patch present in the + distribution version is supplied as BBCDIST.MAC. + + This documentation should be read in conjunction with a standard BBC + BASIC manual. Only those features which differ from the standard Acorn + versions are documented here. + + +2. MEMORY UTILISATION + + BBC BASIC (Z80) requires about 16 Kbytes of code space, resulting in a + value of PAGE of about &3E00. The remainder of the user memory is + available for BASIC programs, variables (heap) and stack. Depending on + the system configuration, HIMEM can have a value up to &FE00. + + +3. COMMANDS, STATEMENTS AND FUNCTIONS + + The syntax of BASIC commands, statements and functions is in most cases + identical to that of the BBC Micro version (BASIC 4). The few + differences are documented here: + + ADVAL + This function is not implemented. + + CALL + CALL sets up a table in RAM containing details of the parameters; the + processor's IX register is set to the address of this parameter table. + The other processor registers are initialised as follows: + + A is initialised to the least significant byte of A% + B is initialised to the least significant byte of B% + C is initialised to the least significant byte of C% + D is initialised to the least significant byte of D% + E is initialised to the least significant byte of E% + F is initialised to the least significant byte of F% + H is initialised to the least significant byte of H% + L is initialised to the least significant byte of L% + + The parameter types are: + + Code No. Parameter Type Example + 0 Byte (8 bits) ?A% + 4 Word (32 bits) !A% or A% + 5 Real (40 bits) A + 128 Fixed string $A% + 129 Movable string A$ + + On entry to the subroutine the parameter table contains the following + values: + + Number of parameters 1 byte (at IX) + + Parameter type 1 byte (at IX+1) + Parameter address 2 bytes (at IX+2, IX+3, LSB first) + + Parameter type ) repeated as often as necessary + Parameter address ) + + Except in the case of a movable string (normal string variable), the + parameter address given is the absolute address at which the item is + stored. In the case of movable strings (type 129) it is the address of a + 4-byte parameter block containing the current length, the maximum length + and the start address of the string (LSB first) in that order. + + Integer variables are stored in twos complement form with their least + significant byte first. + + Fixed strings are stored as the characters of the string followed by a + carriage return (&0D). + + Floating point variables are stored in binary floating point format with + their least significant byte first; the fifth byte is the exponent. The + mantissa is stored as a binary fraction in sign and magnitude format. + Bit 7 of the most significant byte is the sign bit and, for the purposes + of calculating the magnitude of the number, this bit is assumed to be set + to one. The exponent is stored as an integer in excess 127 format (to + find the exponent subtract 127 from the value in the fifth byte). + + If the exponent byte of a floating point number is zero, the number is an + integer stored in integer format in the mantissa bytes. Thus an integer + can be represented in two different ways in a real variable. For example + the value +5 can be stored as: + + 05 00 00 00 00 Integer 5 + 00 00 00 20 82 (0.5 + 0.125) * 2^3 + + COLOUR (COLOR) + This statement is not implemented. + + DRAW + This statement is not implemented. + + EDIT + A command to edit or concatenate and edit the specified program line(s). + The specified lines (including their line numbers) are listed as a single + line. By changing only the line number you can use EDIT to duplicate a + line. + + EDIT 230 + EDIT 200,230 + + The following control functions are active both in the EDIT mode and in + the immediate entry mode (i.e. at the BASIC prompt): + + Move the cursor one character position to the left + Move the cursor one character position to the right + Move the cursor to the start of the line + Move the cursor to the end of the line + Insert a space at the current cursor position + Delete the character at the current cursor position + Backspace and delete the character to the left of the cursor + Delete all characters to the left of the cursor + Delete all characters from the cursor to the end of the line + + The choice of which keys activate these functions is made when BBC BASIC + is configured for a particular system. The distribution version uses ^H, + ^I, ^K, ^J, ^A, ^E, DEL (&7F), ^L and ^X. + + To exit EDIT mode and replace the edited line, type RETURN (ENTER). + + To abort the edit and leave the line unchanged, type ESCape. + + ENVELOPE + This statement is not implemented. + + GET + This function waits for a character to be typed at the keyboard, and + returns the ASCII code. + + GET can also be used to read data from a processor I/O port; full 16-bit + port addressing is available: + + N% = GET(X%) : REM input from port X% + + INKEY + This function waits for a specified maximum number of centiseconds for a + character to be typed at the keyboard. If no character is typed in that + time, the value -1 is returned. In the distribution version the delay is + determined by a simple software timing loop, and may be very inaccurate. + The customisation patch allows this to be adjusted to suit the system in + use. + + INPUT# + The format of data files is different from that used by the BBC Micro, in + part to improve compatibility with standard CP/M files. Numeric values + are stored as five bytes in the format documented under CALL; if the + fifth byte is zero the value is an integer. Strings are stored as the + characters of the string (in the correct order!) followed by a carriage + return (&0D). + + MODE + This statement is not implemented. + + MOVE + This statement is not implemented. + + PLOT + This statement is not implemented. + + POINT + This function is not implemented. + + PRINT# + The format of data files is different from that used by the BBC Micro, in + part to improve compatibility with standard CP/M files. Numeric values + are stored as five bytes in the format documented under CALL; if the + fifth byte is zero the value is an integer. Strings are stored as the + characters of the string (in the correct order!) followed by a carriage + return (&0D). + + PUT + A statement to output data to a processor port. Full 16-bit addressing + is available. + + PUT A%,N% : REM Output N% to port A% + + SOUND + This statement is not implemented. + + TIME + This pseudo-variable is not implemented in the distribution version, but + can be supported by means of the customisation patch. See BBCDIST.MAC. + + USR + As with CALL, the processor's registers are initialised as follows: + + A is initialised to the least significant byte of A% + B is initialised to the least significant byte of B% + C is initialised to the least significant byte of C% + D is initialised to the least significant byte of D% + E is initialised to the least significant byte of E% + F is initialised to the least significant byte of F% + H is initialised to the least significant byte of H% + L is initialised to the least significant byte of L% + + USR returns a 32-bit integer result composed of the processor's H, L, H' + and L' registers, with H being the most significant. + + +4. RESIDENT Z80 ASSEMBLER + + The in-line assembler is accessed in exactly the same way as the 6502 + assembler in the BBC Micro version of BBC BASIC. That is, '[' enters + assembler mode and ']' exits assembler mode. + + All standard Zilog mnemonics are accepted: ADD, ADC and SBC must be + followed by A or HL. For example, ADD A,C is accepted but ADD C is not. + However, the brackets around the port number in IN and OUT are optional. + Thus both OUT (5),A and OUT 5,A are accepted. The instruction IN F,(C) + is not accepted, but the equivalent code is produced from IN (HL),C + + The pseudo-ops DEFB, DEFW and DEFM are included. DEFM works like EQUS in + the 6502 version. + + +5. OPERATING SYSTEM INTERFACE + + The following resident Operating System ("star") commands are + implemented. They may be accessed directly (e.g. *BYE) or via the OSCLI + statement (OSCLI "BYE"). + + Control characters, lower-case characters, DEL and quotation marks may be + incorporated in filenames by using the 'escape' character '|'. However, + there is no equivalent to the BBC Microcomputer's '|!' to set bit 7. + + *BYE + Returns control to the operating system (CP/M). + + *CPM + Same as *BYE. + + *. [filespec] + *DIR [filespec] + List the files which match the (optional) ambiguous filespec. If the + filespec is omitted, all .BBC files are listed: + *DIR List all .BBC files on the disk + *DIR B:*.* List all files on disk B: + *.*.* List all files on the current disk + + *DRIVE d: + Select drive d as the default drive for subsequent disk operations. + + *ERA filespec + Erase (delete) the specified disk file or files. The extension defaults + to .BBC if omitted. + + *ESC [ON|OFF] + *ESC OFF disables the abort action of the ESCape key; after *ESC OFF the + ESCape key simply returns the ASCII code ESC (27). *ESC ON, or *ESC, + restores the normal action of the ESCape key. + + *EXEC filespec + Accept console input from the specified file instead of from the + keyboard. If the extension is omitted, .BBC is assumed. + + *LOAD filespec aaaa + Loads the specified file into memory at address aaaa. The load address + must be specified. If the extension is omitted, .BBC is assumed. + + *OPT [n] + Select the destination for console output characters. The value n is in + the range 0 to 2, as follows: + + 0 Send characters to the console output + 1 Send characters to the auxiliary output + 2 Send characters to the printer (list) output + + *REN newfile=oldfile + *RENAME newfile=oldfile + Renames 'oldfile' as 'newfile'. If the extension is omitted, .BBC is + assumed. + + *RESET + Rest the disk system (CP/M function 13). This command does not close any + files nor does it perform any other housekeeping function. You should + use *RESET after you have changed a disk. + + *SAVE filespec aaaa bbbb + *SAVE filespec aaaa +llll + This command saves a specified range of memory to disk. The address range + is specified either as start (aaaa) and end+1 (bbbb) or as start (aaaa) + and length (llll). If the extension is omitted, .BBC is assumed. + + *SPOOL [filespec] + Copy all subsequent console output to the specified file. If the filename + is omitted, any current spool file is closed and spooling is terminated. + If the extension is omitted, .BBC is assumed. + + *TYPE filespec + Type the specified file to the screen. If the extension is omitted, .BBC + is assumed. + + *| comment + This is a comment line. Anything following the | is ignored. + + +6. ERROR MESSAGES AND CODES + + Untrappable: + + No room RENUMBER space + Silly LINE space + Sorry Bad program + + Trappable - BASIC: + + 1 Out of range 24 Exp range + 2 25 + 3 26 No such variable + 4 Mistake 27 Missing ) + 5 Missing , 28 Bad HEX + 6 Type mismatch 29 No such FN/PROC + 7 No FN 30 Bad call + 8 31 Arguments + 9 Missing " 32 No FOR + 10 Bad DIM 33 Can't match FOR + 11 DIM space 34 FOR variable + 12 Not LOCAL 35 + 13 No PROC 36 No TO + 14 Array 37 + 15 Subscript 38 No GOSUB + 16 Syntax error 39 ON syntax + 17 Escape 40 ON range + 18 Division by zero 41 No such line + 19 String too long 42 Out of DATA + 20 Too big 43 No REPEAT + 21 -ve root 44 + 22 Log range 45 Missing # + 23 Accuracy lost + + Trappable - OS: + + 190 Directory full 214 File not found + 192 Too many open files 222 Channel + 196 File exists 253 Bad string + 198 Disk full 254 Bad command + 200 Close error 255 CP/M error + 204 Bad name + + +New features in BBC BASIC (Z80) version 5.00, May 2024: + +1. BASIC V statements + +1.1 WHILE...ENDWHILE +1.2 Multi-line IF...THEN...ELSE...ENDIF +1.3 CASE...WHEN...OTHERWISE...ENDCASE +1.4 LOCAL DATA / RESTORE DATA +1.5 ON ERROR LOCAL / RESTORE ERROR +1.6 DIM var LOCAL size +1.7 ERROR err, message$ +1.8 RESTORE +n +1.9 SWAP var1,var2 +1.10 BPUT #file,string$[;] +1.11 QUIT + +2. BASIC V functions + +2.1 DIM(array()[,sub]) +2.2 END (pointer to free space) +2.3 REPORT$ +2.4 Binary constants +2.5 LEFT$ & RIGHT$ with last parameter omitted +2.6 MOD(array) +2.7 SUM(array) +2.8 SUMLEN(array) +2.9 GET$#file + +3. BASIC V whole array operations + +3.1 Pass a whole array to a FN/PROC +3.2 Pass a whole array to CALL +3.3 Whole array assignment +3.4 Whole array arithmetic * +3.5 Array dot-product operator +3.6 Array initialisation lists +3.7 Array compound assignment (+= etc.) +3.8 Make a whole array LOCAL +3.9 DIM a LOCAL array (on the stack) + + +* String array expressions A$() = B$() + C$() are not currently supported. ++ LOCAL string arrays should be initialised to their maximum needed length + to eliminate the risk of a memory leak each time the PROC/FN is called: + LOCAL a$() : DIM a$(size%) : a$() = STRING$(max%, "a") : a$() = "" + +4. Miscellaneous BASIC V features + +4.1 Bit-shifts <<, >>, >>> +4.2 Floating-point indirection (|) +4.3 RETURNed parameters from FN/PROC +4.4 Compound assignment (+=, -=, *=, /= etc.) +4.5 Assigning to a sub-string: LEFT$()=, MID$()= , RIGHT$()= +4.6 Hooks for CIRCLE,ELLIPSE,FILL,LINE,MOUSE,ORIGIN,RECTANGLE,TINT,SYS,WAIT +4.7 Hooks for WIDTH function, TINT function, MODE function + +5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY + +5.1 EXIT REPEAT / WHILE / FOR [var] +5.2 Address-of operator ^ +5.3 Byte variables and arrays (& suffix) +5.4 'BY len' and 'TO term' qualifiers to GET$#file +5.5 ELSE IF THEN; (trailing semicolon) +5.6 == synonymous with = in comparisons +5.7 DIM a global array inside a FN/PROC (use RETURN) + +Note: The token for PUT has changed from &CE in version 3 to &0E in version 5. +If this token is present in existing programs it will list as ENDWHILE rather +than PUT, and the programs will need to be modified to restore functionality. \ No newline at end of file diff --git a/Source/Apps/BBCBASIC/cmos.z80 b/Source/Apps/BBCBASIC/cmos.z80 new file mode 100644 index 00000000..c76ce6c3 --- /dev/null +++ b/Source/Apps/BBCBASIC/cmos.z80 @@ -0,0 +1,1494 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1984-2024 + NAME ('CMOS') +; +;PATCH FOR BBC BASIC TO CP/M 2.2 & 3.0 +;* PLAIN VANILLA CP/M VERSION * +;(C) COPYRIGHT R.T.RUSSELL, 25-12-1986 +;VERSION 5.0, 25-05-2024 +; + GLOBAL OSINIT + GLOBAL OSRDCH + GLOBAL OSWRCH + GLOBAL OSLINE + GLOBAL OSSAVE + GLOBAL OSLOAD + GLOBAL OSOPEN + GLOBAL OSSHUT + GLOBAL OSBGET + GLOBAL OSBPUT + GLOBAL OSSTAT + GLOBAL GETEXT + GLOBAL GETPTR + GLOBAL PUTPTR + GLOBAL PROMPT + GLOBAL RESET + GLOBAL LTRAP + GLOBAL OSCLI + GLOBAL TRAP + GLOBAL OSKEY + GLOBAL OSCALL +; + EXTRN BYE + EXTRN GETKEY +; + EXTRN ESCAPE + EXTRN EXTERR + EXTRN CHECK + EXTRN CRLF +; + EXTRN ACCS + EXTRN FREE + EXTRN HIMEM + EXTRN CURLIN + EXTRN USER + EXTRN VERMSG +; +; +;OSSAVE - Save an area of memory to a file. +; Inputs: HL addresses filename (term CR) +; DE = start address of data to save +; BC = length of data to save (bytes) +; Destroys: A,B,C,D,E,H,L,F +; +STSAVE: CALL SAVLOD ;*SAVE + JP C,HUH ;"Bad command" + PUSH HL + JR OSS1 +; +OSSAVE: PUSH BC ;SAVE + CALL SETUP0 +OSS1: EX DE,HL + CALL CREATE + JR NZ,SAVE +DIRFUL: LD A,190 + CALL EXTERR + DEFM 'Directory full' + DEFB 0 +SAVE: CALL WRITE + ADD HL,BC + EX (SP),HL + SBC HL,BC + EX (SP),HL + JR Z,SAVE1 + JR NC,SAVE +SAVE1: POP BC +CLOSE: LD A,16 + CALL BDOS1 + INC A + RET NZ + LD A,200 + CALL EXTERR + DEFM 'Close error' + DEFB 0 +; +;OSSHUT - Close disk file(s). +; Inputs: E = file channel +; If E=0 all files are closed (except SPOOL) +; Destroys: A,B,C,D,E,H,L,F +; +OSSHUT: LD A,E + OR A + JR NZ,SHUTIT +SHUT0: INC E + BIT 3,E + RET NZ + PUSH DE + CALL SHUT1 + POP DE + JR SHUT0 +; +SHUTIT: CALL FIND1 + JR NZ,SHUT2 + JP CHANER +; +SESHUT: LD HL,FLAGS + RES 0,(HL) ;STOP EXEC + RES 1,(HL) ;STOP SPOOL + LD E,8 ;SPOOL/EXEC CHANNEL +SHUT1: CALL FIND1 + RET Z +SHUT2: XOR A + LD (HL),A + DEC HL + LD (HL),A + LD HL,37 + ADD HL,DE + BIT 7,(HL) + INC HL + CALL NZ,WRITE + LD HL,FCBSIZ + ADD HL,DE + LD BC,(FREE) + SBC HL,BC + JR NZ,CLOSE + LD (FREE),DE ;RELEASE SPACE + JR CLOSE +; +;TYPE - *TYPE command. +;Types file to console output. +; +TYPE: SCF ;*TYPE + CALL OSOPEN + OR A + JR Z,NOTFND + LD E,A +TYPE1: LD A,(FLAGS) ;TEST + BIT 7,A ;FOR + JR NZ,TYPESC ;ESCape + CALL OSBGET + CALL OSWRCH ;N.B. CALLS "TEST" + JR NC,TYPE1 + JR OSSHUT +; +TYPESC: CALL OSSHUT ;CLOSE! + JP ABORT +; +;OSLOAD - Load an area of memory from a file. +; Inputs: HL addresses filename (term CR) +; DE = address at which to load +; BC = maximum allowed size (bytes) +; Outputs: Carry reset indicates no room for file. +; Destroys: A,B,C,D,E,H,L,F +; +STLOAD: CALL SAVLOD ;*LOAD + PUSH HL + JR OSL1 +; +OSLOAD: PUSH BC ;LOAD + CALL SETUP0 +OSL1: EX DE,HL + CALL OPEN + JR NZ,LOAD0 +NOTFND: LD A,214 + CALL EXTERR + DEFM 'File not found' + DEFB 0 +LOAD: CALL READ + JR NZ,LOAD1 + CALL INCSEC + ADD HL,BC +LOAD0: EX (SP),HL + SBC HL,BC + EX (SP),HL + JR NC,LOAD +LOAD1: POP BC + PUSH AF + CALL CLOSE + POP AF + CCF +OSCALL: RET +; +;OSOPEN - Open a file for reading or writing. +; Inputs: HL addresses filename (term CR) +; Carry set for OPENIN, cleared for OPENOUT. +; Outputs: A = file channel (=0 if cannot open) +; DE = file FCB +; Destroys: A,B,C,D,E,H,L,F +; +OPENIT: PUSH AF ;SAVE CARRY + CALL SETUP0 + POP AF + CALL NC,CREATE + CALL C,OPEN + RET +; +OSOPEN: CALL OPENIT + RET Z ;ERROR + LD B,7 ;MAX. NUMBER OF FILES + LD HL,TABLE+15 +OPEN1: LD A,(HL) + DEC HL + OR (HL) + JR Z,OPEN2 ;FREE CHANNEL + DEC HL + DJNZ OPEN1 + LD A,192 + CALL EXTERR + DEFM 'Too many open files' + DEFB 0 +; +OPEN2: LD DE,(FREE) ;FREE SPACE POINTER + LD (HL),E + INC HL + LD (HL),D + LD A,B ;CHANNEL (1-7) + LD HL,FCBSIZ + ADD HL,DE ;RESERVE SPACE + LD (FREE),HL +OPEN3: LD HL,FCB ;ENTRY FROM SPOOL/EXEC + PUSH DE + LD BC,36 + LDIR ;COPY FCB + EX DE,HL + INC HL + LD (HL),C ;CLEAR PTR + INC HL + POP DE + LD B,A + CALL RDF ;READ OR FILL + LD A,B + JP CHECK +; +;OSBPUT - Write a byte to a random disk file. +; Inputs: E = file channel +; A = byte to write +; Destroys: A,B,C,F +; +OSBPUT: PUSH DE + PUSH HL + LD B,A + CALL FIND + LD A,B + LD B,0 + DEC HL + LD (HL),B ;CLEAR EOF + INC HL + LD C,(HL) + RES 7,C + SET 7,(HL) + INC (HL) + INC HL + PUSH HL + ADD HL,BC + LD (HL),A + POP HL + CALL Z,WRRDF ;WRITE THEN READ/FILL + POP HL + POP DE + RET +; +;OSBGET - Read a byte from a random disk file. +; Inputs: E = file channel +; Outputs: A = byte read +; Carry set if LAST BYTE of file +; Destroys: A,B,C,F +; +OSBGET: PUSH DE + PUSH HL + CALL FIND + LD C,(HL) + RES 7,C + INC (HL) + INC HL + PUSH HL + LD B,0 + ADD HL,BC + LD B,(HL) + POP HL + CALL PE,INCRDF ;INC SECTOR THEN READ + CALL Z,WRRDF ;WRITE THEN READ/FILL + LD A,B + POP HL + POP DE + RET +; +;OSSTAT - Read file status. +; Inputs: E = file channel +; Outputs: Z flag set - EOF +; (If Z then A=0) +; DE = address of file block. +; Destroys: A,D,E,H,L,F +; +OSSTAT: CALL FIND + DEC HL + LD A,(HL) + INC A + RET +; +;GETEXT - Find file size. +; Inputs: E = file channel +; Outputs: DEHL = file size (0-&800000) +; Destroys: A,B,C,D,E,H,L,F +; +GETEXT: CALL FIND + EX DE,HL + LD DE,FCB + LD BC,36 + PUSH DE + LDIR ;COPY FCB + EX DE,HL + EX (SP),HL + EX DE,HL + LD A,35 + CALL BDOS1 ;COMPUTE SIZE + POP HL + XOR A + JR GETPT1 +; +;GETPTR - Return file pointer. +; Inputs: E = file channel +; Outputs: DEHL = pointer (0-&7FFFFF) +; Destroys: A,B,C,D,E,H,L,F +; +GETPTR: CALL FIND + LD A,(HL) + ADD A,A + DEC HL +GETPT1: DEC HL + LD D,(HL) + DEC HL + LD E,(HL) + DEC HL + LD H,(HL) + LD L,A + SRL D + RR E + RR H + RR L + RET +; +;PUTPTR - Update file pointer. +; Inputs: A = file channel +; DEHL = new pointer (0-&7FFFFF) +; Destroys: A,B,C,D,E,H,L,F +; +PUTPTR: LD D,L + ADD HL,HL + RL E + LD B,E + LD C,H + LD E,A ;CHANNEL + PUSH DE + CALL FIND + POP AF + AND 7FH + BIT 7,(HL) ;PENDING WRITE? + JR Z,PUTPT1 + OR 80H +PUTPT1: LD (HL),A + PUSH DE + PUSH HL + DEC HL + DEC HL + DEC HL + LD D,(HL) + DEC HL + LD E,(HL) + EX DE,HL + OR A + SBC HL,BC + POP HL + POP DE + RET Z + INC HL + OR A + CALL M,WRITE + PUSH HL + DEC HL + DEC HL + DEC HL + LD (HL),0 + DEC HL + LD (HL),B + DEC HL + LD (HL),C ;NEW RECORD NO. + POP HL + JR RDF +; +;WRRDF - Write, read; if EOF fill with zeroes. +;RDF - Read; if EOF fill with zeroes. +; Inputs: DE address FCB. +; HL addresses data buffer. +; Outputs: A=0, Z-flag set. +; Carry set if fill done (EOF) +; Destroys: A,H,L,F +; +WRRDF: CALL WRITE +RDF: CALL READ + DEC HL + RES 7,(HL) + DEC HL + LD (HL),A ;CLEAR EOF FLAG + RET Z + LD (HL),-1 ;SET EOF FLAG + INC HL + INC HL + PUSH BC + XOR A + LD B,128 +FILL: LD (HL),A + INC HL + DJNZ FILL + POP BC + SCF + RET +; +;INCRDF - Increment record, read; if EOF fill. +; Inputs: DE addresses FCB. +; HL addresses data buffer. +; Outputs: A=1, Z-flag reset. +; Carry set if fill done (EOF) +; Destroys: A,H,L,F +; +INCRDF: CALL INCSEC + CALL RDF + INC A + RET +; +;READ - Read a record from a disk file. +; Inputs: DE addresses FCB. +; HL = address to store data. +; Outputs: A<>0 & Z-flag reset indicates EOF. +; Carry = 0 +; Destroys: A,F +; +;BDOS1 - CP/M BDOS call. +; Inputs: A = function number +; DE = parameter +; Outputs: AF = result (carry=0) +; Destroys: A,F +; +READ: CALL SETDMA + LD A,33 +BDOS1: CALL BDOS0 ;* + JR NZ,CPMERR ;* + OR A ;* + RET ;* +CPMERR: LD A,255 ;* CP/M 3 + CALL EXTERR ;* BDOS ERROR + DEFM 'CP/M Error' ;* + DEFB 0 ;* +; +BDOS0: PUSH BC + PUSH DE + PUSH HL + PUSH IX + PUSH IY + LD C,A + CALL BDOS + INC H ;* TEST H + DEC H ;* CP/M 3 ONLY + POP IY + POP IX + POP HL + POP DE + POP BC + RET +; +;WRITE - Write a record to a disk file. +; Inputs: DE addresses FCB. +; HL = address to get data. +; Destroys: A,F +; +WRITE: CALL SETDMA + LD A,40 + CALL BDOS1 + JR Z,INCSEC + LD A,198 + CALL EXTERR + DEFM 'Disk full' + DEFB 0 +; +;INCSEC - Increment random record number. +; Inputs: DE addresses FCB. +; Destroys: F +; +INCSEC: PUSH HL + LD HL,33 + ADD HL,DE +INCS1: INC (HL) + INC HL + JR Z,INCS1 + POP HL + RET +; +;OPEN - Open a file for access. +; Inputs: FCB set up. +; Outputs: DE = FCB +; A=0 & Z-flag set indicates Not Found. +; Carry = 0 +; Destroys: A,D,E,F +; +OPEN: LD DE,FCB + LD A,15 + CALL BDOS1 + INC A + RET +; +;CREATE - Create a disk file for writing. +; Inputs: FCB set up. +; Outputs: DE = FCB +; A=0 & Z-flag set indicates directory full. +; Carry = 0 +; Destroys: A,D,E,F +; +CREATE: CALL CHKAMB + LD DE,FCB + LD A,19 + CALL BDOS1 ;DELETE + LD A,22 + CALL BDOS1 ;MAKE + INC A + RET +; +;CHKAMB - Check for ambiguous filename. +; Destroys: A,D,E,F +; +CHKAMB: PUSH BC + LD DE,FCB + LD B,12 +CHKAM1: LD A,(DE) + CP '?' + JR Z,AMBIG ;AMBIGUOUS + INC DE + DJNZ CHKAM1 + POP BC + RET +AMBIG: LD A,204 + CALL EXTERR + DEFM 'Bad name' + DEFB 0 +; +;SETDMA - Set "DMA" address. +; Inputs: HL = address +; Destroys: A,F +; +SETDMA: LD A,26 + EX DE,HL + CALL BDOS0 + EX DE,HL + RET +; +;FIND - Find file parameters from channel. +; Inputs: E = channel +; Outputs: DE addresses FCB +; HL addresses pointer byte (FCB+37) +; Destroys: A,D,E,H,L,F +; +FIND: INC E ;N.B. channel 8 is SPOOL/EXEC + DEC E + JR Z,CHANER + CALL FIND1 + LD HL,37 + ADD HL,DE + RET NZ +CHANER: LD A,222 + CALL EXTERR + DEFM 'Invalid channel' + DEFB 0 +; +;FIND1 - Look up file table. +; Inputs: E = channel +; Outputs: Z-flag set = file not opened +; If NZ, DE addresses FCB +; HL points into table +; Destroys: A,D,E,H,L,F +; +FIND1: LD A,E + AND 7 + ADD A,A + LD E,A + LD D,0 + LD HL,TABLE + ADD HL,DE + LD E,(HL) + INC HL + LD D,(HL) + LD A,D + OR E + RET +; +;SETUP - Set up File Control Block. +; Inputs: HL addresses filename +; Format [A:]FILENAME[.EXT] +; Device defaults to current drive +; Extension defaults to .BBC +; A = fill character +; Outputs: HL updated +; A = terminator +; BC = 128 +; Destroys: A,B,C,H,L,F +; +;FCB FORMAT (36 BYTES TOTAL): +; 0 0=SAME DISK, 1=DISK A, 2=DISK B (ETC.) +; 1-8 FILENAME, PADDED WITH SPACES +; 9-11 EXTENSION, PADDED WITH SPACES +; 12 CURRENT EXTENT, SET TO ZERO +; 32-35 CLEARED TO ZERO +; +SETUP0: LD A,' ' +SETUP: PUSH DE + PUSH HL + LD DE,FCB+9 + LD HL,BBC + LD BC,3 + LDIR + LD HL,FCB+32 + LD B,4 +SETUP1: LD (HL),C + INC HL + DJNZ SETUP1 + POP HL + LD C,A + XOR A + LD (DE),A + POP DE + CALL SKIPSP + CP '"' + JR NZ,SETUP2 + INC HL + CALL SKIPSP + CALL SETUP2 + CP '"' + INC HL + JR Z,SKIPSP +BADSTR: LD A,253 + CALL EXTERR + DEFM 'Bad string' + DEFB 0 +; +PARSE: LD A,(HL) + INC HL + CP '`' + RET NC + CP '?' + RET C + XOR 40H + RET +; +SETUP2: PUSH DE + INC HL + LD A,(HL) + CP ':' + DEC HL + LD A,B + JR NZ,DEVICE + LD A,(HL) ;DRIVE + AND 31 + INC HL + INC HL +DEVICE: LD DE,FCB + LD (DE),A + INC DE + LD B,8 +COPYF: LD A,(HL) + CP '.' + JR Z,COPYF1 + CP ' ' + JR Z,COPYF1 + CP CR + JR Z,COPYF1 + CP '=' + JR Z,COPYF1 + CP '"' + JR Z,COPYF1 + LD C,'?' + CP '*' + JR Z,COPYF1 + LD C,' ' + INC HL + CP '|' + JR NZ,COPYF2 + CALL PARSE + JR COPYF0 +COPYF1: LD A,C +COPYF2: CALL UPPRC +COPYF0: LD (DE),A + INC DE + DJNZ COPYF +COPYF3: LD A,(HL) + INC HL + CP '*' + JR Z,COPYF3 + CP '.' + LD BC,3*256+' ' + LD DE,FCB+9 + JR Z,COPYF + DEC HL + POP DE + LD BC,128 +SKIPSP: LD A,(HL) + CP ' ' + RET NZ + INC HL + JR SKIPSP +; +BBC: DEFM 'BBC' +; +;HEX - Read a hex string and convert to binary. +; Inputs: HL = text pointer +; Outputs: HL = updated text pointer +; DE = value +; A = terminator (spaces skipped) +; Destroys: A,D,E,H,L,F +; +HEX: LD DE,0 ;INITIALISE + CALL SKIPSP +HEX1: LD A,(HL) + CALL UPPRC + CP '0' + JR C,SKIPSP + CP '9'+1 + JR C,HEX2 + CP 'A' + JR C,SKIPSP + CP 'F'+1 + JR NC,SKIPSP + SUB 7 +HEX2: AND 0FH + EX DE,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + EX DE,HL + OR E + LD E,A + INC HL + JR HEX1 +; +;OSCLI - Process an "operating system" command +; +OSCLI: CALL SKIPSP + CP CR + RET Z + CP '|' + RET Z + CP '.' + JP Z,DOT ;*. + EX DE,HL + LD HL,COMDS +OSCLI0: LD A,(DE) + CALL UPPRC + CP (HL) + JR Z,OSCLI2 + JR C,HUH +OSCLI1: BIT 7,(HL) + INC HL + JR Z,OSCLI1 + INC HL + INC HL + JR OSCLI0 +; +OSCLI2: PUSH DE +OSCLI3: INC DE + INC HL + LD A,(DE) + CALL UPPRC + CP '.' ;ABBREVIATED? + JR Z,OSCLI4 + XOR (HL) + JR Z,OSCLI3 + CP 80H + JR Z,OSCLI4 + POP DE + JR OSCLI1 +; +OSCLI4: POP AF + INC DE +OSCLI5: BIT 7,(HL) + INC HL + JR Z,OSCLI5 + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + PUSH HL + EX DE,HL + JP SKIPSP +; +; +ERA: CALL SETUP0 ;*ERA, *ERASE + LD C,19 + JR XEQ ;"DELETE" +; +RES: LD C,13 ;*RESET + JR XEQ ;"RESET" +; +DRV: CALL SETUP0 ;*DRIVE + LD A,(FCB) + DEC A + JP M,HUH + LD E,A + LD C,14 + JR XEQ0 +; +REN: CALL SETUP0 ;*REN, *RENAME + CP '=' + JR NZ,HUH + INC HL ;SKIP "=" + PUSH HL + CALL EXISTS + LD HL,FCB + LD DE,FCB+16 + LD BC,12 + LDIR + POP HL + CALL SETUP0 + CALL CHKAMB + LD C,23 +XEQ: LD DE,FCB +XEQ0: LD A,(HL) + CP CR + JR NZ,HUH +BDC: LD A,C + CALL BDOS1 + RET P +HUH: LD A,254 + CALL EXTERR + DEFM 'Bad command' + DEFB 0 +; +EXISTS: LD HL,DSKBUF + CALL SETDMA + LD DE,FCB + LD A,17 + CALL BDOS1 ;SEARCH + INC A + RET Z + LD A,196 + CALL EXTERR + DEFM 'File exists' + DEFB 0 +; +SAVLOD: CALL SETUP0 ;PART OF *SAVE, *LOAD + CALL HEX + CP '+' + PUSH AF + PUSH DE + JR NZ,SAVLO1 + INC HL +SAVLO1: CALL HEX + CP CR + JR NZ,HUH + EX DE,HL + POP DE + POP AF + RET Z + OR A + SBC HL,DE + RET NZ + JR HUH +; +DOT: INC HL +DIR: LD A,'?' ;*DIR + CALL SETUP + CP CR + JR NZ,HUH + LD C,17 +DIR0: LD B,4 +DIR1: CALL LTRAP + LD DE,FCB + LD HL,DSKBUF + CALL SETDMA + LD A,C + CALL BDOS1 ;SEARCH DIRECTORY + JP M,CRLF + RRCA + RRCA + RRCA + AND 60H + LD E,A + LD D,0 + LD HL,DSKBUF+1 + ADD HL,DE + PUSH HL + LD DE,8 ;** + ADD HL,DE + LD E,(HL) ;** + INC HL ;** + BIT 7,(HL) ;SYSTEM FILE? + POP HL + LD C,18 + JR NZ,DIR1 + PUSH BC + LD A,(FCB) + DEC A + LD C,25 + CALL M,BDC + ADD A,'A' + CALL OSWRCH + LD B,8 + LD A,' ' ;** + BIT 7,E ;** READ ONLY? + JR Z,DIR3 ;** + LD A,'*' ;** +DIR3: CALL CPTEXT + LD B,3 + LD A,' ' ;** + CALL SPTEXT + POP BC + DJNZ DIR2 + CALL CRLF + JR DIR0 +; +DIR2: PUSH BC + LD B,5 +PAD: LD A,' ' + CALL OSWRCH + DJNZ PAD + POP BC + JR DIR1 +; +OPT: CALL HEX ;*OPT + LD A,E + AND 3 +SETOPT: LD (OPTVAL),A + RET +; +RESET: XOR A + JR SETOPT +; +EXEC: LD A,00000001B ;*EXEC + DEFB 1 ;SKIP 2 BYTES (LD BC) +SPOOL: LD A,00000010B ;*SPOOL + PUSH AF + PUSH HL + CALL SESHUT ;STOP SPOOL/EXEC + POP HL + POP BC + LD A,(HL) + CP CR ;JUST SHUT? + RET Z + LD A,(FLAGS) + OR B + LD (FLAGS),A ;SPOOL/EXEC FLAG + RRA ;CARRY=1 FOR EXEC + CALL OPENIT ;OPEN SPOOL/EXEC FILE + RET Z ;DIR FULL / NOT FOUND + POP IX ;RETURN ADDRESS + LD HL,(HIMEM) + OR A + SBC HL,SP ;SP=HIMEM? + ADD HL,SP + JR NZ,JPIX ;ABORT + LD BC,-FCBSIZ + ADD HL,BC ;HL=HL-FCBSIZ + LD (HIMEM),HL ;NEW HIMEM + LD (TABLE),HL ;FCB/BUFFER + LD SP,HL ;NEW SP + EX DE,HL + CALL OPEN3 ;FINISH OPEN OPERATION +JPIX: JP (IX) ;"RETURN" +; +UPPRC: AND 7FH + CP '`' + RET C + AND 5FH ;CONVERT TO UPPER CASE + RET +; +HELP: LD B,32 + LD HL,VERMSG + JP PTEXT +; +;*ESC COMMAND +; +ESCCTL: LD A,(HL) + CALL UPPRC ;** + CP 'O' + JR NZ,ESCC1 + INC HL +ESCC1: CALL HEX + LD A,E + OR A + LD HL,FLAGS + RES 6,(HL) ;ENABLE ESCAPE + RET Z + SET 6,(HL) ;DISABLE ESCAPE + RET +; +; +COMDS: DEFM 'BY' + DEFB 'E'+80H + DEFW BYE + DEFM 'DI' + DEFB 'R'+80H + DEFW DIR + DEFM 'DRIV' + DEFB 'E'+80H + DEFW DRV + DEFM 'ERAS' + DEFB 'E'+80H + DEFW ERA + DEFM 'ER' + DEFB 'A'+80H + DEFW ERA + DEFM 'ES' + DEFB 'C'+80H + DEFW ESCCTL + DEFM 'EXE' + DEFB 'C'+80H + DEFW EXEC + DEFM 'HEL' + DEFB 'P'+80H + DEFW HELP + DEFM 'LOA' + DEFB 'D'+80H + DEFW STLOAD + DEFM 'OP' + DEFB 'T'+80H + DEFW OPT + DEFM 'QUI' + DEFB 'T'+80H + DEFW BYE + DEFM 'RENAM' + DEFB 'E'+80H + DEFW REN + DEFM 'RE' + DEFB 'N'+80H + DEFW REN + DEFM 'RESE' + DEFB 'T'+80H + DEFW RES + DEFM 'SAV' + DEFB 'E'+80H + DEFW STSAVE + DEFM 'SPOO' + DEFB 'L'+80H + DEFW SPOOL + DEFM 'TYP' + DEFB 'E'+80H + DEFW TYPE + DEFB 0FFH +; +;PTEXT - Print text +; Inputs: HL = address of text +; B = number of characters to print +; Destroys: A,B,H,L,F +; +CPTEXT: PUSH AF ;** + LD A,':' + CALL OSWRCH + POP AF ;** +SPTEXT: CALL OSWRCH ;** +PTEXT: LD A,(HL) + AND 7FH + INC HL + CALL OSWRCH + DJNZ PTEXT + RET +; +;OSINIT - Initialise RAM mapping etc. +;If BASIC is entered by BBCBASIC FILENAME then file +;FILENAME.BBC is automatically CHAINed. +; Outputs: DE = initial value of HIMEM (top of RAM) +; HL = initial value of PAGE (user program) +; Z-flag reset indicates AUTO-RUN. +; Destroys: A,B,C,D,E,H,L,F +; +OSINIT: LD C,45 ;* + LD E,254 ;* + CALL BDOS ;* + XOR A + LD B,INILEN + LD HL,TABLE +CLRTAB: LD (HL),A ;CLEAR FILE TABLE ETC. + INC HL + DJNZ CLRTAB + LD DE,ACCS + LD HL,DSKBUF + LD C,(HL) + INC HL + CP C ;N.B. A=B=0 + JR Z,NOBOOT + LDIR ;COPY TO ACCS +NOBOOT: EX DE,HL + LD (HL),CR + LD DE,(6) ;DE = HIMEM + LD E,A ;PAGE BOUNDARY + LD HL,USER + RET +; +; +;TRAP - Test ESCAPE flag and abort if set; +; every 20th call, test for keypress. +; Destroys: A,H,L,F +; +;LTRAP - Test ESCAPE flag and abort if set. +; Destroys: A,F +; +TRAP: LD HL,TRPCNT + DEC (HL) + CALL Z,TEST20 ;TEST KEYBOARD +LTRAP: LD A,(FLAGS) ;ESCAPE FLAG + OR A ;TEST + RET P +ABORT: LD HL,FLAGS ;ACKNOWLEDGE + RES 7,(HL) ;ESCAPE + JP ESCAPE ;AND ABORT +; +;TEST - Sample for ESCape and CTRL/S. If ESCape +; pressed set ESCAPE flag and return. +; Destroys: A,F +; +TEST20: LD (HL),20 +TEST: PUSH DE + LD A,6 + LD E,0FFH + CALL BDOS0 + POP DE + OR A + RET Z + CP 'S' AND 1FH ;PAUSE DISPLAY? + JR Z,OSRDCH + CP ESC + JR Z,ESCSET + LD (INKEY),A + RET +; +;OSRDCH - Read from the current input stream (keyboard). +; Outputs: A = character +; Destroys: A,F +; +KEYGET: LD B,(IX-12) ;SCREEN WIDTH + CALL OSRDCH + CP DEL + JR Z,KEYDEL + CP 224 + RET NZ + CALL OSRDCH + SUB 65 + RET +; +KEYDEL: LD A,BS + RET +; +OSRDCH: LD A,(FLAGS) + RRA ;*EXEC ACTIVE? + JR C,EXECIN + PUSH HL + SBC HL,HL ;HL=0 + CALL OSKEY + POP HL + RET C + JR OSRDCH +; +;EXECIN - Read byte from EXEC file +; Outputs: A = byte read +; Destroys: A,F +; +EXECIN: PUSH BC ;SAVE REGISTERS + PUSH DE + PUSH HL + LD E,8 ;SPOOL/EXEC CHANNEL + LD HL,FLAGS + RES 0,(HL) + CALL OSBGET + SET 0,(HL) + PUSH AF + CALL C,SESHUT ;END EXEC IF EOF + POP AF + POP HL ;RESTORE REGISTERS + POP DE + POP BC + RET +; +; +;OSKEY - Read key with time-limit, test for ESCape. +;Main function is carried out in user patch. +; Inputs: HL = time limit (centiseconds) +; Outputs: Carry reset if time-out +; If carry set A = character +; Destroys: A,H,L,F +; +OSKEY: PUSH HL + LD HL,INKEY + LD A,(HL) + LD (HL),0 + POP HL + OR A + SCF + RET NZ + PUSH DE + CALL GETKEY + POP DE + RET NC + CP ESC + SCF + RET NZ +ESCSET: PUSH HL + LD HL,FLAGS + BIT 6,(HL) ;ESC DISABLED? + JR NZ,ESCDIS + SET 7,(HL) ;SET ESCAPE FLAG +ESCDIS: POP HL + RET +; +;OSWRCH - Write a character to console output. +; Inputs: A = character. +; Destroys: Nothing +; +OSWRCH: PUSH AF + PUSH DE + PUSH HL + LD E,A + CALL TEST + CALL EDPUT + POP HL + POP DE + POP AF + RET +; +EDPUT: LD A,(FLAGS) + BIT 3,A + JR Z,WRCH + LD A,E + CP ' ' + RET C + LD HL,(EDPTR) + LD (HL),E + INC L + RET Z + LD (EDPTR),HL + RET +; +PROMPT: LD E,'>' +WRCH: LD A,(OPTVAL) ;FAST ENTRY + ADD A,3 + CP 3 + JR NZ,WRCH1 + ADD A,E + LD A,2 + JR C,WRCH1 + LD A,6 +WRCH1: CALL BDOS0 + LD HL,FLAGS + BIT 2,(HL) + LD A,5 ;PRINTER O/P + CALL NZ,BDOS0 + BIT 1,(HL) ;SPOOLING? + RET Z + RES 1,(HL) + LD A,E ;BYTE TO WRITE + LD E,8 ;SPOOL/EXEC CHANNEL + PUSH BC + CALL OSBPUT + POP BC + SET 1,(HL) + RET +; +TOGGLE: LD A,(FLAGS) + XOR 00000100B + LD (FLAGS),A + RET +; +INSERT: LD A,(FLAGS) + XOR 00010000B + LD (FLAGS),A + RET +; +;OSLINE - Read/edit a complete line, terminated by CR. +; Inputs: HL addresses destination buffer. +; (L=0) +; Outputs: Buffer filled, terminated by CR. +; A=0. +; Destroys: A,B,C,D,E,H,L,F +; +OSLINE: LD IX,200H + LD A,(FLAGS) + BIT 3,A ;EDIT MODE? + JR Z,OSLIN1 + RES 3,A + LD (FLAGS),A + LD HL,(EDPTR) + CP L +OSLIN1: LD A,CR + LD (HL),A + CALL NZ,OSWRCH + LD L,0 + LD C,L ;REPEAT FLAG + JR Z,OSWAIT ;SUPPRESS UNWANTED SPACE +UPDATE: LD B,0 +UPD1: LD A,(HL) + INC B + INC HL + CP CR + PUSH AF + PUSH HL + LD E,A + CALL NZ,WRCH ;FAST WRCH + POP HL + POP AF + JR NZ,UPD1 + LD A,' ' + CALL OSWRCH + LD E,BS +UPD2: PUSH HL + CALL WRCH ;FAST WRCH + POP HL + DEC HL + DJNZ UPD2 +OSWAIT: LD A,C + DEC B + JR Z,LIMIT + OR A ;REPEAT COMMAND? +LIMIT: CALL Z,KEYGET ;READ KEYBOARD + LD C,A ;SAVE FOR REPEAT + LD DE,OSWAIT ;RETURN ADDRESS + PUSH DE + LD A,(FLAGS) + OR A ;TEST FOR ESCAPE + LD A,C + JP M,OSEXIT + CP (IX-11) ;CURSOR UP (IX-11) + JP Z,LEFT + CP (IX-10) ;CURSOR DOWN (IX-10) + JP Z,RIGHT + LD B,0 + CP (IX-5) ;CLEAR LEFT (IX-5) + JR Z,BACK + CP (IX-9) ;START OF LINE (IX-9) + JR Z,LEFT + CP (IX-7) ;CLEAR RIGHT (IX-7) + JR Z,DELETE + CP (IX-8) ;END OF LINE (IX-8) + JP Z,RIGHT + LD C,0 ;INHIBIT REPEAT + CP 'P' AND 1FH + JP Z,TOGGLE + CP (IX-1) ;INSERT / OVR (IX-1) + JP Z,INSERT + CP (IX-6) ;DELETE LEFT (IX-6) + JR Z,BACK + CP (IX-4) ;CURSOR LEFT (IX-4) + JR Z,LEFT + CP (IX-2) ;DELETE RIGHT (IX-2) + JR Z,DELETE + CP (IX-3) ;CURSOR RIGHT (IX-3) + JP Z,RIGHT + CP ' ' ;PRINTING CHARACTER + JR NC,SAVECH + CP CR ;ENTER LINE + RET NZ +OSEXIT: LD A,(HL) + CALL OSWRCH ;WRITE REST OF LINE + INC HL + SUB CR + JR NZ,OSEXIT + POP DE ;DITCH RETURN ADDRESS + CP C + JP NZ,ABORT ;ESCAPE + LD A,LF + CALL OSWRCH + LD DE,(CURLIN) + XOR A + LD L,A + LD (EDPTR),HL + CP D + RET NZ + CP E + RET NZ + LD DE,EDITST + LD B,4 +CMPARE: LD A,(DE) + CP (HL) + LD A,0 + RET NZ + INC HL + INC DE + LD A,(HL) + CP '.' + JR Z,ABBR + DJNZ CMPARE +ABBR: XOR A + LD B,A + LD C,L + LD L,A + LD DE,LISTST + EX DE,HL + LDIR + LD HL,FLAGS + SET 3,(HL) + RET +; +BACK: SCF ;DELETE LEFT +LEFT: INC L ;CURSOR LEFT + DEC L + JR Z,STOP + LD A,BS + CALL OSWRCH + DEC L + RET NC +DELETE: LD A,(HL) ;DELETE RIGHT + CP CR + JR Z,STOP + LD D,H + LD E,L +DEL1: INC DE + LD A,(DE) + DEC DE + LD (DE),A + INC DE + CP CR + JR NZ,DEL1 +DEL2: POP DE ;DITCH + JP UPDATE +; +SAVECH: LD D,A + LD A,(FLAGS) + AND 00010000B + LD A,D + JR NZ,RIGHT1 + LD D,A + LD A,CR ;INSERT SPACE + CP (HL) + LD A,D + JR Z,RIGHT1 + LD D,H + LD E,254 + PUSH AF +INS1: INC DE + LD (DE),A + DEC DE + LD A,E + CP L + DEC DE + LD A,(DE) + JR NZ,INS1 + POP AF + LD (HL),A + INC L + JR Z,WONTGO + CALL OSWRCH + JR DEL2 +; +RIGHT: LD A,(HL) ;CURSOR RIGHT + CP CR + JR Z,STOP +RIGHT1: LD D,(HL) ;PRINTING CHARACTER + LD (HL),A + INC L + JR Z,WONTGO ;LINE TOO LONG + CALL OSWRCH + LD A,CR + CP D + RET NZ + LD (HL),A + RET +; +WONTGO: DEC L + LD (HL),CR + LD A,BEL + CALL OSWRCH ;BEEP! +STOP: LD C,0 ;STOP REPEAT + RET +; +; +EDITST: DEFM 'EDIT' +LISTST: DEFM 'LIST' +; +BEL EQU 7 +BS EQU 8 +HT EQU 9 +LF EQU 0AH +VT EQU 0BH +CR EQU 0DH +ESC EQU 1BH +DEL EQU 7FH +; +BDOS EQU 5 +; +FCB EQU 5CH +DSKBUF EQU 80H +; +FCBSIZ EQU 128+36+2 +; +TRPCNT: DEFB 10 +TABLE: DEFS 16 ;FILE BLOCK POINTERS +FLAGS: DEFB 0 +INKEY: DEFB 0 +EDPTR: DEFW 0 +OPTVAL: DEFB 0 +INILEN EQU $-TABLE +; +FIN: END diff --git a/Source/Apps/BBCBASIC/data.z80 b/Source/Apps/BBCBASIC/data.z80 new file mode 100644 index 00000000..a8e1a2c3 --- /dev/null +++ b/Source/Apps/BBCBASIC/data.z80 @@ -0,0 +1,69 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024 + NAME ('DATA') +; +;RAM MODULE FOR BBC BASIC INTERPRETER +;FOR USE WITH VERSION 5.0 OF BBC BASIC +;(C) COPYRIGHT R.T.RUSSELL 1981-2024 +; + GLOBAL ACCS + GLOBAL BUFFER + GLOBAL ONERSP + GLOBAL LIBASE + GLOBAL PAGE + GLOBAL LOMEM + GLOBAL FREE + GLOBAL HIMEM + GLOBAL RANDOM + GLOBAL COUNT + GLOBAL WIDTH + GLOBAL ERL + GLOBAL ERR + GLOBAL ERRTRP + GLOBAL ERRTXT + GLOBAL TRACEN + GLOBAL AUTONO + GLOBAL INCREM + GLOBAL LISTON + GLOBAL DATPTR + GLOBAL FNPTR + GLOBAL PROPTR + GLOBAL STAVAR + GLOBAL OC + GLOBAL PC + GLOBAL DYNVAR + GLOBAL CURLIN + GLOBAL USER +; +;n.b. ACCS, BUFFER & STAVAR must be on page boundaries. +; +ACCS: DEFS 256 ;STRING ACCUMULATOR +BUFFER: DEFS 256 ;STRING INPUT BUFFER +STAVAR: DEFS 27*4 ;STATIC VARIABLES +OC EQU STAVAR+15*4 ;CODE ORIGIN (O%) +PC EQU STAVAR+16*4 ;PROGRAM COUNTER (P%) +DYNVAR: DEFS 54*2 ;DYN. VARIABLE POINTERS +FNPTR: DEFS 2 ;DYN. FUNCTION POINTER +PROPTR: DEFS 2 ;DYN. PROCEDURE POINTER +; +PAGE: DEFS 2 ;START OF USER PROGRAM +LOMEM: DEFS 2 ;START OF DYN. STORAGE +FREE: DEFS 2 ;FIRST FREE-SPACE BYTE +HIMEM: DEFS 2 ;FIRST BYTE ABOVE STACK +LIBASE: DEFS 2 ;START OF FIRST LIBRARY +; +TRACEN: DEFS 2 ;TRACE FLAG AND NUMBER +AUTONO: DEFS 2 ;AUTO FLAG AND NUMBER +ERRTRP: DEFS 2 ;ON ERROR STMT POINTER \ +ONERSP: DEFS 2 ;ON ERROR LOCAL STKPTR / +ERRTXT: DEFS 2 ;ERROR MESSAGE POINTER +DATPTR: DEFS 2 ;DATA POINTER +ERL: DEFS 2 ;LINE NO OF LAST ERROR +CURLIN: DEFS 2 ;POINTER TO CURRENT LINE +RANDOM: DEFS 5 ;RANDOM NUMBER +COUNT: DEFS 1 ;PRINT POSITION +WIDTH: DEFS 1 ;PRINT WIDTH +ERR: DEFS 1 ;ERROR NUMBER +LISTON: DEFS 1 ;LISTO & OPT FLAG +INCREM: DEFS 1 ;AUTO INCREMENT +; +USER: END diff --git a/Source/Apps/BBCBASIC/dist.z80 b/Source/Apps/BBCBASIC/dist.z80 new file mode 100644 index 00000000..abfb5560 --- /dev/null +++ b/Source/Apps/BBCBASIC/dist.z80 @@ -0,0 +1,241 @@ + TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982-2024 + NAME ('DIST3') +; +;BBC BASIC (Z80) - CP/M VERSION 2.20 & 3.00 +;(C) COPYRIGHT R.T.RUSSELL, 1982-2024. +;ALL RIGHTS RESERVED. +; +;THIS PROGRAM ALLOWS THE USER TO ADAPT BBC BASIC TO THE +;PARTICULAR CHARACTERISTICS OF HIS SYSTEM HARDWARE ETC. +; +;THE PROGRAM RESIDES AT 100H FOR EASE OF LOADING. +;*** IT MUST NOT EXCEED 256 BYTES IN TOTAL LENGTH *** +; +;PLEASE NOTE THAT A Z80 PROCESSOR AND CP/M VERSION 2.2 +;OR LATER ARE REQUIRED. +; +;R.T.RUSSELL, 11-03-1984, 03-05-1989, 12-05-2024 +; +CPM EQU 5 +COLD EQU 200H +; +CR EQU 0DH +LF EQU 0AH +ESC EQU 1BH +; + GLOBAL CLRSCN + GLOBAL PUTCSR + GLOBAL GETCSR + GLOBAL PUTIME + GLOBAL GETIME + GLOBAL GETKEY + GLOBAL BYE + GLOBAL BEGIN +; GLOBAL BDOS +; +; EXTRN PRTDEC16 +; + ;ASEG + ;ORG 100H +; +;JUMP TABLE - BASIC makes calls to hardware-dependent +;features via this table: +; +BEGIN: JP INIT +CLRSCN: JP CLS ;CLEAR SCREEN +PUTCSR: JP PCSR ;SET CURSOR POSN. +GETCSR: JP GCSR ;READ CURSOR POSN. +PUTIME: JP PTIME ;SET ELAPSED TIME +GETIME: JP GTIME ;READ ELAPSED TIME +GETKEY: JP INKEY ;READ KEY (TIME LIMIT) +BYE: JP REBOOT ;RETURN TO CP/M +; +;BDOS - Save the IX and IY registers and before performing a +; CP/M function call. +; +BDOS: PUSH IX + PUSH IY + CALL CPM + POP IY + POP IX + RET +; +;INIT - Perform hardware initialisation (if any). +; +INIT: LD HL,40H ;CPM/HBIOS MARKER LOC + LD A,'W' + CP (HL) + JR NZ,FAIL + INC HL + LD A,NOT 'W' + CP (HL) + JR NZ,FAIL + JP COLD +FAIL: LD DE,NOTHB + LD C,9 + CALL BDOS + RST 0 +; +NOTHB: DEFB 'CP/M w/ HBIOS required$' +; +;REBOOT - Switch off interrupts and return to CP/M +; +REBOOT: RST 0 +; +;GTIME - Read elapsed-time clock. +; Outputs: DEHL = elapsed time (centiseconds) +; Destroys: A,D,E,H,L,F +; +GTIME: JR TICKS +; +;PTIME - Load elapsed-time clock. +; Inputs: DEHL = time to load (centiseconds) +; Destroys: A,D,E,H,L,F +; +PTIME: + LD BC,0F9D0H + SRL D + RR E + RR H + RR L + RST 08 + RET +; +; Get OS elapsed-time clock +; Outputs: DEHL = time (centiseconds) +; Destroys: A,B,C,D,E,H,L,F +; +TICKS: LD BC,0F8D0H + RST 08 + SLA L + RL H + RL E + RL D + RET +; +;INKEY - Sample keyboard with specified wait. +; Inputs: HL = Time to wait (centiseconds) +; Outputs: Carry reset indicates time-out. +; If carry set, A = character typed. +; Destroys: A,D,E,H,L,F +; +INKEY: PUSH BC + PUSH HL + CALL TICKS + POP DE + ADD HL,DE +WAIT: PUSH HL + LD C,6 + LD E,0FFH + CALL BDOS + POP HL + OR A + SCF + JR NZ,INKEY1 + PUSH HL + CALL TICKS + POP DE + SBC HL,DE + EX DE,HL + JR C,WAIT +INKEY1: POP BC + RET +; +;CLS - Clear screen. +; (Customise to suit your VDU) +; Destroys: A,D,E,H,L,F +; +CLS: + LD DE,CLSSTR + LD C,9 + JP BDOS +; +CLSSTR: DEFB ESC,'[H',ESC,'[2J$' +; +;PCSR - Move cursor to specified position. +; Inputs: DE = horizontal position (LHS=0) +; HL = vertical position (TOP=0) +; Destroys: A,D,E,H,L,F +; +PCSR: LD B,L ; vertical = line (row) + CALL CONV ; normalized and convert to decimal + LD (LIN),HL ; and store into string + LD B,E ; horizontal = column + CALL CONV ; normalized and convert to decimal + LD (COL),HL ; and store into string + LD C,9 ; output string command + LD DE,CURS ; start of string + JP BDOS ; output string to terminal +; +; VT100 sequence for cursor positioning +CURS: DEFB 27, '[' +LIN: DEFW 0 ; high byte, low byte for decimal line + DEFB ';' +COL: DEFW 0 ; high byte, low byte for decimal column + DEFB 'H$' +; +; convert binary B (0 <= B < 99, not checked) into B+1 in decimal. +; L = upper byte, H = lower byte. ready for LD (...), HL +; destroys A, B, L, H +; optimized for space over time +; +CONV: INC B ; normalize, home in VT100 is (1,1) + LD A,'0' ; A is counter for low byte of result + LD L,A ; L is counter for high byte of result +CONVLP: INC A ; now B times increment AL in decimal + CP '9'+1 ; low byte overflow? + JR NZ,CONT ; no, continue incrementing + LD A,'0' ; reset low byte + INC L ; and increment high byte +CONT: DJNZ CONVLP ; B times + LD H,A ; put low byte into right place + RET +; +;GCSR - Return cursor coordinates. +; Outputs: DE = X coordinate (POS) +; HL = Y coordinate (VPOS) +; Destroys: A,D,E,H,L,F +; +GCSR: LD DE,0 + LD HL,0 + RET +; +;COUT - Output a character to the console +; Inputs: A = character +; Destroys: A,F +; +COUT: PUSH BC + PUSH DE + PUSH HL + LD E,A + LD C,2 + CALL BDOS + POP HL + POP DE + POP BC + RET +; + ;IF $ GT 1F0H + IF $-BEGIN GT 0F0H + ERROR 'INSUFFICIENT SPACE' + ENDIF +; + ;ORG 1F0H + DEFS 0F0H - ($ - BEGIN) +; +OFFLO: DEFW 0 ;TIME OFFSET LO +OFFHI: DEFW 0 ;TIME OFFSET HI + DEFB 80 ;WIDTH + DEFB 'G' AND 1FH ;CURSOR UP + DEFB 'O' AND 1FH ;CURSOR DOWN + DEFB 'F' AND 1FH ;START OF LINE + DEFB 'N' AND 1FH ;END OF LINE + DEFB 'X' AND 1FH ;DELETE TO END OF LINE + DEFB 08H ;BACKSPACE & DELETE + DEFB 'U' AND 1FH ;DEL TO START OF LINE + DEFB 'J' AND 1FH ;CURSOR LEFT + DEFB 'L' AND 1FH ;CURSOR RIGHT + DEFB 'R' AND 1FH ;DELETE CHARACTER + DEFB 'Q' AND 1FH ;INS/OVR TOGGLE +; +FIN: END diff --git a/Source/Apps/BBCBASIC/eval.z80 b/Source/Apps/BBCBASIC/eval.z80 new file mode 100644 index 00000000..0e445df3 --- /dev/null +++ b/Source/Apps/BBCBASIC/eval.z80 @@ -0,0 +1,2587 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024 + NAME ('EVAL') +; +;BBC BASIC INTERPRETER - Z80 VERSION +;EVALUATE EXPRESSION MODULE - "EVAL" +;(C) COPYRIGHT R.T.RUSSELL 1981-2024 +; +;THE NAME BBC BASIC IS USED WITH THE PERMISSION +;OF THE BRITISH BROADCASTING CORPORATION AND IS +;NOT TRANSFERRABLE TO A FORKED OR DERIVED WORK. +; +;VERSION 2.3, 07-05-1984 +;VERSION 3.0, 08-03-1987 +;VERSION 5.0, 14-05-2024 +; +;BINARY FLOATING POINT REPRESENTATION: +; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA +; 8 BIT EXCESS-128 SIGNED EXPONENT +; SIGN BIT REPLACES MANTISSA MSB (IMPLIED "1") +; MANTISSA=0 & EXPONENT=0 IMPLIES VALUE IS ZERO. +; +;BINARY INTEGER REPRESENTATION: +; 32 BIT 2'S-COMPLEMENT SIGNED INTEGER +; "EXPONENT" BYTE = 0 (WHEN PRESENT) +; +;NORMAL REGISTER ALLOCATION: MANTISSA - HLH'L' +; EXPONENT - C +; + GLOBAL EXPR + GLOBAL EXPRN + GLOBAL EXPRI + GLOBAL EXPRS + GLOBAL ITEMI + GLOBAL CONS + GLOBAL LOADS + GLOBAL VAL0 + GLOBAL SFIX + GLOBAL STR + GLOBAL HEXSTR + GLOBAL LOAD4 + GLOBAL LOADN + GLOBAL DLOAD5 + GLOBAL TEST + GLOBAL ZERO + GLOBAL COMMA + GLOBAL BRAKET + GLOBAL DECODE + GLOBAL PUSHS + GLOBAL POPS + GLOBAL SEARCH + GLOBAL SCP + GLOBAL LETARR +; + EXTRN MUL16 + EXTRN ERROR + EXTRN SYNTAX + EXTRN CHANEL + EXTRN CHNL + EXTRN STOREN + EXTRN STORE4 + EXTRN STORE5 + EXTRN STACCS + EXTRN CHECK + EXTRN USR + EXTRN VAR + EXTRN FN + EXTRN XEQ + EXTRN NXT + EXTRN X14OR5 + EXTRN MODIFY + EXTRN MODIFS + EXTRN TERMQ +; + EXTRN GETVAR + EXTRN LEXAN2 + EXTRN RANGE + EXTRN GETTOP +; + EXTRN STAVAR + EXTRN PAGE + EXTRN LOMEM + EXTRN HIMEM + EXTRN RANDOM + EXTRN COUNT + EXTRN LISTON + EXTRN PC + EXTRN ERL + EXTRN ERR + EXTRN ACCS + EXTRN ERRTXT + EXTRN KEYWDS + EXTRN KEYWDL + EXTRN FREE + EXTRN BUFFER +; + EXTRN OSRDCH + EXTRN OSOPEN + EXTRN OSBGET + EXTRN OSSTAT + EXTRN GETCSR + EXTRN GETIME + EXTRN GETIMS + EXTRN GETEXT + EXTRN GETPTR + EXTRN OSKEY +; + EXTRN POINT + EXTRN ADVAL + EXTRN TINTFN + EXTRN MODEFN + EXTRN WIDFN +; + EXTRN FPP +; +FUNTOK EQU 8DH ;1st FUNCTION TOKEN +TMOD EQU 83H +TLEN EQU 0A9H +TTO EQU 0B8H +TDIM EQU 0DEH +TEND EQU 0E0H +TMODE EQU 0EBH +TREPORT EQU 0F6H +TWIDTH EQU 0FEH +TTINT EQU 0AH +TBY EQU 0FH +; +;TABLE OF ADDRESSES FOR FUNCTIONS: +; +FUNTBL: DEFW DECODE ;Line number + DEFW OPENIN ;OPENIN + DEFW PTR ;PTR + DEFW PAGEV ;PAGE + DEFW TIMEV ;TIME + DEFW LOMEMV ;LOMEM + DEFW HIMEMV ;HIMEM + DEFW ABS ;ABS + DEFW ACS ;ACS + DEFW ADVAL ;ADVAL + DEFW ASC ;ASC + DEFW ASN ;ASN + DEFW ATN ;ATN + DEFW BGET ;BGET + DEFW COS ;COS + DEFW COUNTV ;COUNT + DEFW DEG ;DEG + DEFW ERLV ;ERL + DEFW ERRV ;ERR + DEFW EVAL ;EVAL + DEFW EXP ;EXP + DEFW EXT ;EXT + DEFW ZERO ;FALSE + DEFW FN ;FN + DEFW GET ;GET + DEFW INKEY ;INKEY + DEFW INSTR ;INSTR( + DEFW INT ;INT + DEFW LEN ;LEN + DEFW LN ;LN + DEFW LOG ;LOG + DEFW CPL ;NOT + DEFW OPENUP ;OPENUP + DEFW OPENOT ;OPENOUT + DEFW PI ;PI + DEFW POINT ;POINT( + DEFW POS ;POS + DEFW RAD ;RAD + DEFW RND ;RND + DEFW SGN ;SGN + DEFW SIN ;SIN + DEFW SQR ;SQR + DEFW TAN ;TAN + DEFW TOPV ;TO(P) + DEFW TRUE ;TRUE + DEFW USR ;USR + DEFW VAL ;VAL + DEFW VPOS ;VPOS + DEFW CHRS ;CHR$ + DEFW GETS ;GET$ + DEFW INKEYS ;INKEY$ + DEFW LEFTS ;LEFT$( + DEFW MIDS ;MID$( + DEFW RIGHTS ;RIGHT$( + DEFW STRS ;STR$ + DEFW STRING ;STRING$( + DEFW EOF ;EOF + DEFW SUM ;SUM +; +TCMD EQU FUNTOK+($-FUNTBL)/2 +; +CR EQU 0DH +LF EQU 0AH +AND EQU 80H +DIV EQU 81H +EOR EQU 82H +MOD EQU 83H +OR EQU 84H +; +SOPTBL: DEFW SLE ;<= (STRING) + DEFW SNE ;<> + DEFW SGE ;>= + DEFW SLT ;< + DEFW SEQ ;= + DEFW SGT ;> +; +;EXPR - VARIABLE-TYPE EXPRESSION EVALUATION +; Expression type is returned in A'F': +; Numeric - A' bit 7=0, F' sign bit cleared. +; String - A' bit 7=1, F' sign bit set. +;Floating-point or integer result returned in HLH'L'C +; Integer result denoted by C=0 and HLH'L' non-zero. +;String result returned in string accumulator, DE set. +; +;Hierarchy is: (1) Variables, functions, +; constants, bracketed expressions. +; (2) ^ +; (3) * / MOD DIV +; (4) + - +; (5) = <> <= >= > < +; (6) AND +; (7) EOR OR +; +EXPR: CALL EXPR1 ;GET FIRST OPERAND +EXPR0A: CP EOR ;CHECK OPERATOR + JR Z,EXPR0B + CP OR + RET NZ +EXPR0B: CALL SAVE ;SAVE FIRST OPERAND + CALL EXPR1 ;GET SECOND OPERAND + CALL DOIT ;DO OPERATION + JR EXPR0A ;CONTINUE +; +EXPR1: CALL EXPR2 +EXPR1A: CP AND + RET NZ + CALL SAVE + CALL EXPR2 + CALL DOIT + JR EXPR1A +; +EXPR2: CALL EXPR3 + CALL RELOPQ + RET NZ + LD B,A + INC IY ;BUMP OVER OPERATOR + CALL NXT + CALL RELOPQ ;COMPOUND OPERATOR? + JR NZ,EXPR2B + INC IY + CP B + JR Z,SHIFT ;SHIFT OR == + ADD A,B + LD B,A +EXPR2B: LD A,B + EX AF,AF' + JP M,EXPR2S + EX AF,AF' + SUB 4 + CP '>'-4 + JR NZ,EXPR2C + ADD A,2 +EXPR2C: AND 0FH +EXPR2D: CALL SAVE1 + CALL EXPR3 + CALL DOIT ;Must NOT be "JP DOIT" + RET +; +SHIFT: CP '=' + JR Z,EXPR2B ;== + CALL NXT + CALL RELOPQ + JR NZ,SHIFT1 + CP B + JP NZ,SYNTAX + INC IY + INC B +SHIFT1: LD A,B + SUB 18 + JR EXPR2D +; +EXPR2S: EX AF,AF' + DEC A + AND 7 + CALL PUSHS ;SAVE STRING ON STACK + PUSH AF ;SAVE OPERATOR + CALL EXPR3 ;SECOND STRING + EX AF,AF' + JP P,MISMAT + POP AF + LD C,E ;LENGTH OF STRING #2 + POP DE + LD HL,0 + ADD HL,SP + LD B,E ;LENGTH OF STRING #1 + PUSH DE + LD DE,ACCS + EX DE,HL + CALL DISPT2 + POP DE + EX DE,HL + LD H,0 + ADD HL,SP + LD SP,HL + EX DE,HL + XOR A ;NUMERIC MARKER + LD C,A ;INTEGER MARKER + EX AF,AF' + LD A,(IY) + RET +; +EXPR3: CALL EXPR4 +EXPR3A: CP '-' + JR Z,EXPR3B + CP '+' + RET NZ + EX AF,AF' + JP M,EXPR3S + EX AF,AF' +EXPR3B: CALL SAVE + CALL EXPR4 + CALL DOIT + JR EXPR3A +; +EXPR3S: EX AF,AF' + INC IY ;BUMP PAST '+' + CALL PUSHS ;SAVE STRING ON STACK + CALL EXPR4 ;SECOND STRING + EX AF,AF' + JP P,MISMAT + LD C,E ;C=LENGTH + POP DE + PUSH DE + LD HL,ACCS + LD D,H + LD A,C + OR A + JR Z,EXP3S3 + LD B,L + LD L,A ;SOURCE + ADD A,E + LD E,A ;DESTINATION + LD A,19 + JR C,ERROR2 ;"String too long" + PUSH DE + DEC E + DEC L + LDDR ;COPY + POP DE +EXP3S3: EXX + POP BC + CALL POPS ;RESTORE FROM STACK + EXX + OR 80H ;FLAG STRING + EX AF,AF' + LD A,(IY) + JR EXPR3A +; +EXPR4: CALL EXPR5 +EXPR4A: CP '*' + JR Z,EXPR4B + CP '/' + JR Z,EXPR4B + CP MOD + JR Z,EXPR4B + CP DIV + RET NZ +EXPR4B: CALL SAVE + CALL EXPR5 + CALL DOIT + JR EXPR4A +; +EXPR5: CALL ITEM + OR A ;TEST TYPE + EX AF,AF' ;SAVE TYPE +EXPR5A: CALL NXT + CP '^' + RET NZ + CALL SAVE + CALL ITEM + OR A + EX AF,AF' + CALL DOIT + JR EXPR5A +; +EXPRN: CALL EXPR + EX AF,AF' + RET P + JR MISMAT +; +EXPRI: CALL EXPR + EX AF,AF' + JP P,SFIX + JR MISMAT +; +EXPRS: CALL EXPR + EX AF,AF' + RET M + JR MISMAT +; +NEGATE: EXX + LD A,H + CPL + LD H,A + LD A,L + CPL + LD L,A + EXX + LD A,H + CPL + LD H,A + LD A,L + CPL + LD L,A +ADD1: EXX + INC HL + LD A,H + OR L + EXX + LD A,0 ;NUMERIC MARKER + RET NZ + INC HL + RET +; +BADHEX: LD A,28 +ERROR2: JP ERROR ;"Bad HEX or binary" +; +ITEMI: CALL ITEM + OR A + JP P,SFIX + JR MISMAT +; +ITEMS: CALL ITEM + OR A + RET M +MISMAT: LD A,6 + JR ERROR2 ;"Type mismatch" +; +ITEM1: CALL EXPR ;BRACKETED EXPR + CALL BRAKET + EX AF,AF' + RET +; +ITEMN: CALL ITEM + OR A + RET P + JR MISMAT +; +;HEX - Get hexadecimal constant. +; Inputs: ASCII string at (IY) +; Outputs: Integer result in H'L'HL, C=0, A7=0. +; IY updated (points to delimiter) +; +HEX: CALL ZERO + CALL HEXDIG + JR C,BADHEX +HEX1: INC IY + AND 0FH + LD B,4 +HEX2: EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ HEX2 + EXX + OR L + LD L,A + EXX + CALL HEXDIG + JR NC,HEX1 + XOR A + RET +; +;BIN - Get binary constant. +; Inputs: ASCII string at (IY) +; Outputs: Integer result in H'L'HL, C=0, A=0. +; IY updated (points to delimiter) +; +BIN: CALL ZERO + CALL BINDIG + JR C,BADHEX +BIN1: INC IY + RR A + EXX + ADC HL,HL + EXX + ADC HL,HL + CALL BINDIG + JR NC,BIN1 + XOR A + RET +; +;MINUS - Unary minus. +; Inputs: IY = text pointer +; Outputs: Numeric result, same type as argument. +; Result in H'L'HLC +; +MINUS: CALL ITEMN +MINUS0: DEC C + INC C + JR Z,NEGATE ;ZERO/INTEGER + LD A,H + XOR 80H ;CHANGE SIGN (FP) + LD H,A + XOR A ;NUMERIC MARKER + RET +; +ADDROF: CALL VAR + PUSH HL + EXX + POP HL + JP COUNT1 +; +;ITEM - VARIABLE TYPE NUMERIC OR STRING ITEM. +;Item type is returned in A: Bit 7=0 numeric. +; Bit 7=1 string. +;Numeric item returned in HLH'L'C. +;String item returned in string accumulator, +; DE addresses byte after last (E=length). +; +ITEM: CALL CHECK + CALL NXT + INC IY + CP FUNTOK + JR C,ITEM0 + CP TCMD + JP C,DISPAT ;FUNCTIONS + JP EXTRAS ;DIM, END, MODE, REPORT$, WIDTH +; +ITEM0: CP ':' + JR NC,ITEM2 ;VARIABLES + CP '0' + JR NC,CON ;NUMERIC CONSTANT + CP '(' + JR Z,ITEM1 ;EXPRESSION + CP '-' + JR Z,MINUS ;UNARY MINUS + CP '+' + JR Z,ITEMN ;UNARY PLUS + CP '.' + JR Z,CON ;NUMERIC CONSTANT + CP '&' + JR Z,HEX ;HEX CONSTANT + CP '%' + JR Z,BIN ;BINARY CONSTANT + CP '"' + JR Z,CONS ;STRING CONSTANT + CP TTINT + JP Z,TINT ;TINT FUNCTION +ITEM2: CP TMOD + JP Z,MODFUN ;MOD + CP '^' + JR Z,ADDROF ;^ OPERATOR + DEC IY + CALL GETVAR ;VARIABLE + JR NZ,NOSUCH + BIT 6,A + JR NZ,ARRAY + OR A + JP M,LOADS ;STRING VARIABLE +LOADN: BIT 2,A + LD C,0 + JR Z,LOAD1 ;BYTE VARIABLE + BIT 0,A + JR Z,LOAD4 ;INTEGER VARIABLE +LOAD5: LD C,(IX+4) +LOAD4: EXX + LD L,(IX+0) + LD H,(IX+1) + EXX + LD L,(IX+2) + LD H,(IX+3) + RET +; +LOAD1: LD HL,0 + EXX + LD H,0 + LD L,(IX+0) + EXX + RET +; +NOSUCH: JP C,SYNTAX + LD A,(LISTON) + BIT 5,A + LD A,26 + JR NZ,ERROR0 ;"No such variable" +NOS1: INC IY + CALL RANGE + JR NC,NOS1 + LD IX,PC + XOR A + LD C,A + JR LOAD4 +; +;CON - Get unsigned numeric constant from ASCII string. +; Inputs: ASCII string at (IY-1) +; Outputs: Variable-type result in HLH'L'C +; IY updated (points to delimiter) +; A7 = 0 (numeric marker) +; +CON: DEC IY + PUSH IY + POP IX + LD A,36 + CALL FPP + JR C,ERROR0 + PUSH IX + POP IY + XOR A + RET +; +;CONS - Get string constant from ASCII string. +; Inputs: ASCII string at (IY) +; Outputs: Result in string accumulator. +; D = MS byte of ACCS, E = string length +; A7 = 1 (string marker) +; IY updated +; +CONS: LD DE,ACCS +CONS3: LD A,(IY) + INC IY + CP '"' + JR Z,CONS2 +CONS1: LD (DE),A + INC E + CP CR + JR NZ,CONS3 + LD A,9 +ERROR0: JP ERROR ;"Missing """ +; +CONS2: LD A,(IY) + CP '"' + INC IY + JR Z,CONS1 + DEC IY + LD A,80H ;STRING MARKER + RET +; +ARRAY: LD A,14 ;'Bad use of array' + JP ERROR +; +; ARRLEN - Get start address and number of elements of an array +; Inputs: HL addresses array descriptor +; Outputs: HL = address of first element +; DE = total number of elements +; A = 0 +; Destroys: A,B,C,D,E,H,L,flags +; +ARRLEN: LD A,(HL) ;Number of dimensions + INC HL + OR A + JR Z,ARRAY + LD DE,1 +ARLOOP: LD C,(HL) + INC HL + LD B,(HL) ;BC = size of this dimension + INC HL + EX DE,HL + PUSH AF + PUSH DE + CALL MUL16 ;HL=HL*BC + POP DE + POP AF + EX DE,HL + DEC A + JR NZ,ARLOOP + RET +; +GETARR: CALL NXT + CALL GETVAR + JR NZ,NOSUCH + BIT 6,A + SCF + JR Z,NOSUCH + AND 8FH + LD B,A ;Type + size +GETAR1: LD A,(HL) + INC HL + LD H,(HL) + LD L,A + AND 0FEH + OR H + JR Z,ARRAY ;Bad use of array + RET +; +GETARB: CALL NXT + CP '(' + JR NZ,GETARR + INC IY + CALL GETARR + CALL BRAKET + RET +; +DLOADN: BIT 2,A + LD B,0 + JR Z,DLOAD1 ;BYTE VARIABLE + BIT 0,A + JR Z,DLOAD4 ;INTEGER VARIABLE +DLOAD5: LD B,(IX+4) +DLOAD4: EXX + LD E,(IX+0) + LD D,(IX+1) + EXX + LD E,(IX+2) + LD D,(IX+3) + RET +; +DLOAD1: LD DE,0 + EXX + LD D,0 + LD E,(IX+0) + EXX + RET +; +LOADS: LD DE,ACCS + RRA + JR NC,LOADS2 ;FIXED STRING + CALL LOAD4 + EXX + LD A,L + EXX + OR A + LD C,A + LD A,80H ;STRING MARKER + RET Z + LD B,0 + LDIR + RET +; +LOADS2: LD A,(HL) + LD (DE),A + INC HL + CP CR +REPDUN: LD A,80H ;STRING MARKER + RET Z + INC E + JR NZ,LOADS2 + RET ;RETURN NULL STRING +; +; Version 5 extensions: +; +EXTRAS: CP TMODE + JP Z,MODEFN ;MODE + CP TWIDTH + JP Z,WIDFN ;WIDTH + CP TREPORT + JR Z,REPORS ;REPORT$ + CP TEND + JR Z,ENDFUN ;END + CP TDIM + JR Z,DIMFUN ;DIM +SYNERR: JP SYNTAX ; 'Syntax error' +; +; END (function) +; +ENDFUN: LD HL,(FREE) + JP COUNT1 +; +; REPORT$ +; +REPORS: LD A,(IY) + CP '$' + JR NZ,SYNERR + INC IY + LD HL,(ERRTXT) + LD DE,ACCS +REPCPY: LD A,(HL) + OR A + JR Z,REPDUN + LDI + CP 160 + JP PE,REPCPY + CP LF + JR Z,REPCPY + DEC E + PUSH HL + LD HL,KEYWDS + LD BC,KEYWDL + CPIR + LD B,160 + CP 145 + JP PE,REPTOK + INC B +REPTOK: LD A,(HL) + LDI + CP B + JP PE,REPTOK + POP HL + DEC E + JR REPCPY +; +; DIM(array()[,sub]) +; +DIMFUN: CALL NXT + CP '(' + JR NZ,DIMF0 + INC IY + CALL DIMF0 + CALL BRAKET + RET +; +DIMF0: CALL GETARR + PUSH HL + CALL NXT + LD E,0 + CP ',' + JR NZ,DIMF1 + INC IY + CALL EXPRI + EXX + EX DE,HL + INC E + DEC E + JR Z,BADSUB +DIMF1: POP HL + LD A,(HL) + INC HL + CP E + JR C,BADSUB + DEC E + JP M,DIMF3 + ADD HL,DE + ADD HL,DE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + DEC HL +DIMF2: JP COUNT1 + +DIMF3: LD L,A + LD H,0 + JR DIMF2 +; +BADSUB: LD A,15 + JP ERROR ;"Bad subscript" +; +;VARIABLE-TYPE FUNCTIONS: +; +;Result returned in HLH'L'C (floating point) +;Result returned in HLH'L' (C=0) (integer) +;Result returned in string accumulator & DE (string) +;All registers destroyed. +;IY (text pointer) updated. +;Bit 7 of A indicates type: 0 = numeric, 1 = string. +; +; +;POS - horizontal cursor position. +;VPOS - vertical cursor position. +;EOF - return status of file. +;BGET - read byte from file. +;INKEY - as GET but wait only n centiseconds. +;GET - wait for keypress and return ASCII value. +;GET(n) - input from Z80 port n. +;ASC - ASCII value of string. +;LEN - length of string. +;LOMEM - location of dynamic variables. +;HIMEM - top of available RAM. +;PAGE - start of current text page. +;TOP - address of first free byte after program. +;ERL - line number where last error occurred. +;ERR - number of last error. +;COUNT - number of printing characters since CR. +;Results are integer numeric. +; +TINT: CALL TINTFN + JR COUNT1 +POS: CALL GETCSR + EX DE,HL + JR COUNT1 +VPOS: CALL GETCSR + JR COUNT1 +EOF: CALL CHANEL + CALL OSSTAT + JP Z,TRUE + JP ZERO +BGET: CALL CHANEL ;CHANNEL NUMBER + CALL OSBGET + LD L,A + JR COUNT0 +INKEY: CALL INKEYS + JR ASC0 +GET: CALL NXT + CP '(' + JR NZ,GET0 + CALL ITEMI ;PORT ADDRESS + EXX + LD B,H + LD C,L + IN L,(C) ;INPUT FROM PORT BC + JR COUNT0 +GET0: CALL GETS + JR ASC1 +ASC: CALL ITEMS +ASC0: XOR A + CP E + JP Z,TRUE ;NULL STRING +ASC1: LD HL,(ACCS) + JR COUNT0 +LEN: CALL ITEMS + EX DE,HL + JR COUNT0 +LOMEMV: LD HL,(LOMEM) + JR COUNT1 +HIMEMV: LD HL,(HIMEM) + JR COUNT1 +PAGEV: LD HL,(PAGE) + JR COUNT1 +TOPV: LD A,(IY) + INC IY ;SKIP "P" + CP 'P' + JP NZ,SYNTAX ;"Syntax Error" + CALL GETTOP + JR COUNT1 +ERLV: LD HL,(ERL) + JR COUNT1 +ERRV: LD HL,(ERR) + JR COUNT0 +COUNTV: LD HL,(COUNT) +COUNT0: LD H,0 +COUNT1: EXX + XOR A + LD C,A ;INTEGER MARKER + LD H,A + LD L,A + RET +; +;OPENIN - Open a file for reading. +;OPENOUT - Open a file for writing. +;OPENUP - Open a file for reading or writing. +;Result is integer channel number (0 if error) +; +OPENOT: XOR A + DEFB 21H ;SKIP NEXT 2 BYTES +OPENUP: LD A,2 + DEFB 21H ;SKIP NEXT 2 BYTES +OPENIN: LD A,1 + PUSH AF ;SAVE OPEN TYPE + CALL ITEMS ;FILENAME + LD A,CR + LD (DE),A + POP AF ;RESTORE OPEN TYPE + ADD A,-1 ;AFFECT FLAGS + LD HL,ACCS + CALL OSOPEN + LD L,A + JR COUNT0 +; +;EXT - Return length of file. +;PTR - Return current file pointer. +;Results are integer numeric. +; +EXT: CALL CHANEL + CALL GETEXT + JR TIME0 +; +PTR: CALL CHANEL + CALL GETPTR + JR TIME0 +; +;TIME - Return current value of elapsed time. +;Result is integer numeric. +; +TIMEV: LD A,(IY) + CP '$' + JR Z,TIMEVS + CALL GETIME +TIME0: PUSH DE + EXX + POP HL + XOR A + LD C,A + RET +; +;TIME$ - Return date/time string. +;Result is string +; +TIMEVS: INC IY ;SKIP $ + CALL GETIMS + LD A,80H ;MARK STRING + RET +; +;String comparison: +; +SLT: CALL SCP + RET NC + JR TRUE +; +SGT: CALL SCP + RET Z + RET C + JR TRUE +; +SGE: CALL SCP + RET C + JR TRUE +; +SLE: CALL SCP + JR Z,TRUE + RET NC + JR TRUE +; +SNE: CALL SCP + RET Z + JR TRUE +; +SEQ: CALL SCP + RET NZ +TRUE: LD A,-1 + EXX + LD H,A + LD L,A + EXX + LD H,A + LD L,A + INC A + LD C,A + RET +; +;PI - Return PI (3.141592654) +;Result is floating-point numeric. +; +PI: LD A,35 + JR FPP1 +; +;ABS - Absolute value +;Result is numeric, variable type. +; +ABS: LD A,16 + JR FPPN +; +;NOT - Complement integer. +;Result is integer numeric. +; +CPL: LD A,26 + JR FPPN +; +;DEG - Convert radians to degrees +;Result is floating-point numeric. +; +DEG: LD A,21 + JR FPPN +; +;RAD - Convert degrees to radians +;Result is floating-point numeric. +; +RAD: LD A,27 + JR FPPN +; +;SGN - Return -1, 0 or +1 +;Result is integer numeric. +; +SGN: LD A,28 + JR FPPN +; +;INT - Floor function +;Result is integer numeric. +; +INT: LD A,23 + JR FPPN +; +;SQR - square root +;Result is floating-point numeric. +; +SQR: LD A,30 + JR FPPN +; +;TAN - Tangent function +;Result is floating-point numeric. +; +TAN: LD A,31 + JR FPPN +; +;COS - Cosine function +;Result is floating-point numeric. +; +COS: LD A,20 + JR FPPN +; +;SIN - Sine function +;Result is floating-point numeric. +; +SIN: LD A,29 + JR FPPN +; +;EXP - Exponential function +;Result is floating-point numeric. +; +EXP: LD A,22 + JR FPPN +; +;LN - Natural log. +;Result is floating-point numeric. +; +LN: LD A,24 + JR FPPN +; +;LOG - base-10 logarithm. +;Result is floating-point numeric. +; +LOG: LD A,25 + JR FPPN +; +;ASN - Arc-sine +;Result is floating-point numeric. +; +ASN: LD A,18 + JR FPPN +; +;ATN - arc-tangent +;Result is floating-point numeric. +; +ATN: LD A,19 + JR FPPN +; +;ACS - arc-cosine +;Result is floating point numeric. +; +ACS: LD A,17 +FPPN: PUSH AF + CALL ITEMN + POP AF +FPP1: CALL FPP + JP C,ERROR + XOR A + RET +; +;SFIX - Convert to fixed-point notation +; +SFIX: LD A,38 + JR FPP1 +; +;SFLOAT - Convert to floating-point notation +; +SFLOAT: LD A,39 + JR FPP1 +; +;VAL - Return numeric value of string. +;Result is variable type numeric. +; +VAL: CALL ITEMS +VAL0: XOR A + LD (DE),A + LD IX,ACCS + LD A,36 + JR FPP1 +; +;EVAL - Pass string to expression evaluator. +;Result is variable type (numeric or string). +; +EVAL: CALL ITEMS + LD A,CR + LD (DE),A + PUSH IY + LD DE,ACCS + LD IY,ACCS + LD C,0 + CALL LEXAN2 ;TOKENISE + LD (DE),A + INC DE + XOR A + CALL PUSHS ;PUT ON STACK + LD IY,2 + ADD IY,SP + CALL EXPR + POP IY + ADD IY,SP + LD SP,IY ;ADJUST STACK POINTER + POP IY + EX AF,AF' + RET +; +;RND - Random number function. +; RND gives random integer 0-&FFFFFFFF +; RND(-n) seeds random number & returns -n. +; RND(0) returns last value in RND(1) form. +; RND(1) returns floating-point 0-0.99999999. +; RND(n) returns random integer 1-n. +; +RND: LD IX,RANDOM + CALL NXT + CP '(' + JR Z,RND5 ;ARGUMENT FOLLOWS + CALL LOAD5 +RND1: RR C + LD B,32 +RND2: EXX ;CALCULATE NEXT + ADC HL,HL + EXX + ADC HL,HL + BIT 3,L + JR Z,RND3 + CCF +RND3: DJNZ RND2 +RND4: RL C ;SAVE CARRY + CALL STORE5 ;STORE NEW NUMBER + XOR A + LD C,A + RET +RND5: CALL ITEMI + LD IX,RANDOM + BIT 7,H ;NEGATIVE? + SCF + JR NZ,RND4 ;SEED + CALL TEST + PUSH AF + LD B,C + EX DE,HL + EXX + EX DE,HL + CALL LOAD5 + CALL NZ,RND1 ;NEXT IF NON-ZERO + EXX ;SCRAMBLE (CARE!) + LD C,7FH +RND6: BIT 7,H ;FLOAT + JR NZ,RND7 + EXX + ADD HL,HL + EXX + ADC HL,HL + DEC C + JR NZ,RND6 +RND7: RES 7,H ;POSITIVE 0-0.999999 + POP AF + RET Z ;ZERO ARGUMENT + EXX + LD A,E + DEC A + OR D + EXX + OR E + OR D + RET Z ;ARGUMENT=1 + LD B,0 ;INTEGER MARKER + LD A,10 + CALL FPP ;MULTIPLY + JP C,ERROR + CALL SFIX + JP ADD1 +; +;SUMLEN(array()) +; +SUMLEN: INC IY ;Skip LEN + CALL GETARB + BIT 7,B + JP Z,MISMAT ;Type mismatch + CALL ARRLEN + PUSH HL + POP IX ;IX addresses array + XOR A + LD H,A + LD L,A + LD B,A +SUMLN1: LD C,(IX) + ADD HL,BC + LD C,4 + ADD IX,BC + DEC DE ;Count elements + LD A,D + OR E + JR NZ,SUMLN1 + JP COUNT1 +; +;SUM(array()) +; +SUM: CALL NXT + CP TLEN + JR Z,SUMLEN + CALL GETARB + BIT 7,B + JR NZ,SUMSTR + PUSH BC + CALL ARRLEN + PUSH HL + POP IX ;IX addresses array + CALL ZERO + POP AF ;A = element size +SUMUP: PUSH DE + PUSH AF + CALL DLOADN + LD A,11 + CALL FPP + JP C,ERROR + POP AF + LD D,0 + LD E,A + ADD IX,DE ;Bump to next element + POP DE + DEC DE ;Count elements + LD B,A + LD A,D + OR E + LD A,B + JR NZ,SUMUP + RET +; +;SUM(string array) +; +SUMSTR: CALL ARRLEN + PUSH HL + POP IX ;IX addresses array + EX DE,HL + LD DE,ACCS + LD B,0 +SUMST1: PUSH HL + LD C,(IX) + LD A,C + OR A + JR Z,SUMST2 + ADD A,E + LD A,19 + JP C,ERROR ;"String too long" + LD L,(IX+2) + LD H,(IX+3) + LDIR +SUMST2: POP HL + LD C,4 + ADD IX,BC + DEC HL ;Count elements + LD A,H + OR L + JR NZ,SUMST1 + OR 80H + RET +; +;MOD(array()) +; +MODFUN: CALL GETARB + BIT 7,B + JP NZ,MISMAT + PUSH BC + CALL ARRLEN + PUSH HL + POP IX ;IX addresses array + CALL ZERO + POP AF ;A = element size +MODUP: PUSH DE + PUSH AF + PUSH BC + PUSH HL + EXX + PUSH HL + EXX + CALL LOADN + XOR A + LD B,A + LD D,A + LD E,A + EXX + LD D,A + LD E,2 + EXX + LD A,14 + PUSH IX + CALL FPP ;Square + POP IX + JP C,ERROR + EXX + EX DE,HL + POP HL + EXX + EX DE,HL + POP HL + LD A,C + POP BC + LD B,A + LD A,11 + CALL FPP ;Accumulate + JP C,ERROR + POP AF + LD D,0 + LD E,A + ADD IX,DE ;Bump to next element + POP DE + DEC DE ;Count elements + LD B,A + LD A,D + OR E + LD A,B + JR NZ,MODUP + LD A,30 + CALL FPP ;Square root + XOR A + RET +; +;INSTR - String search. +;Result is integer numeric. +; +INSTR: CALL EXPRS ;STRING TO SEARCH + CALL COMMA + CALL PUSHS ;SAVE STRING ON STACK + CALL EXPRS ;SUB-STRING + POP BC + LD HL,0 + ADD HL,SP ;HL ADDRESSES MAIN + PUSH BC ;C = MAIN STRING LENGTH + LD B,E ;B = SUB-STRING LENGTH + CALL NXT + CP ',' + LD A,0 + JR NZ,INSTR1 + INC IY ;SKIP COMMA + PUSH BC ;SAVE LENGTHS + PUSH HL ;SAVE MAIN ADDRESS + CALL PUSHS + CALL EXPRI + POP BC + CALL POPS + POP HL ;RESTORE MAIN ADDRESS + POP BC ;RESTORE LENGTHS + EXX + LD A,L + EXX + OR A + JR Z,INSTR1 + DEC A +INSTR1: LD DE,ACCS ;DE ADDRESSES SUB + CALL SEARCH + POP DE + JR Z,INSTR2 ;N.B. CARRY CLEARED + SBC HL,HL + ADD HL,SP +INSTR2: SBC HL,SP + EX DE,HL + LD H,0 + ADD HL,SP + LD SP,HL + EX DE,HL + CALL BRAKET + JP COUNT1 +; +;SEARCH - Search string for sub-string +; Inputs: Main string at HL length C +; Sub-string at DE length B +; Starting offset A +; Outputs: NZ - not found +; Z - found at location HL-1 +; Carry always cleared +; +SEARCH: PUSH BC + LD B,0 + LD C,A + ADD HL,BC ;NEW START ADDRESS + POP BC + SUB C + JR NC,SRCH4 + NEG + LD C,A ;REMAINING LENGTH +SRCH1: LD A,(DE) + PUSH BC + LD B,0 + CPIR ;FIND FIRST CHARACTER + LD A,C + POP BC + JR NZ,SRCH4 + LD C,A + DEC B ;Bug fix + CP B ;Bug fix + INC B ;Bug fix + JR C,SRCH4 ;Bug fix + PUSH BC + PUSH DE + PUSH HL + DEC B + JR Z,SRCH3 ;FOUND ! +SRCH2: INC DE + LD A,(DE) + CP (HL) + JR NZ,SRCH3 + INC HL + DJNZ SRCH2 +SRCH3: POP HL + POP DE + POP BC + JR NZ,SRCH1 + XOR A ;Z, NC + RET ;FOUND +; +SRCH4: OR 0FFH ;NZ, NC + RET ;NOT FOUND +; +;CHR$ - Return character with given ASCII value. +;Result is string. +; +CHRS: CALL ITEMI + EXX + LD A,L + JR GET1 +; +;GET$ - Return key pressed as string, or read from file +;Result is string. +; +GETS: CALL NXT + CP '#' + JR Z,GET2 + CALL OSRDCH +GET1: SCF + JR INKEY1 +; +GET2: CALL CHNL ;File channel + CALL NXT + CP TBY + JR Z,GET3 + CP TTO + JR NZ,GET4 +GET3: INC IY + PUSH AF + PUSH DE + CALL ITEMI ;Get BY or TO qualifier + EXX + LD B,H + LD C,L + POP DE + POP AF +GET4: LD HL,ACCS + CP TTO + JR Z,GET5 + LD D,C ;Maximum count + LD BC,100H ;Default + CP TBY + JR Z,GET6 +GET5: LD D,0 + SET 1,B ;Flag no count +GET6: PUSH BC + CALL OSBGET + POP BC + JR C,GET9 ;EOF + BIT 1,B + JR Z,GET8 + CP C + JR Z,GET9 ;NUL (or supplied term) + BIT 7,B + JR NZ,GET7 + BIT 0,B + JR Z,GET8 + CP LF + JR Z,GET9 ;LF +GET7: CP CR + JR Z,GET9 ;CR +GET8: LD (HL),A + INC L + DEC D + JR NZ,GET6 +GET9: EX DE,HL + LD A,80H + RET +; +;INKEY$ - Wait up to n centiseconds for keypress. +; Return key pressed as string or null +; string if time elapsed. +;Result is string. +; +INKEYS: CALL ITEMI + EXX + CALL OSKEY +INKEY1: LD DE,ACCS + LD (DE),A + LD A,80H + RET NC + INC E + RET +; +;MID$ - Return sub-string. +;Result is string. +; +MIDS: CALL EXPRS + CALL COMMA + CALL PUSHS ;SAVE STRING ON STACK + CALL EXPRI + POP BC + CALL POPS + EXX + LD A,L + EXX + OR A + JR Z,MIDS1 + DEC A + LD L,A + SUB E + LD E,0 + JR NC,MIDS1 + NEG + LD C,A + CALL RIGHT1 +MIDS1: CALL NXT + CP ',' + JR Z,LEFT1 + CALL BRAKET + LD A,80H + RET +; +;LEFT$ - Return left part of string. +;Carry cleared if entire string returned. +;Result is string. +; +LEFTS: CALL EXPRS + CALL NXT + CP ',' + JR Z,LEFT1 + CALL BRAKET + LD A,E + OR A + JR Z,LEFT3 + DEC E + JR LEFT3 +; +LEFT1: INC IY + CALL PUSHS ;SAVE STRING ON STACK + CALL EXPRI + POP BC + CALL POPS + CALL BRAKET + EXX + LD A,L + EXX + CP E + JR NC,LEFT3 + LD L,E ;FOR RIGHT$ +LEFT2: LD E,A +LEFT3: LD A,80H ;STRING MARKER + RET +; +;RIGHT$ - Return right part of string. +;Result is string. +; +RIGHTS: CALL EXPRS + CALL NXT + CP ',' + JR Z,RIGHT0 + CALL BRAKET + LD A,E + OR A + JR Z,LEFT3 + DEC A + LD C,1 + JR RIGHT2 +; +RIGHT0: CALL LEFT1 + RET NC + INC E + DEC E + RET Z + LD C,E + LD A,L + SUB E +RIGHT2: LD L,A +RIGHT1: LD B,0 + LD H,D + LD E,B + LDIR ;MOVE + LD A,80H + RET +; +;STRING$ - Return n concatenations of a string. +;Result is string. +; +STRING: CALL EXPRI + CALL COMMA + EXX + LD A,L + EXX + PUSH AF + CALL EXPRS + CALL BRAKET + POP AF + OR A + JR Z,LEFT2 ;N=0 + DEC A + LD C,A + LD A,80H ;STRING MARKER + RET Z + INC E + DEC E + RET Z ;NULL STRING + LD B,E + LD H,D + LD L,0 +STRIN1: PUSH BC +STRIN2: LD A,(HL) + INC HL + LD (DE),A + INC E + LD A,19 + JP Z,ERROR ;"String too long" + DJNZ STRIN2 + POP BC + DEC C + JR NZ,STRIN1 + LD A,80H + RET +; +;SUBROUTINES +; +;TEST - Test HLH'L' for zero +; Outputs: Z-flag set & A=0 if zero +; Destroys: A,F +; +TEST: LD A,H + OR L + EXX + OR H + OR L + EXX + RET +; +;DECODE - Decode line number in pseudo-binary. +; Inputs: IY = Text pointer. +; Outputs: HL=0, H'L'=line number, C=0. +; Destroys: A,C,H,L,H',L',IY,F +; +DECODE: EXX + LD A,(IY) + INC IY + RLA + RLA + LD H,A + AND 0C0H + XOR (IY) + INC IY + LD L,A + LD A,H + RLA + RLA + AND 0C0H + XOR (IY) + INC IY + LD H,A + EXX + XOR A + LD C,A + LD H,A + LD L,A + RET +; +;HEXSTR - convert numeric value to HEX string. +; Inputs: HLH'L'C = integer or floating-point number +; Outputs: String in string accumulator. +; E = string length. D = ACCS/256 +; +HEXSTS: INC IY ;SKIP TILDE + CALL ITEMN + CALL HEXSTR + LD A,80H + RET +; +HEXSTR: CALL SFIX + LD BC,8 + LD DE,ACCS +HEXST1: PUSH BC + LD B,4 + XOR A +HEXST2: EXX + ADD HL,HL + EXX + ADC HL,HL + RLA + DJNZ HEXST2 + POP BC + DEC C + RET M + JR Z,HEXST3 + OR A + JR NZ,HEXST3 + CP B + JR Z,HEXST1 +HEXST3: ADD A,90H + DAA + ADC A,40H + DAA + LD (DE),A + INC DE + LD B,A + JR HEXST1 +; +;Function STR - convert numeric value to ASCII string. +; Inputs: HLH'L'C = integer or floating-point number. +; Outputs: String in string accumulator. +; E = length, D = ACCS/256 +; A = 80H (type=string) +; +;First normalise for decimal output: +; +STRS: CALL NXT + CP '~' + JR Z,HEXSTS + CALL ITEMN + LD IX,STAVAR + LD A,(IX+3) + OR A + LD IX,G9-1 ;G9 FORMAT + JR Z,STR0 +STR: LD IX,STAVAR +STR0: LD DE,ACCS + LD A,37 + CALL FPP + JP C,ERROR + BIT 0,(IX+2) +STR1: LD A,80H ;STRING MARKER + RET Z + LD A,C + ADD A,4 +STR2: CP E + JR Z,STR1 + EX DE,HL + LD (HL),' ' ;TRAILING SPACE + INC HL + EX DE,HL + JR STR2 +; +G9: DEFW 9 +; +;STRING COMPARE +;Compare string (DE) length B with string (HL) length C. +;Result preset to false. +; +SCP: CALL SCP0 +ZERO: LD A,0 + EXX + LD H,A + LD L,A + EXX + LD H,A + LD L,A + LD C,A + RET +; +SCP0: INC B + INC C +SCP1: DEC B + JR Z,SCP2 + DEC C + JR Z,SCP3 + LD A,(DE) + CP (HL) + RET NZ + INC DE + INC HL + JR SCP1 +SCP2: OR A + DEC C + RET Z + SCF + RET +SCP3: OR A + INC C + RET +; +;PUSH$ - SAVE STRING ON STACK. +; Inputs: String in string accumulator. +; E = string length. +; A - saved on stack. +; Destroys: B,C,D,E,H,L,IX,SP,F +; +PUSHS: LD HL,ACCS + CALL CHECK + POP IX ;RETURN ADDRESS + OR A ;CLEAR CARRY + LD D,H + LD C,E + SBC HL,DE + ADD HL,SP + LD SP,HL + LD B,A + PUSH BC + JR Z,PUSHS1 ;ZERO LENGTH + EX DE,HL + LD B,0 + LD L,B ;L=0 + LDIR ;COPY TO STACK + CALL CHECK +PUSHS1: JP (IX) ;"RETURN" +; +;POP$ - RESTORE STRING FROM STACK. +; Inputs: C = string length. +; Outputs: String in string accumulator. +; E = string length. +; Destroys: B,C,D,E,H,L,IX,SP,F +; +POPS: POP IX ;RETURN ADDRESS + LD HL,0 + LD B,H ;B=0 + ADD HL,SP + LD DE,ACCS + INC C + DEC C + JR Z,POPS1 ;ZERO LENGTH + LDIR ;COPY FROM STACK +POPS1: LD SP,HL + JP (IX) ;"RETURN" +; +BINDIG: LD A,(IY) + CP '0' + RET C + CP '1'+1 + CCF + RET C + SUB '0' + RET +; +HEXDIG: LD A,(IY) + CP '0' + RET C + CP '9'+1 + CCF + RET NC + CP 'A' + RET C + SUB 'A'-10 + CP 16 + CCF + RET +; +RELOPQ: CP '>' + RET NC + CP '=' + RET NC + CP '<' + RET +; +COMMA: CALL NXT + INC IY + CP ',' + RET Z + LD A,5 + JR ERROR1 ;"Missing ," +; +BRAKET: CALL NXT + INC IY + CP ')' + RET Z + LD A,27 +ERROR1: JP ERROR ;"Missing )" +; +SAVE: INC IY + AND 0FH +SAVE1: EX AF,AF' + JP M,MISMAT + EX AF,AF' + EX (SP),HL + EXX + PUSH HL + EXX + PUSH AF + PUSH BC + JP (HL) +; +DOIT: EX AF,AF' + JP M,MISMAT + EXX + POP BC ;RETURN ADDRESS + EXX + LD A,C + POP BC + LD B,A + POP AF ;OPERATOR + EXX + EX DE,HL + POP HL + EXX + EX DE,HL + POP HL + EXX + PUSH BC + EXX + CALL FPP + JR C,ERROR1 + XOR A + EX AF,AF' ;TYPE + LD A,(IY) + RET +; +DISPT2: PUSH HL + LD HL,SOPTBL + JR DISPT0 +; +DISPAT: PUSH HL + SUB FUNTOK + LD HL,FUNTBL +DISPT0: PUSH BC + ADD A,A + LD C,A + LD B,0 + ADD HL,BC + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + POP BC + EX (SP),HL + RET ;OFF TO ROUTINE +; +STOREA: LD A,D + PUSH DE + PUSH HL + EX (SP),IX + OR A + JP M,STORA1 + CALL LOADN + EX (SP),IX + CALL MODIFY + POP HL + POP DE + LD C,D + LD B,0 + RET +; +STORA1: PUSH DE + CALL LOADS + POP HL + EX (SP),IX + CALL MODIFS + POP HL + POP DE + LD BC,4 + RET +; +; Assign to whole array: +; array1() = array expression +; array1() = n1,n2,n3,n4... +; array1() = n (n copied into all elements) +; +; Inputs: D = type (65, 68, 69, 193) +; E = opcode ('=' for store, '+','-' etc. for modify) +; HL = IX = VARPTR +; IY = text pointer +; +LETARR: RES 6,D ;Lose array marker + PUSH DE ;Save type & opcode + CALL GETAR1 ;Get and check indirect link + CALL ARRLEN ;DE = elements, HL addresses first + POP BC + LD A,B ;A = type + PUSH DE + PUSH BC + PUSH HL + CALL X14OR5 ;DE = size in bytes + LD B,D + LD C,E + POP IX + POP DE +; +; (SP) = number of elements +; BC = size in bytes +; DE = type & opcode +; IX = address of first element +; +; allocate space on stack and zero it: +; + XOR A ;Clear carry and zero error code + LD HL,0 + ADD HL,SP ;HL = SP + SBC HL,BC + JP C,ERROR ;'No room' + PUSH BC + LD BC,(FREE) + INC B ;Safety margin + SBC HL,BC + ADD HL,BC + POP BC + JP C,ERROR ;'No room' + LD SP,HL +LETA0: LD (HL),0 + INC HL + DEC BC + LD A,B + OR C + JR NZ,LETA0 ;Clear allocated stack + LD C,(HL) + INC HL + LD B,(HL) + LD H,A + LD L,A + ADD HL,SP +; +; CALL NXT +; CP TEVAL ;;EVAL not currently supported +; + CALL EXPRA + LD SP,HL ;Update stack pointer + POP BC ;Level stack + JP XEQ +; +; EXPRA - Evaluate array expression, strictly left-to-right; +; Note: String array arithmetic (concatenation) is not supported +; because it would require a way of recovering freed string space. +; +; Inputs: BC = number of elements +; DE = type & opcode +; HL = address of temporary stack space +; IX = address of first element of array +; Outputs: HL = value to set stack pointer to +; +EXPRA: LD A,'=' + DEC IY +EXPRA1: INC IY + PUSH DE + PUSH BC + PUSH HL + PUSH IX + LD E,A ;For unary minus + CALL NXT + CALL ITEMA + POP IX + POP HL + POP BC + POP DE + CALL NXT + CP ',' ;List? + JR Z,EXPRA3 + CALL TERMQ + JR NZ,EXPRA1 +; +; Update destination array from stack: +; +EXPRA2: PUSH BC + CALL STOREA ;(IX) <- (HL) + ADD HL,BC + ADD IX,BC + POP BC + DEC BC + LD A,B + OR C + JR NZ,EXPRA2 + RET +; +; Update destination array from list (n.b. not transferred via stack): +; +EXPRA3: PUSH BC + CALL STOREA ;(IX) <- (HL) +EXPRA4: INC IY ;Bump past comma + ADD HL,BC + ADD IX,BC + POP BC + DEC BC + LD A,B + OR C + RET Z + PUSH BC + PUSH DE + PUSH HL + PUSH IX + BIT 7,D + JR NZ,EXPRA5 + PUSH DE + CALL EXPRN + POP DE + POP IX + PUSH IX + CALL MODIFY + JR EXPRA6 +; +EXPRA5: PUSH DE + CALL EXPRS + POP HL + POP IX + PUSH IX + CALL MODIFS +EXPRA6: POP IX + POP HL + POP DE + LD BC,4 + BIT 7,D + JR NZ,EXPRA7 + LD C,D +EXPRA7: CALL NXT + CP ',' + JR Z,EXPRA4 + POP DE +EXPRA8: ADD HL,BC ;Skip remaining elements + DEC DE + LD A,D + OR E + JR NZ,EXPRA8 + RET +; +; ITEMA: evaluate and operate on array item +; Inputs: A = operator +; D = type +; E = operator +; BC = number of elements +; HL = pointer to destination on stack +; IY = text pointer +; Outputs: IY updated +; Destroys: Everything except SP +; +ITEMA: CP '-' + JR NZ,ITEMA1 ;Not unary minus + LD A,E + CP '=' + JR NZ,ITEMA1 ;Not unary minus + INC IY ;Bump past '-' + CALL NXT + LD E,'-' ;Unary minus +ITEMA1: PUSH HL ;Pointer to destination + PUSH BC ;Number of elements + PUSH DE ;Type and previous operator + PUSH IY ;In case normal expression + CALL GETVAR + JR NZ,ITEMA4 ;Non-array expression + BIT 6,A + JR Z,ITEMA4 ;Not a whole array + POP BC ;Junk saved text pointer + POP DE ;Type & operator + RES 6,A + CP D + JP NZ,MISMAT ;'Type mismatch' + PUSH DE ;Save type & operator again + CALL GETAR1 + CALL ARRLEN + LD B,D ;BC = number of elements + LD C,E + POP DE ;Restore type & operator + EX (SP),HL + CALL NXT + POP IX ;Pointer to source + CP '.' + JP Z,ARRDOT ;Dot product + OR A + SBC HL,BC ;Same number of elements? + JP NZ,MISMAT ;'Type mismatch' + POP HL ;Pointer to destination + BIT 7,D + JR NZ,ITEMA3 +; +; Process numeric array item: +; +ITEMA2: PUSH BC + PUSH HL + LD A,D + CALL LOADN + EX (SP),IX + PUSH DE + CALL MODIFY + POP DE + EX (SP),IX + POP HL + LD C,D + LD B,0 + ADD IX,BC + ADD HL,BC + POP BC + DEC BC + LD A,B + OR C + JR NZ,ITEMA2 + RET +; +; Process string array item (just copy descriptors): +; +ITEMA3: EX DE,HL ;DE = destination + LD H,B + LD L,C + ADD HL,HL + ADD HL,HL + LD B,H + LD C,L + PUSH IX + POP HL ;HL = source + LDIR + RET +; +; Process numeric non-array item: +; +ITEMA4: POP IY ;Restore text pointer + BIT 7,D + JR NZ,ITEMA5 + CALL EXPR4 ;; should be EXP345 + LD A,C ;Exponent + POP DE ;Type / operator + POP BC ;Count + POP IX +ITEMA7: PUSH HL + PUSH BC + PUSH DE + EXX + PUSH HL + EXX + PUSH AF + LD C,A + CALL MODIFY + POP AF + EXX + POP HL + EXX + POP DE + LD C,D + LD B,0 + ADD IX,BC + POP BC + DEC BC + SBC HL,HL + SBC HL,BC + POP HL + JR NZ,ITEMA7 ;Copy into every element! + RET +; +; Process string non-array item: +; +ITEMA5: CALL EXPRS + LD A,E + OR A + JR Z,ITEMA0 + LD HL,ACCS + LD DE,BUFFER + LD C,A + LD B,0 + LDIR +ITEMA0: POP DE + POP BC + POP IX + EXX + LD L,A + EXX + LD DE,4 + LD HL,BUFFER +ITEMA6: CALL STORE4 + ADD IX,DE + DEC BC + LD A,B + OR C + JR NZ,ITEMA6 ;Copy into every element! + RET +; +; Array dot-product: +; +ARRDOT: INC IY ;Bump past dot + LD A,D ;Type + OR A + JP M,MISMAT ;'Type mismatch' + EX DE,HL + POP HL +; +; A = type +; DE = no. of elements in destination array (outer loop counter) +; IX = pointer to first source array data +; HL = pointer to destination data +; IY = text pointer +; + PUSH DE + PUSH HL + PUSH IX + PUSH AF + CALL GETARR + CALL ARRLEN + POP AF + EX DE,HL + LD L,(IX) + LD H,(IX+1) ;Indirect pointer + LD L,(HL) ;No. of dimensions + DEC L + EX DE,HL + POP IX + POP BC + POP DE +; + PUSH IY ;Save text pointer + PUSH BC ;Save destination pointer + PUSH HL + POP IY +; +; Get row counts: +; + LD HL,1 + JR Z,ARR1D + LD H,(IY-1) + LD L,(IY-2) +ARR1D: PUSH AF + PUSH DE + LD C,A + LD B,0 + CALL MUL16 + POP DE + POP AF + LD B,(IX-1) + LD C,(IX-2) +; +; A = type, Z-flag set if first array is one-dimensional +; BC = no. of rows of first source array (inner loop counter) +; DE = no. of elements in destination array (outer loop counter) +; HL = no. of rows of second source array * size of each element +; IX = pointer to first source array +; IY = pointer to second source array +; (SP) = pointer to destination data +; +; Dot-product outer loop: +; +OUTER: PUSH BC ;1 + PUSH DE ;2 + PUSH HL ;3 + PUSH IX ;4 + PUSH IY ;5 + LD D,B + LD E,C + PUSH AF + CALL ZERO ;Zero accumulator + POP AF +INNER: PUSH DE ;6 + PUSH BC ;Save accumulator + PUSH HL + EXX + PUSH HL + EXX +; + CALL LOADN ;Load from (IX) + PUSH IX + EX (SP),IY + POP IX +; + CALL DLOADN ;Load from (IY) + PUSH IX + EX (SP),IY + POP IX +; + PUSH AF + LD A,10 + CALL FPP ;Multiply + JP C,ERROR + POP AF +; + EXX ;Restore accumulator + EX DE,HL + POP HL + EXX + EX DE,HL + POP HL + EX AF,AF' + LD A,C + POP BC + LD B,A + EX AF,AF' +; + PUSH AF + LD A,11 + CALL FPP ;Accumulate + JP C,ERROR + POP AF +; +; Bump pointers: +; + POP DE ;5 +; + EXX + LD C,A + LD B,0 + ADD IX,BC + POP DE + POP BC + EX (SP),HL + EX DE,HL + ADD IY,DE + EX DE,HL + EX (SP),HL + PUSH BC + PUSH DE + EXX +; +; Count inner loops: +; + DEC DE ;Inner loop counter + INC E + DEC E + JR NZ,INNER + INC D + DEC D + JR NZ,INNER +; + POP IY ;4 + POP IX ;3 +; +; Swap pointers: +; + EXX + EX AF,AF' + POP AF + POP BC + POP DE + EX (SP),IX + PUSH DE + PUSH BC + PUSH AF + EX AF,AF' + EXX +; +; Save to destination array and bump pointer: +; + PUSH AF + PUSH DE + CALL STOREN + POP DE + POP AF + LD C,A + LD B,0 + ADD IX,BC +; +; Swap pointers: +; + EXX + EX AF,AF' + POP AF + POP BC + POP DE + EX (SP),IX + PUSH DE + PUSH BC + PUSH AF + EX AF,AF' + EXX +; + POP HL ;2 + POP DE ;1 Outer loop counter + POP BC ;0 + DEC DE ;Count outer loops +; +; Adjust IX & IY +; + PUSH BC + PUSH DE + PUSH HL + LD C,A + LD B,0 + ADD IY,BC + PUSH AF + PUSH HL + EX DE,HL + CALL MUL16 + EX DE,HL + POP BC + CALL MOD16 + POP AF + OR A + LD BC,0 + SBC HL,BC + POP HL + POP DE + POP BC + JR NZ,MODNZ + PUSH DE + PUSH HL + EX DE,HL + PUSH IY + POP HL + OR A + SBC HL,DE + PUSH HL + POP IY + LD L,A + LD H,0 + PUSH AF + CALL MUL16 + POP AF + EX DE,HL + ADD IX,DE + POP HL + POP DE +MODNZ: +; +; Count outer loops: +; + INC E + DEC E + JP NZ,OUTER + INC D + DEC D + JP NZ,OUTER +; +; Exit: +; + POP HL + POP IY + RET +; +; HL = DE MOD BC +; +MOD16: XOR A + LD H,A + LD L,A + LD A,17 +MOD160: SBC HL,BC + JR NC,MOD161 + ADD HL,BC +MOD161: CCF + RL E + RL D + DEC A + RET Z + ADC HL,HL + JR MOD160 +; + END diff --git a/Source/Apps/BBCBASIC/exec.z80 b/Source/Apps/BBCBASIC/exec.z80 new file mode 100644 index 00000000..17e647da --- /dev/null +++ b/Source/Apps/BBCBASIC/exec.z80 @@ -0,0 +1,3274 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024 + NAME ('EXEC') +; +;BBC BASIC INTERPRETER - Z80 VERSION +;STATEMENT EXECUTION MODULE - "EXEC" +;(C) COPYRIGHT R.T.RUSSELL 1981-2024 +; +;THE NAME BBC BASIC IS USED WITH THE PERMISSION +;OF THE BRITISH BROADCASTING CORPORATION AND IS +;NOT TRANSFERRABLE TO A FORKED OR DERIVED WORK. +; +;VERSION 2.1, 22-01-1984 +;VERSION 3.1, 11-06-1987 +;VERSION 5.0, 19-05-2024 +; + GLOBAL XEQ + GLOBAL RUN0 + GLOBAL CHAIN0 + GLOBAL CHECK + GLOBAL MUL16 + GLOBAL X14OR5 + GLOBAL TERMQ + GLOBAL STOREN + GLOBAL STORE4 + GLOBAL STORE5 + GLOBAL STACCS + GLOBAL SPACES + GLOBAL FN + GLOBAL USR + GLOBAL ESCAPE + GLOBAL SYNTAX + GLOBAL CHANEL + GLOBAL CHNL + GLOBAL VAR + GLOBAL TABIT + GLOBAL MODIFY + GLOBAL MODIFS +; + EXTRN ASSEM + EXTRN ERROR + EXTRN REPORT + EXTRN WARM + EXTRN CLOOP + EXTRN SAYLN + EXTRN LOAD0 + EXTRN CRLF + EXTRN PBCDL + EXTRN TELL + EXTRN FINDL + EXTRN SETLIN + EXTRN CLEAR + EXTRN GETVAR + EXTRN PUTVAR + EXTRN GETDEF + EXTRN LOCATE + EXTRN CREATE + EXTRN OUTCHR + EXTRN EXTERR + EXTRN BYE + EXTRN NXT + EXTRN NLIST +; + EXTRN OSWRCH + EXTRN OSLINE + EXTRN OSSHUT + EXTRN OSBPUT + EXTRN OSBGET + EXTRN CLRSCN + EXTRN PUTCSR + EXTRN PUTIME + EXTRN PUTIMS + EXTRN PUTPTR + EXTRN OSCALL + EXTRN OSCLI + EXTRN TRAP +; + EXTRN SOUND + EXTRN CLG + EXTRN DRAW + EXTRN ENVEL + EXTRN GCOL + EXTRN MODE + EXTRN MOVE + EXTRN PLOT + EXTRN COLOUR + EXTRN CIRCLE + EXTRN ELLIPSE + EXTRN FILL + EXTRN MOUSE + EXTRN ORIGIN + EXTRN RECTAN + EXTRN LINE + EXTRN WAIT + EXTRN TINT + EXTRN SYS +; + EXTRN STR + EXTRN HEXSTR + EXTRN EXPR + EXTRN EXPRN + EXTRN EXPRI + EXTRN EXPRS + EXTRN ITEMI + EXTRN CONS + EXTRN LOADS + EXTRN VAL0 + EXTRN SFIX + EXTRN TEST + EXTRN LOAD4 + EXTRN LOADN + EXTRN DLOAD5 + EXTRN FPP + EXTRN COMMA + EXTRN BRAKET + EXTRN PUSHS + EXTRN POPS + EXTRN ZERO + EXTRN SCP + EXTRN LETARR +; + EXTRN ACCS + EXTRN PAGE + EXTRN LOMEM + EXTRN HIMEM + EXTRN FREE + EXTRN BUFFER + EXTRN ERRTRP + EXTRN ONERSP + EXTRN CURLIN + EXTRN COUNT + EXTRN WIDTH + EXTRN STAVAR + EXTRN DATPTR + EXTRN RANDOM + EXTRN TRACEN + EXTRN LISTON + EXTRN PC + EXTRN OC +; +LF EQU 0AH +CR EQU 0DH +TAND EQU 80H +TOR EQU 84H +TERROR EQU 85H +TLINE EQU 86H +TOFF EQU 87H +TSTEP EQU 88H +TSPC EQU 89H +TTAB EQU 8AH +TELSE EQU 8BH +TTHEN EQU 8CH +TLINO EQU 8DH +TTO EQU 0B8H +TCMD EQU 0C0H +TWHILE EQU 0C7H +TWHEN EQU 0C9H +TOF EQU 0CAH +TENDCASE EQU 0CBH +TOTHERWISE EQU 0CCH +TENDIF EQU 0CDH +TENDWHILE EQU 0CEH +TCALL EQU 0D6H +TDATA EQU 0DCH +TDEF EQU 0DDH +TFOR EQU 0E3H +TGOSUB EQU 0E4H +TGOTO EQU 0E5H +TLOCAL EQU 0EAH +TNEXT EQU 0EDH +TON EQU 0EEH +TPROC EQU 0F2H +TREM EQU 0F4H +TREPEAT EQU 0F5H +TRETURN EQU 0F8H +TSTOP EQU 0FAH +TUNTIL EQU 0FDH +TEXIT EQU 10H +; +CMDTAB: DEFW LEFTSL + DEFW MIDSL + DEFW RITESL + DEFW SYNTAX ;STR$ + DEFW SYNTAX ;STRING$ + DEFW SYNTAX ;EOF + DEFW SYNTAX ;SUM + DEFW WHILE + DEFW CASE + DEFW SYNTAX ;WHEN + DEFW SYNTAX ;OF + DEFW XEQ ;ENDCASE + DEFW SYNTAX ;OTHERWISE + DEFW XEQ ;ENDIF + DEFW ENDWHI ;ENDWHILE + DEFW PTR + DEFW PAGEV + DEFW TIMEV + DEFW LOMEMV + DEFW HIMEMV + DEFW SOUND + DEFW BPUT + DEFW CALL + DEFW CHAIN + DEFW CLR + DEFW CLOSE + DEFW CLG + DEFW CLS + DEFW REM ;DATA + DEFW REM ;DEF + DEFW DIM + DEFW DRAW + DEFW END + DEFW ENDPRO + DEFW ENVEL + DEFW FOR + DEFW GOSUB + DEFW GOTO + DEFW GCOL + DEFW IF + DEFW INPUT + DEFW LET + DEFW LOCAL + DEFW MODE + DEFW MOVE + DEFW NEXT + DEFW ON + DEFW VDU + DEFW PLOT + DEFW PRINT + DEFW PROC + DEFW READ + DEFW REM + DEFW REPEAT + DEFW REPOR + DEFW RESTOR + DEFW RETURN + DEFW RUN + DEFW STOP + DEFW COLOUR + DEFW TRACE + DEFW UNTIL + DEFW WIDTHV + DEFW CLI ;OSCLI + DEFW REM ;NUL + DEFW CIRCLE + DEFW ELLIPSE + DEFW FILL + DEFW MOUSE + DEFW ORIGIN + DEFW BYE ;QUIT + DEFW RECTAN + DEFW SWAP + DEFW SYS + DEFW TINT + DEFW WAIT + DEFW SYNTAX ;INSTALL + DEFW REM ;CR + DEFW PUT ;Token changed + DEFW SYNTAX ;BY + DEFW EXIT +; +TLAST EQU TCMD-128+($-CMDTAB)/2 +; +RUN: CALL TERMQ + JR Z,RUN0 +CHAIN: CALL EXPRS + LD A,CR + LD (DE),A +CHAIN0: LD SP,(HIMEM) + CALL LOAD0 +RUN0: LD SP,(HIMEM) ;PREPARE FOR RUN + LD IX,RANDOM +RAND: LD A,R ;RANDOMISE (CARE!) + JR Z,RAND + RLCA + RLCA + LD (IX+3),A + SBC A,A + LD (IX+4),A + CALL CLEAR + LD HL,0 + LD (ERRTRP),HL + LD HL,(PAGE) + CALL DSRCH ;LOOK FOR "DATA" + LD (DATPTR),HL ;SET DATA POINTER + LD IY,(PAGE) +XEQ0: CALL NEWLIN + LD A,(IY) + CP TELSE + JP Z,MELSE ;ELSE + CP TWHEN + JP Z,WHEN ;WHEN + CP TOTHERWISE + JP Z,WHEN +XEQ: LD (CURLIN),IY ;ERROR POINTER + CALL TRAP ;CHECK KEYBOARD +XEQ1: CALL NXT + INC IY + CP ':' ;SEPARATOR + JR Z,XEQ1 + CP CR + JR Z,XEQ0 ;NEW PROGRAM LINE + CP TLAST + JP PE,LET0 ;IMPLIED LET + SUB TCMD + JP M,EXTRAS + ADD A,A + LD C,A + LD B,0 + LD HL,CMDTAB + ADD HL,BC + LD A,(HL) ;TABLE ENTRY + INC HL + LD H,(HL) + LD L,A + CALL NXT + JP (HL) ;EXECUTE STATEMENT +; +;END +; +ENDIM: PUSH IY + POP HL + LD BC,(PAGE) + SBC HL,BC ;IMMEDIATE MODE ? + JP C,CLOOP +END: LD E,0 + CALL OSSHUT ;CLOSE ALL FILES + JP WARM ;"Ready" +; +NEWLIN: LD A,(IY+0) ;A=LINE LENGTH + LD BC,3 + ADD IY,BC + OR A + JR Z,ENDIM ;LENGTH=0, EXIT + LD HL,(TRACEN) + LD A,H + OR L + RET Z + LD D,(IY-1) ;DE = LINE NUMBER + LD E,(IY-2) + SBC HL,DE + RET C + EX DE,HL + LD A,'[' ;TRACE + CALL OUTCHR + CALL PBCDL + LD A,']' + CALL OUTCHR + LD A,' ' + JP OUTCHR +; +;ROUTINES FOR EACH STATEMENT: +; +;OSCLI +; +CLI: CALL EXPRS + LD A,CR + LD (DE),A + LD HL,ACCS + CALL OSCLI + JR XEQ +; +;REM, * +; +EXT: PUSH IY + POP HL + CALL OSCLI +REM: PUSH IY + POP HL + LD A,CR + LD B,A + CPIR ;FIND LINE END + PUSH HL + POP IY + JP XEQ0 +; +EXTRAS: CP TELSE-TCMD + JR Z,REM ;ELSE + CP TERROR-TCMD + JR Z,THROW ;ERROR + CP TLINE-TCMD + JP Z,LINE ;LINE + JP SYNTAX +; +;ERROR num,string$ +; +THROW: CALL EXPRI + EXX + PUSH HL + EXX + CALL COMMA + CALL EXPRS + POP HL + XOR A + LD (DE),A + LD A,L + LD HL,ACCS + LD DE,BUFFER + PUSH DE + LD BC,256 + LDIR + JP EXTERR +; +; SWAP +; +SWAP: CALL GETVAR + JR NZ,SWAPNZ + PUSH AF + PUSH HL + CALL COMMA + CALL NXT + CALL GETVAR +SWAPNZ: JR NZ,NOSUCH + POP DE + POP BC + CP B + JR NZ,MISMAT + AND 00001111B + JR Z,MISMAT + LD A,B + AND 11000000B + JR Z,SWAP1 + LD B,2 + JP P,SWAP1 + JP PE,SWAP1 + LD B,4 +SWAP1: LD C,(HL) + LD A,(DE) + LD (HL),A + LD A,C + LD (DE),A + INC DE + INC HL + DJNZ SWAP1 + JR XEQR +; +;[LET] var = expr +; +LET0: CP '*' + JR Z,EXT + CP '=' + JR Z,FNEND + CP '[' + JR Z,ASM + DEC IY +LET: CALL ASSIGN + JP Z,XEQ + JR C,SYNTAX ;"Syntax error" + JP P,LETARR ;Numeric array + JP PE,LETARR ;String array + LD A,D ;Type + PUSH DE + PUSH HL + CALL EXPRS + POP IX + POP HL + CALL MODIFS +XEQR: JP XEQ +; +; GETSTR - Get string variable +; Inputs: IY = text pointer +; Outputs: B = type +; Z-flag set if comma +; +GETSTR: CALL GETVAR + JR NZ,NOSUCH + LD B,A + AND 11000000B + JP P,MISMAT + JP PE,BADUSE + BIT 0,B + JR Z,MISMAT + CALL NXT + CP ',' + RET +; +VAR: CALL GETVAR + RET Z + JP NC,PUTVAR +NOSUCH: LD A,26 ;'No such variable' + DEFB 21H +SYNTAX: LD A,16 ;"Syntax error" + DEFB 21H +ESCAPE: LD A,17 ;"Escape" + DEFB 21H +BADUSE: LD A,14 ;'Bad use of array' + DEFB 21H +MISMAT: LD A,6 ;'Type mismatch' +ERROR0: JP ERROR +; +ASM0: CALL NEWLIN +ASM: LD (CURLIN),IY + CALL TRAP + CALL ASSEM + JR C,SYNTAX + CP CR + JR Z,ASM0 + LD HL,LISTON + LD A,(HL) + AND 0FH + OR 30H + LD (HL),A + JR XEQR +; +;= +; +FNEND: CALL EXPR ;FUNCTION RESULT + EX AF,AF' + ADD A,A + LD A,E + JR C,FNEND1 + LD A,C +FNEND1: EX AF,AF' + PUSH HL + EXX + POP BC + EX DE,HL ;SAVE RESULT IN A'B'C'D'E' + EXX +FNEND2: POP BC + LD HL,FNCHK + XOR A + SBC HL,BC + JR Z,FNEND3 + PUSH BC + CALL RESLOC + JR NZ,FNEND2 + LD A,7 + JR ERROR0 ;"No FN" +; +FNEND3: POP IY + LD (CURLIN),IY ;IN CASE OF ERROR + EXX + EX DE,HL + PUSH BC + EXX + POP HL + EX AF,AF' + LD E,A + LD C,A + RRA + RET +; +;DIM var(dim1[,dim2[,...]])[,var(...] +;DIM var expr[,var expr...] +; +DIM: PUSH IY + CP '!' + JP Z,DIM4 + CALL LOCATE ;VARIABLE + JP C,BADDIM + CALL NZ,CREATE + LD A,(IY) + CP '(' + JP NZ,DIM4 + PUSH HL + POP IX + LD A,(HL) + AND 0FEH + INC HL + OR (HL) + JP NZ,DIM4 + POP BC ;LEVEL STACK + LD A,D + LD HL,(FREE) + PUSH HL + EX (SP),IX + PUSH HL + PUSH AF ;SAVE TYPE + LD DE,1 + LD B,D ;DIMENSION COUNTER +DIM1: INC IY + PUSH BC + PUSH DE + PUSH IX + CALL EXPRI ;DIMENSION SIZE + BIT 7,H + JR NZ,BADDIM + EXX + INC HL + POP IX + INC IX + LD (IX),L ;SAVE SIZE + INC IX + LD (IX),H + POP BC + CALL MUL16 ;HL=HL*BC + JR C,NOROOM ;TOO LARGE + EX DE,HL ;DE=PRODUCT + POP BC + INC B ;DIMENSION COUNTER + LD A,(IY) + CP ',' ;ANOTHER + JR Z,DIM1 + INC IX + CALL BRAKET ;CLOSING BRACKET + POP AF ;RESTORE TYPE + CALL X14OR5 ;DE=DE*n + JR C,NOROOM + POP HL + LD (HL),B ;NO. OF DIMENSIONS + EX (SP),IX + POP HL + AND 80H + OR (IX) ;FLAGS +; +; A = flags: bit 7 = string, bit 0 = LOCAL +; DE = amount to allocate +; HL = where to allocate (if not LOCAL) +; (HL - FREE is size of 'descriptor') +; IX = where to store pointer +; +DIM3: PUSH HL + INC H ;Safety margin + ADD HL,DE + JR C,NOROOM + SBC HL,SP + JR NC,NOROOM + POP HL + PUSH HL + LD BC,(FREE) + OR A + SBC HL,BC + LD B,H + LD C,L + POP HL + SBC HL,BC + BIT 0,A + JR Z,ARRCHK ;NOT LOCAL + LD HL,0 + ADD HL,SP + SBC HL,DE + SBC HL,BC + LD SP,HL + PUSH DE + PUSH BC + PUSH AF + CALL ARRCHK +ARRCHK: LD (IX+0),L ;SAVE POINTER + LD (IX+1),H + LD A,B + OR C + JR Z,DIM2 + PUSH DE + EX DE,HL + LD HL,(FREE) + LDIR ;COPY DESCRIPTOR + EX DE,HL + POP DE +DIM2: LD A,D + OR E + JR Z,DIM5 + LD (HL),0 ;INITIALISE ARRAY + INC HL + DEC DE + JR DIM2 +; +BADDIM: LD A,10 ;"Bad DIM" + DEFB 21H +NOROOM: LD A,11 ;"DIM space" +ERROR1: JP ERROR +; +DIM5: SBC HL,SP + JR NC,DIM7 ;LOCAL + ADD HL,SP + LD (FREE),HL +DIM7: CALL NLIST ;ANOTHER VARIABLE? + JP DIM +; +DIM4: POP IY + CALL VAR + OR A + JR Z,BADDIM + JP M,BADDIM + BIT 6,A + JR NZ,BADDIM + LD B,A ;TYPE + CALL NXT + CP TLOCAL + LD A,0 ;PRESET TO NOT LOCAL + JR NZ,DIM8 + INC IY + INC A ;FLAG LOCAL +DIM8: PUSH AF + LD A,B ;TYPE + EXX + LD HL,0 + LD C,H + CALL STOREN ;RESERVED AREA + PUSH IX + CALL EXPRI + POP IX + EXX + INC HL + EX DE,HL + LD HL,(FREE) + POP AF ;LOCAL FLAG + JP DIM3 +; +;PRINT list... +;PRINT #channel,list... +; +PRINT: CP '#' + JR NZ,PRINT0 + CALL CHNL ;CHANNEL NO. = E +PRNTN1: CALL NLIST + PUSH DE + CALL EXPR ;ITEM TO PRINT + EX AF,AF' + JP M,PRNTN2 ;STRING + POP DE + PUSH BC + EXX + LD A,L + EXX + CALL OSBPUT + EXX + LD A,H + EXX + CALL OSBPUT + LD A,L + CALL OSBPUT + LD A,H + CALL OSBPUT + POP BC + LD A,C + CALL OSBPUT + JR PRNTN1 +PRNTN2: LD C,E + POP DE + LD HL,ACCS + INC C +PRNTN3: DEC C + JR Z,PRNTN4 + LD A,(HL) + INC HL + PUSH BC + CALL OSBPUT + POP BC + JR PRNTN3 +PRNTN4: LD A,CR + CALL OSBPUT + JR PRNTN1 +; +PRINT6: LD B,2 + JR PRINTC +PRINT8: LD BC,100H + JR PRINTC +PRINT9: LD HL,STAVAR + XOR A + CP (HL) + JR Z,PRINT0 + LD A,(COUNT) + OR A + JR Z,PRINT0 +PRINTA: SUB (HL) + JR Z,PRINT0 + JR NC,PRINTA + NEG + CALL SPACES +PRINT0: LD A,(STAVAR) + LD C,A ;PRINTS + LD B,0 ;PRINTF +PRINTC: CALL TERMQ + JR Z,PRINT4 + RES 0,B + INC IY + CP '~' + JR Z,PRINT6 + CP ';' + JR Z,PRINT8 + CP ',' + JR Z,PRINT9 + CALL FORMAT ;SPC, TAB, ' + JR Z,PRINTC + DEC IY + PUSH BC + CALL EXPR ;VARIABLE TYPE + EX AF,AF' + JP M,PRINT3 ;STRING + POP DE + PUSH DE + BIT 1,D + PUSH AF + CALL Z,STR ;DECIMAL + POP AF + CALL NZ,HEXSTR ;HEX + POP BC + PUSH BC + LD A,C + SUB E + CALL NC,SPACES ;RIGHT JUSTIFY +PRINT3: POP BC + CALL PTEXT ;PRINT + JR PRINTC +PRINT4: BIT 0,B + CALL Z,CRLF + JR XEQGO3 +; +ONERR: INC IY ;SKIP "ERROR" + CALL NXT + LD HL,0 ;FLAG NOT LOCAL + CP TLOCAL + JR NZ,ONERR1 + INC IY ;SKIP "LOCAL" + LD HL,(ERRTRP) + PUSH HL + LD HL,(ONERSP) + PUSH HL + LD HL,400H ;TYPE = 4, 'EXPONENT' = 0 + PUSH HL + LD HL,ERRTRP + PUSH HL + LD HL,LOCCHK + PUSH HL + LD HL,0 + ADD HL,SP + CALL NXT +ONERR1: LD (ONERSP),HL + LD (ERRTRP),IY + CP TOFF + JP NZ,REM + INC IY ;SKIP "OFF" + SBC HL,HL + LD (ONERSP),HL + LD (ERRTRP),HL +XEQGO3: JP XEQ +; +;ON expr GOTO line[,line...] [ELSE statement] +;ON expr GOTO line[,line...] [ELSE line] +;ON expr GOSUB line[,line...] [ELSE statement] +;ON expr GOSUB line[,line...] [ELSE line] +;ON expr PROCone [,PROCtwo..] [ELSE PROCotherwise] +;ON ERROR [LOCAL] statement [:statement...] +;ON ERROR [LOCAL] OFF +; +ON: CP TERROR + JR Z,ONERR ;"ON ERROR" + CALL EXPRI + LD A,(IY) + INC IY + LD E,',' ;SEPARATOR + CP TGOTO + JR Z,ON1 + CP TGOSUB + JR Z,ON1 + LD E,TPROC + CP E + LD A,39 + JR NZ,ERROR2 ;"ON syntax" +ON1: LD D,A + EXX + PUSH HL + EXX + POP BC ;ON INDEX + LD A,B + OR H + OR L + JR NZ,ON4 ;OUT OF RANGE + OR C + JR Z,ON4 + DEC C + JR Z,ON3 ;INDEX=1 +ON2: CALL TERMQ + JR Z,ON4 ;OUT OF RANGE + INC IY ;SKIP DELIMITER + CP '"' + JR Z,ON5 + CP E + JR NZ,ON2 + DEC C + JR NZ,ON2 +ON3: LD A,E + CP TPROC + JR Z,ONPROC + PUSH DE + CALL ITEMI ;LINE NUMBER + POP DE + LD A,D + CP TGOTO + JR Z,GOTO2 + CALL SPAN ;SKIP REST OF LIST + JR GOSUB1 +; +ON5: CALL QUOTE + INC IY + JR ON2 +; +ON4: LD A,(IY) + INC IY + CP TELSE + JP Z,IF1 ;ELSE CLAUSE + CP CR + JR NZ,ON4 + LD A,40 +ERROR2: JP ERROR ;"ON range" +; +ONPROC: LD A,TON + JP PROC +; +;GOTO line +; +GOTO: CALL ITEMI ;LINE NUMBER +GOTO1: CALL TERMQ + JP NZ,SYNTAX +GOTO2: EXX + CALL FINDL + PUSH HL + POP IY + JP Z,XEQ0 + LD A,41 + JR ERROR2 ;"No such line" +; +;GOSUB line +; +GOSUB: CALL ITEMI ;LINE NUMBER +GOSUB1: PUSH IY ;TEXT POINTER + CALL CHECK ;CHECK ROOM + CALL GOTO1 ;SAVE MARKER +GOSCHK EQU $ +; +;RETURN +; +RETURN: POP DE ;MARKER + LD HL,GOSCHK + OR A + SBC HL,DE + POP IY + JR Z,XEQGO2 + LD A,38 + JR ERROR2 ;"No GOSUB" +; +;REPEAT +; +REPEAT: PUSH IY + CALL CHECK + CALL XEQ +REPCHK EQU $ +; +;UNTIL expr +; +UNTIL: POP BC + PUSH BC + LD HL,REPCHK + OR A + SBC HL,BC + JR Z,UNTIL1 + LD A,3 + CALL RESLOC + JR NZ,UNTIL + LD A,43 + JR ERROR2 ;"Not in a REPEAT loop" +; +UNTIL1: CALL EXPRI + CALL TEST + POP BC + POP DE + JR NZ,XEQGO2 ;TRUE + PUSH DE + PUSH BC + PUSH DE + POP IY +XEQGO2: JP XEQ +; +;FOR var = expr TO expr [STEP expr] +; +FORVAR: LD A,34 + JR ERROR2 ;"FOR variable" +; +FOR: CALL ASSIGN + JR NZ,FORVAR ;"FOR variable" + PUSH AF ;SAVE TYPE + LD A,(IY) + CP TTO + LD A,36 + JR NZ,ERROR2 ;"No TO" + INC IY + PUSH IX + CALL EXPRN ;LIMIT + POP IX + POP AF + LD B,A ;TYPE + PUSH BC ;SAVE ON STACK + PUSH HL + LD HL,0 + LD C,H + EXX + PUSH HL + LD HL,1 ;PRESET STEP + EXX + LD A,(IY) + CP TSTEP + JR NZ,FOR1 + INC IY + PUSH IX + CALL EXPRN ;STEP + POP IX +FOR1: LD B,8 ;FPP '>' + BIT 7,H + JR NZ,FOR2 ;STEP SIGN + LD B,12 ;FPP '<' +FOR2: PUSH BC + PUSH HL + EXX + PUSH HL + EXX + PUSH IY ;SAVE TEXT POINTER + PUSH IX ;LOOP VARIABLE + CALL CHECK + CALL XEQ +FORCHK EQU $ +; +;NEXT [var[,var...]] +; +NEXT: POP BC ;MARKER + LD HL,FORCHK + OR A + SBC HL,BC + JR Z,NEXT2 + PUSH BC + LD A,3 + CALL RESLOC + JR NZ,NEXT + LD A,32 + JR ERROR3 ;"Not in a FOR loop" +; +NEXT2: CALL TERMQ + POP HL + PUSH HL + PUSH BC + PUSH HL + CALL NZ,GETVAR ;VARIABLE + POP DE + EX DE,HL + OR A +NEXT0: SBC HL,DE + JR NZ,NEXT1 + PUSH DE + LD IX,6+2 + ADD IX,SP + CALL DLOAD5 ;STEP + LD A,(IX+11) ;TYPE + POP IX + CALL LOADN ;LOOP VARIABLE + PUSH AF + LD A,'+' AND 0FH + CALL FPP ;ADD STEP + JR C,ERROR3 + POP AF ;RESTORE TYPE + CALL STOREN ;UPDATE VARIABLE + LD IX,12 + ADD IX,SP + CALL DLOAD5 ;LIMIT + LD A,(IX-1) + CALL FPP ;TEST AGAINST LIMIT + JR C,ERROR3 + INC H + JR NZ,LOOP ;KEEP LOOPING + LD HL,18 + ADD HL,SP + LD SP,HL + CALL NLIST + JR NEXT +; +LOOP: POP BC + POP DE + POP IY + PUSH IY + PUSH DE + PUSH BC + JP XEQ +; +NEXT1: LD HL,18 + ADD HL,SP + LD SP,HL ;"POP" THE STACK + POP BC + LD HL,FORCHK + SBC HL,BC + POP HL ;VARIABLE POINTER + PUSH HL + PUSH BC + JR Z,NEXT0 + LD A,33 +ERROR3: JP ERROR ;"Can't match FOR" +; +;FNname +;N.B. ENTERED WITH A <> TON +; +FN: PUSH AF ;MAKE SPACE ON STACK + CALL PROC1 +FNCHK EQU $ +; +;PROCname +;N.B. ENTERED WITH A = ON PROC FLAG +; +PROC: PUSH AF ;MAKE SPACE ON STACK + CALL PROC1 +PROCHK EQU $ +PROC1: CALL CHECK + DEC IY + PUSH IY + CALL GETDEF + POP BC + JR Z,PROC4 + LD A,30 + JR C,ERROR3 ;"Bad call" + PUSH BC + LD HL,(PAGE) +PROC2: LD A,TDEF + CALL SEARCH ;LOOK FOR "DEF" + JR C,PROC3 + PUSH HL + POP IY + INC IY ;SKIP DEF + CALL NXT + CALL GETDEF + PUSH IY + POP DE + JR C,PROC6 + CALL NZ,CREATE + PUSH IY + POP DE + LD (HL),E + INC HL + LD (HL),D ;SAVE ADDRESS +PROC6: EX DE,HL + LD A,CR + LD B,A + CPIR ;SKIP TO END OF LINE + JR PROC2 +PROC3: POP IY ;RESTORE TEXT POINTER + CALL GETDEF + LD A,29 + JR NZ,ERROR3 ;"No such FN/PROC" +PROC4: LD E,(HL) + INC HL + LD D,(HL) ;GET ADDRESS + LD HL,2 + ADD HL,SP + CALL NXT ;ALLOW SPACE BEFORE ( + PUSH DE ;EXCHANGE DE,IY + EX (SP),IY + POP DE + CP '(' ;ARGUMENTS? + JP NZ,PROC5 + CALL NXT ;ALLOW SPACE BEFORE ( + CP '(' + JP NZ,SYNTAX ;"Syntax error" + PUSH IY + POP BC ;SAVE IY IN BC + EXX + EX AF,AF' + XOR A ;INITIALISE RETURN COUNT + EX AF,AF' + CALL SAVLOC ;SAVE DUMMY VARIABLES + EX AF,AF' + OR A + JR Z,RETCHK ;NO RETURNS + PUSH HL + NEG + LD L,A + NEG + LD H,-1 ;HL = -RETURNS + ADD HL,HL + ADD HL,HL + ADD HL,HL ;-RETURNS * 8 + EX (SP),HL + POP IX + ADD IX,SP + LD SP,IX + PUSH AF ;PUSH RETURN COUNT + CALL RETCHK ;PUSH MARKER +RETCHK: EX AF,AF' + CALL BRAKET ;CLOSING BRACKET + EXX + PUSH BC + POP IY ;RESTORE IY + PUSH HL + CALL ARGUE ;TRANSFER ARGUMENTS + POP HL +; +; If any of the dummy arguments is the same as a passed-by-reference +; variable, then it must not be restored on exit (it would overwrite +; the wanted returned values), therefore search the saved values on +; the stack and if a match is found set bit 4 of the type. On exit +; from the FN/PROC this will prevent the dummies from being restored. +; + EX (SP),HL + OR A + LD BC,RETCHK + SBC HL,BC + ADD HL,BC + EX (SP),HL + JR NZ,PROC5 ;No RETURNs +; + PUSH DE + PUSH HL + LD HL,7 ;Skip two PUSHes and RETCHK + ADD HL,SP + LD A,(HL) ;RETURN count + INC HL + PUSH HL + POP IX ;Address RETURNs table +PROC0: LD E,A + LD D,0 + EX DE,HL + ADD HL,HL + ADD HL,HL + ADD HL,HL + ADD HL,DE ;HL addresses SAVLOC stack + INC HL + INC HL ;Bump past LOCCHK +PROC7: LD E,(HL) + INC HL + LD D,(HL) ;DE = SAVLOC VARPTR + INC HL + LD C,(HL) ;Length (if string) + INC HL + LD B,(HL) ;Variable type +; +; Scan RETURNs table for VARPTR match +; + PUSH BC ;Save type + PUSH HL + PUSH IX + LD B,A ;B = RETURN count +PROC8: LD L,(IX+4) + LD H,(IX+5) ;HL = RETURNed VARPTR + OR A + SBC HL,DE + JR Z,PROC9 + EX DE,HL + LD DE,8 + ADD IX,DE + EX DE,HL + DJNZ PROC8 +PROC9: POP IX + POP HL + POP BC ;Restore type +; +; If match, set bit 4 of type: +; + JR NZ,PROCA + SET 4,(HL) ;Flag don't restore +; +; Increment past stacked data: +; +PROCA: LD DE,3 + BIT 6,B + JR NZ,PROCB ;Whole array + LD E,5 + BIT 7,B + JR Z,PROCB ;Numeric + LD E,C + INC DE +PROCB: ADD HL,DE + LD C,(HL) + INC HL + LD B,(HL) + INC HL ; BC = marker ? + EX DE,HL + LD HL,LOCCHK + OR A + SBC HL,BC + EX DE,HL + JR Z,PROC7 ;Another + POP HL + POP DE +; +PROC5: LD (HL),E ;SAVE "RETURN ADDRESS" + INC HL + LD A,(HL) + LD (HL),D + CP TON ;WAS IT "ON PROC" ? + JR NZ,XEQGO + PUSH DE + EX (SP),IY + CALL SPAN ;SKIP REST OF ON LIST + EX (SP),IY + POP DE + LD (HL),D + DEC HL + LD (HL),E +XEQGO: JP XEQ +; +LOCERR: INC IY + JR XEQGO +; +;LOCAL DATA +; +LOCDAT: INC IY + LD HL,(DATPTR) + PUSH HL + LD A,40H + PUSH AF + LD HL,DATPTR + PUSH HL + LD HL,LOCCHK + PUSH HL + JR XEQGO +; +;LOCAL var[,var...] +; +LOCAL: CP TERROR + JR Z,LOCERR + CP TDATA + JR Z,LOCDAT + POP BC + PUSH BC + LD HL,FNCHK + OR A + SBC HL,BC + JR Z,LOCAL1 + LD HL,PROCHK + OR A + SBC HL,BC + JR Z,LOCAL1 + LD HL,LOCCHK + OR A + SBC HL,BC + JR Z,LOCAL1 + LD HL,ARRCHK + OR A + SBC HL,BC + JR Z,LOCAL1 + LD HL,RETCHK + OR A + SBC HL,BC + LD A,12 + JP NZ,ERROR ;"Not LOCAL" +LOCAL1: PUSH IY + POP BC + EXX + DEC IY + CALL SAVLOC + EXX + PUSH BC + POP IY +LOCAL2: CALL GETVAR + JP NZ,SYNTAX + BIT 6,A ;ARRAY? + JR NZ,LOCAL4 + OR A ;TYPE + EX AF,AF' + CALL ZERO + EX AF,AF' + PUSH AF + CALL P,STOREN ;ZERO + POP AF + LD E,C + CALL M,STORES +LOCAL3: CALL NLIST + JR LOCAL2 +; +LOCAL4: LD (IX+0),1 ;FLAG LOCAL ARRAY + LD (IX+1),0 + JR LOCAL3 +; +;ENDPROC +; +ENDPRO: POP BC + LD HL,PROCHK ;PROC MARKER + XOR A + SBC HL,BC + JR Z,ENDPR1 + PUSH BC ;PUT BACK + CALL RESLOC + JR NZ,ENDPRO + LD A,13 + JP ERROR ;"No PROC" +; +ENDPR1: POP IY + JP XEQ +; +;INPUT #channel,var,var... +; +INPUTN: CALL CHNL ;E = CHANNEL NUMBER +INPN1: CALL NLIST + PUSH DE + CALL VAR + POP DE + PUSH AF ;SAVE TYPE + PUSH HL ;VARPTR + OR A + JP M,INPN2 ;STRING + CALL OSBGET + EXX + LD L,A + EXX + CALL OSBGET + EXX + LD H,A + EXX + CALL OSBGET + LD L,A + CALL OSBGET + LD H,A + CALL OSBGET + LD C,A + POP IX + POP AF ;RESTORE TYPE + PUSH DE ;SAVE CHANNEL + CALL STOREN + POP DE + JR INPN1 +INPN2: LD HL,ACCS +INPN3: CALL OSBGET + CP CR + JR Z,INPN4 + LD (HL),A + INC L + JR NZ,INPN3 +INPN4: POP IX + POP AF + PUSH DE + EX DE,HL + CALL STACCS + POP DE + JR INPN1 +; +;INPUT ['][SPC(x)][TAB(x[,y])]["prompt",]var[,var...] +;INPUT LINE [SPC(x)][TAB(x[,y])]["prompt",]var[,var...] +; +INPUT: CP '#' + JR Z,INPUTN + LD C,0 ;FLAG PROMPT + CP TLINE + JR NZ,INPUT0 + INC IY ;SKIP "LINE" + LD C,80H +INPUT0: LD HL,BUFFER + LD (HL),CR ;INITIALISE EMPTY +INPUT1: CALL TERMQ + JP Z,XEQ ;DONE + INC IY + CP ',' + JR Z,INPUT3 ;SKIP COMMA + CP ';' + JR Z,INPUT3 + PUSH HL ;SAVE BUFFER POINTER + CP '"' + JR NZ,INPUT6 + PUSH BC + CALL CONS + POP BC + CALL PTEXT ;PRINT PROMPT + JR INPUT9 +INPUT6: CALL FORMAT ;SPC, TAB, ' + JR NZ,INPUT2 +INPUT9: POP HL + SET 0,C ;FLAG NO PROMPT + JR INPUT0 +INPUT2: DEC IY + PUSH BC + CALL VAR + POP BC + POP HL + PUSH AF ;SAVE TYPE + LD A,(HL) + INC HL + CP CR ;BUFFER EMPTY? + CALL Z,REFILL + BIT 7,C + PUSH AF + CALL NZ,LINES + POP AF + CALL Z,FETCHS + POP AF ;RESTORE TYPE + PUSH BC + PUSH HL + OR A + JP M,INPUT4 ;STRING + PUSH AF + PUSH IX + CALL VAL0 + POP IX + POP AF + CALL STOREN + JR INPUT5 +INPUT4: CALL STACCS +INPUT5: POP HL + POP BC +INPUT3: RES 0,C + JR INPUT1 +; +REFILL: BIT 0,C + JR NZ,REFIL0 ;NO PROMPT + LD A,'?' + CALL OUTCHR ;PROMPT + LD A,' ' + CALL OUTCHR +REFIL0: LD HL,BUFFER + PUSH BC + PUSH HL + PUSH IX + CALL OSLINE + POP IX + POP HL + POP BC + LD B,A ;POS AT ENTRY + XOR A + LD (COUNT),A + CP B + RET Z +REFIL1: LD A,(HL) + CP CR + RET Z + INC HL + DJNZ REFIL1 + RET +; +;READ var[,var...] +; +READ: CP '#' + JP Z,INPUTN + LD HL,(DATPTR) +READ0: LD A,(HL) + CP ':' + CALL Z,REFIL1 + INC HL ;SKIP COMMA OR "DATA" + CP CR ;END OF DATA STMT? + CALL Z,GETDAT + PUSH HL + CALL VAR + POP HL + OR A + JP M,READ1 ;STRING + PUSH HL + EX (SP),IY + PUSH AF ;SAVE TYPE + PUSH IX + CALL EXPRN + POP IX + POP AF + CALL STOREN + EX (SP),IY + JR READ2 +READ1: CALL FETCHS + PUSH HL + CALL STACCS +READ2: POP HL + LD (DATPTR),HL + CALL NLIST + JR READ0 +; +GETDAT: CALL DSRCH + INC HL + RET NC + LD A,42 + JR ERROR4 ;"Out of DATA" +; +;IF expr statement +;IF expr THEN statement [ELSE statement] +;IF expr THEN line [ELSE line] +;IF expr THEN +; +IF: CALL EXPRI + CALL TEST + JR Z,IFNOT ;FALSE + LD A,(IY) + CP TTHEN + JP NZ,XEQ +IF0: INC IY ;SKIP "THEN" + LD A,(IY) + CP ';' + JR Z,IF0 +IF1: CALL NXT + CP TLINO + JP NZ,XEQ ;STATEMENT FOLLOWS + JP GOTO ;LINE NO. FOLLOWS +; +IFELSE: LD A,(IY) + INC IY + CP ';' + JR NZ,IFNEXT + JR IFTHEN +; +IF2: CALL QUOTE ;SKIP STRING +IFNOT: LD A,(IY) + INC IY +IFNEXT: CP '"' + JR Z,IF2 ;QUOTED STRING + CP TREM + JP Z,REM ;REM + CP CR + JP Z,XEQ0 ;END OF LINE + CP TELSE + JR Z,IF1 ;ELSE CLAUSE + CP TTHEN + JR NZ,IFNOT ;TRY FOR END AGAIN +IFTHEN: LD A,(IY) + CP CR + JR NZ,IFELSE + LD BC,TELSE + LD DE,TENDIF*256+TTHEN + INC IY + CALL NSCAN + JP Z,XEQ1 +NENDIF: LD A,49 +ERROR4: JP ERROR ;"Missing ENDIF" +; +; ELSE (multi-line) +; +MELSE: LD BC,-3 + ADD IY,BC + LD BC,TENDIF + LD DE,TENDIF*256+TTHEN + CALL NSCAN + JP Z,XEQ + JR NENDIF +; +; WHEN and OTHERWISE: +; +WHEN: LD BC,-3 + ADD IY,BC + LD BC,TENDCASE + LD DE,TENDCASE*256+TOF + CALL NSCAN + JP Z,XEQ + LD A,47 + JR ERROR4 ;"Missing ENDCASE" +; +; CASE +; +CASE: CALL EXPR ;String or numeric + EX AF,AF' + LD B,0 ;Flag numeric + JP P,CASE6 ;numeric + CALL PUSHS ;put string on stack + POP BC ;C = length + LD B,1 ;Flag string +CASE6: LD A,(IY) + INC IY + CP TOF + LD A,37 + JR NZ,ERROR4 ;"Missing OF" + LD A,(IY) + INC IY ;Address line-length byte + CP CR + LD A,48 + JR NZ,ERROR4 ;"OF not last" +CASE1: XOR A ;Level +CASE0: EXX + PUSH HL ;Push to stack + EXX + PUSH HL + PUSH BC + LD L,A ;Level + LD BC,TOTHERWISE*256+TWHEN + LD DE,TENDCASE*256+TOF + CALL NSCAN1 + POP BC ;Restore from stack + POP HL + EXX + POP HL + EXX + LD A,47 + JP NZ,ERROR ;Missing ENDCASE + LD A,(IY-1) + CP TENDCASE + JR Z,CASE9 + CP TOTHERWISE + JR Z,CASE9 +CASE4: BIT 0,B ;Numeric or string? + JR NZ,CASE3 + PUSH BC ;Type/exponent/length + PUSH HL ;MS 32 bits + EXX + PUSH HL ;LS 32 bits + EXX + CALL EXPRN + LD IX,0 + ADD IX,SP ;Address stack + EXX + LD E,(IX+0) ;Get LS 32-bits + LD D,(IX+1) + EXX + LD E,(IX+2) + LD D,(IX+3) ;Get MS 32-bits + LD B,(IX+4) ;Get exponent + LD A,9 + CALL FPP ;In case integer vs float + LD A,L + OR A ;NZ if equal + EXX + POP HL + EXX + POP HL + POP BC + JR NZ,CASE5 ;Match found +CASE2: LD A,(IY) + INC IY + CP ',' + JR Z,CASE4 ;Not found, try another + EXX + PUSH IY + EX (SP),HL + LD A,CR + LD B,A + CPIR ;Find CR + EX (SP),HL + POP IY + EXX + LD A,(IY-2) ;Last token in previous line + CP TOF ;CASE statement in WHEN line + JR NZ,CASE1 + LD A,1 + JR CASE0 +; +;Finished, level stack if string: +; +CASE9: BIT 0,B + JR Z,CASE8 + LD H,0 + LD L,C + ADD HL,SP + LD SP,HL +CASE8: JP XEQ +; +;Matched, so skip any more expressions: +; +CASE5: CALL NXT + CP ',' + JR NZ,CASE9 ;End of list + INC IY + PUSH BC ;Save type and string length + CALL EXPR ;Evaluate but discard + POP BC + JR CASE5 +; +;String compare: +; +CASE3: PUSH BC + CALL EXPRS + POP BC + LD HL,0 + ADD HL,SP + LD B,E + LD DE,ACCS + PUSH BC + CALL SCP ;String compare + POP BC + LD B,1 + JR NZ,CASE2 + JR CASE5 +; +; WHILE +; +WHILE: PUSH IY ;Save current position + CALL CHECK + CALL WHICHK ;Push marker +WHICHK: CALL EXPRI + CALL TEST + JR NZ,XEQGO5 + POP BC ;Pop marker + POP BC ;Level stack + LD BC,TWHILE+TENDWHILE*256 + LD D,1 + CALL WSRCH +XEQGO5: JP XEQ +; +; ENDWHILE +; +ENDWHI: POP BC ;Marker + POP DE ;Saved text pointer + PUSH DE + PUSH BC + OR A + LD HL,WHICHK + SBC HL,BC + JR Z,ENDWH1 + LD A,3 + CALL RESLOC + JR NZ,ENDWHI + LD A,46 + JR ERROR5 ;"Not in a WHILE loop" +; +ENDWH1: PUSH IY + LD IY,0 + ADD IY,DE + CALL EXPRI + CALL TEST + POP DE ;Text pointer + JR NZ,XEQGO5 + POP BC ;Junk marker + POP BC ;Junk pointer + LD IY,0 + ADD IY,DE + JR XEQGO5 +; +;CLS +; +CLS: CALL CLRSCN + XOR A + LD (COUNT),A + JP XEQ +; +;STOP +; +STOP: CALL TELL + DEFB CR + DEFB LF + DEFB TSTOP + DEFB 0 + CALL SETLIN ;FIND CURRENT LINE + CALL SAYLN + CALL CRLF + JP CLOOP +; +;REPORT +; +REPOR: CALL REPORT + JP XEQ +; +;CLEAR +; +CLR: CALL CLEAR + LD HL,(PAGE) + JR RESTR1 +; +;RESTORE ERROR +; +RESERR: INC IY + LD A,2 + CALL RESLOC + JP NZ,XEQ + LD A,53 ;ON ERROR not LOCAL +ERROR5: JP ERROR +; +;RESTORE DATA +; +RESDAT: INC IY + LD A,1 + CALL RESLOC + JP NZ,XEQ + LD A,54 ;'DATA not LOCAL' + DEFB 21H +NOLINE: LD A,41 ;'No such line' + JR ERROR5 +; +;RESTORE [line] +; +RESTOR: CP TERROR + JR Z,RESERR + CP TDATA + JR Z,RESDAT + CP '+' + JR Z,RESREL + LD HL,(PAGE) + CALL TERMQ + JR Z,RESTR1 + CALL ITEMI + EXX + CALL FINDL ;SEARCH FOR LINE + JR NZ,NOLINE +RESTR1: CALL DSRCH + LD (DATPTR),HL + JP XEQ +; +RESREL: CALL EXPRI + EXX + EX DE,HL + PUSH IY + POP HL + LD A,CR + LD B,A + CPIR ;FIND LINE END + DEC E + JR Z,RESTR1 + JP M,RESTR1 + XOR A + LD B,A +RESTR2: LD C,(HL) + CP C + JR Z,NOLINE + ADD HL,BC + DEC E + JR NZ,RESTR2 + JR RESTR1 +; +;PTR#channel=expr +;PAGE=expr +;TIME=expr +;LOMEM=expr +;HIMEM=expr +; +PTR: CALL CHANEL + CALL EQUALS + LD A,E + PUSH AF + CALL EXPRI + PUSH HL + EXX + POP DE + POP AF + CALL PUTPTR + JR XEQGO1 +; +PAGEV: CALL EQUALS + CALL EXPRI + EXX + LD L,0 + LD (PAGE),HL + JR XEQGO1 +; +TIMEV: CP '$' + JR Z,TIMEVS + CALL EQUALS + CALL EXPRI + PUSH HL + EXX + POP DE + CALL PUTIME + JR XEQGO1 +; +TIMEVS: INC IY ;SKIP '$' + CALL EQUALS + CALL EXPRS + CALL PUTIMS + JR XEQGO1 +; +LOMEMV: CALL EQUALS + CALL EXPRI + CALL CLEAR + EXX + LD (LOMEM),HL + LD (FREE),HL + JR XEQGO1 +; +HIMEMV: CALL EQUALS + CALL EXPRI + EXX + LD DE,(FREE) + INC D + XOR A + SBC HL,DE + ADD HL,DE + JP C,ERROR ;"No room" + LD DE,(HIMEM) + LD (HIMEM),HL + EX DE,HL + SBC HL,SP + JP NZ,XEQ + EX DE,HL + LD SP,HL ;LOAD STACK POINTER +XEQGO1: JP XEQ +; +;WIDTH expr +; +WIDTHV: CALL EXPRI + EXX + LD A,L + LD (WIDTH),A + JR XEQGO1 +; +;TRACE ON +;TRACE OFF +;TRACE line +; +TRACE: INC IY + LD HL,0 + CP TON + JR Z,TRACE0 + CP TOFF + JR Z,TRACE1 + DEC IY + CALL EXPRI + EXX +TRACE0: DEC HL +TRACE1: LD (TRACEN),HL + JR XEQGO1 +; +;VDU expr,expr;.... +; +VDU: CALL EXPRI + EXX + LD A,L + CALL OSWRCH + LD A,(IY) + CP ',' + JR Z,VDU2 + CP ';' + JR NZ,VDU3 + LD A,H + CALL OSWRCH +VDU2: INC IY +VDU3: CALL TERMQ + JR NZ,VDU + JR XEQGO1 +; +;CLOSE channel number +; +CLOSE: CALL CHANEL + CALL OSSHUT + JR XEQGO1 +; +;BPUT #channel,byte +;BPUT #channel,string[;] +; +BPUT: CALL CHANEL ;CHANNEL NUMBER + PUSH DE + CALL COMMA + CALL EXPR + EX AF,AF' + JP M,BPUTS + CALL SFIX + EXX + LD A,L + POP DE + CALL OSBPUT +BPUTX: JR XEQGO1 +; +BPUTS: LD A,E + POP DE + LD D,A + LD HL,ACCS +BPUTS1: LD A,(HL) + INC HL + CALL OSBPUT + DEC D + JR NZ,BPUTS1 + CALL NXT + CP ';' + INC IY + JR Z,BPUTX + LD A,LF + CALL OSBPUT + DEC IY + JR BPUTX +; +;CALL address[,var[,var...]] +; +CALL: CALL EXPRI ;ADDRESS + EXX + PUSH HL ;SAVE IT + LD B,0 ;PARAMETER COUNTER + LD DE,BUFFER ;VECTOR +CALL1: CALL NXT + CP ',' + JR NZ,CALL2 + INC IY + INC B + CALL NXT + PUSH BC + PUSH DE + CALL VAR + POP DE + POP BC + INC DE + LD (DE),A ;PARAMETER TYPE + INC DE + EX DE,HL + LD (HL),E ;PARAMETER ADDRESS + INC HL + LD (HL),D + EX DE,HL + JR CALL1 +CALL2: LD A,B + LD (BUFFER),A ;PARAMETER COUNT + POP HL ;RESTORE ADDRESS + CALL USR1 + JP XEQ +; +;USR(address) +; +USR: CALL ITEMI + EXX +USR1: PUSH HL ;ADDRESS ON STACK + EX (SP),IY + INC H ;PAGE &FF? + LD HL,USR2 ;RETURN ADDRESS + PUSH HL + LD IX,STAVAR + CALL Z,OSCALL ;INTERCEPT PAGE &FF + LD C,(IX+24) + PUSH BC + POP AF ;LOAD FLAGS + LD A,(IX+4) ;LOAD Z80 REGISTERS + LD B,(IX+8) + LD C,(IX+12) + LD D,(IX+16) + LD E,(IX+20) + LD H,(IX+32) + LD L,(IX+48) + LD IX,BUFFER + JP (IY) ;OFF TO USER ROUTINE +USR2: POP IY + XOR A + LD C,A + RET +; +; LEFT$(A$[,N]) = string +; MID$(A$,N[,M]) = string +; RIGHT$(A$[,N]) = string +; +LEFTSL: CALL GETSTR + LD HL,0FF00H ;Default all but last + JR NZ,MIDSL1 + JR MIDSL0 +; +RITESL: CALL GETSTR + LD HL,0FFFFH ;Default last char only + JR NZ,MIDSL1 + JR MIDSL0 +; +MIDSL: CALL GETSTR + LD A,5 + JP NZ,ERROR ;'Missing comma' + INC IY + PUSH IX + CALL EXPRI + POP IX + EXX + CALL NXT + DEC L + LD H,254 ;Default rest of string + CP ',' + JR NZ,MIDSL1 +MIDSL0: INC IY + PUSH HL + PUSH IX + CALL EXPRI + POP IX + EXX + LD A,L + POP HL + OR A + JR Z,MIDSL2 ;Zero length + DEC A + ADD A,L + LD H,A + JR NC,MIDSL1 + LD A,L + INC A + JR Z,MIDSL1 + LD H,254 + JR MIDSL1 +; +MIDSL2: LD HL,1 +MIDSL1: CALL BRAKET + CALL EQUALS + PUSH HL + PUSH IX + CALL EXPRS + POP IX + POP HL + LD C,E + LD B,(IX+0) + LD E,(IX+2) + LD D,(IX+3) +; +; Source string at ACCS, length C +; Destination string at DE, length B +; L = first character to modify 0-254 +; H = last character to modify 0-254 +; IF L=255 THEN modify rightmost H + 2 chars +; ELSE IF H=255 modify all but last character +; ELSE IF L > H do nothing +; IX = destination VARPTR +; + LD A,L + INC A + JR NZ,SUBSL1 + INC H + INC H + LD A,C + CP H + JR NC,SUBSL0 + LD H,A +SUBSL0: LD A,B + SUB H + JR NC,SUBSL6 + XOR A +SUBSL6: LD L,A + JR SUBSL5 +; +SUBSL1: LD A,H + INC A + JR NZ,SUBSL2 + LD A,B + SUB 2 + JR C,SUBSL9 + LD H,A +SUBSL2: LD A,L + CP B + JR NC,SUBSL9 + LD A,H + CP B + JR C,SUBSL3 +SUBSL5: LD A,B + DEC A + LD H,A +SUBSL3: LD A,H + SUB L + JR C,SUBSL9 + INC A + CP C + JR C,SUBSL4 + LD A,C +SUBSL4: LD B,0 + LD H,B + LD C,A + OR A + JR Z,SUBSL9 + EX DE,HL + ADD HL,DE + EX DE,HL + LD HL,ACCS + LDIR +SUBSL9: JP XEQ +; +; EXIT FOR [var] +; EXIT REPEAT +; EXIT WHILE +; +EXIT: INC IY ;Skip FOR/REPEAT/WHILE + CP TFOR + JR NZ,EXIT0 + LD IX,0 ;For EXIT FOR + CALL TERMQ + CALL NZ,GETVAR + LD A,TFOR +EXIT0: LD D,1 ;Level for WSRCH + LD E,A +EXIT1: LD A,E + POP BC ;Marker + LD HL,FORCHK + OR A + SBC HL,BC + JR Z,EXIT4 + LD HL,REPCHK + OR A + SBC HL,BC + JR Z,EXIT6 + LD HL,WHICHK + OR A + SBC HL,BC + JR Z,EXIT7 + PUSH BC ;Put back marker + PUSH IX + POP BC + EXX + LD A,3 + CALL RESLOC + EXX + PUSH BC + POP IX + JR NZ,EXIT1 + LD A,44 + JP ERROR ;'Bad EXIT' +; +EXIT4: POP BC ;VARPTR + LD HL,14 ;Skip text pointer, limit & step + ADD HL,SP + LD SP,HL ;Pop FOR record + CP TFOR + JR NZ,EXIT1 + PUSH IX + POP HL + LD A,H + OR L + JR Z,EXIT5 + SBC HL,BC +EXIT5: LD BC,TFOR+TNEXT*256 + JR Z,EXIT8 + INC D ;Count nested FOR loops + JR EXIT1 +; +EXIT6: POP BC ;Text pointer + CP TREPEAT + JR NZ,EXIT1 + LD BC,TREPEAT+TUNTIL*256 + JR EXIT8 +; +EXIT7: POP BC ;Text pointer + CP TWHILE + JR NZ,EXIT1 + LD BC,TWHILE+TENDWHILE*256 +EXIT8: CALL WSRCH + CALL SPAN ;Skip UNTIL expression + JP XEQ +; +;PUT port,data +; +PUT: CALL EXPRI ;PORT ADDRESS + EXX + PUSH HL + CALL COMMA + CALL EXPRI ;DATA + EXX + POP BC + OUT (C),L ;OUTPUT TO PORT BC + JP XEQ +; +;SUBROUTINES: +; +;ASSIGN - Assign a numeric value to a variable. +;Outputs: NC, Z - OK, numeric scalar +; NC, NZ, PE - OK, string array (D = type, E = operator) +; else if NC, NZ, P - OK, numeric array (D = type, E = operator) +; else if NC, NZ - OK, string scalar +; C, NZ - illegal / invalid +; +ASSIGN: CALL GETVAR ;VARIABLE + RET C ;ILLEGAL VARIABLE + CALL NZ,PUTVAR + LD D,A ;Type + CALL NXT + INC IY + LD E,A ;Operator (or =) + CP '=' + CALL NZ,EQUALS + LD A,D + AND 11000000B + RET NZ ;String or array + PUSH DE + PUSH HL + CALL EXPRN + POP IX + POP DE +; +; Falls through to... +; +; MODIFY - Update numeric variable according to operator: +; Inputs: D = type +; E = operator +; HLH'L'C = value +; IX = destination VARPTR +; Destroys: Everything except IX,IY,SP +; +MODIFY: LD A,E + CP '=' + JR Z,STORE0 ;Simple assignment + PUSH DE + EXX + EX DE,HL + EXX + EX DE,HL + LD B,C + EX (SP),HL + LD A,H + EX (SP),HL + CALL LOADN + EX (SP),HL + LD A,L + EX (SP),HL + AND 15 + PUSH IX + CALL FPP + POP IX + POP DE + JP C,ERROR +STORE0: LD A,D ;Type +STOREN: CP 5 + JR Z,STORE5 + PUSH AF + INC C ;SPEED - & PRESERVE F' + DEC C ; WHEN CALLED BY FNEND0 + CALL NZ,SFIX ;CONVERT TO INTEGER + POP AF + CP 4 + JR Z,STORE4 + CP A ;SET ZERO +STORE1: EXX + LD (IX+0),L + EXX + RET +; +STORE5: LD (IX+4),C +STORE4: EXX + LD (IX+0),L + LD (IX+1),H + EXX + LD (IX+2),L + LD (IX+3),H + RET +; +; MODIFS - Update string variable according to operator: +; Inputs: H = type +; L = operator (= or +) +; E = string length (string in accumulator) +; IX = destination VARPTR +; Destroys: Everything except SP, IY +; +MODIFS: LD A,L ;Operator + CP '+' + LD A,H ;Type + JR NZ,STACCS + PUSH IY + PUSH IX + POP IY + CALL PUSHS + PUSH IY + POP IX + CALL LOADS + POP BC + LD A,B ;Type + INC C + DEC C + JR Z,MODFS1 ;Zero length + LD HL,0 + LD B,H + ADD HL,SP + LDIR + LD SP,HL +MODFS1: POP IY +; +; Falls through to: +; +STACCS: LD HL,ACCS +STORES: RRA + JR NC,STORS3 ;FIXED STRING + PUSH HL + CALL LOAD4 + LD A,E ;LENGTH OF STRING + EXX + LD L,A + LD A,H ;LENGTH ALLOCATED + EXX + CP E + JR NC,STORS1 ;ENOUGH ROOM + EXX + LD H,L + EXX + PUSH HL + LD B,0 + LD C,A + ADD HL,BC + LD BC,(FREE) + SBC HL,BC ;IS STRING LAST? + POP HL + JR Z,STORS0 + LD H,B + LD L,C ;DESTINATION +; + OR A ;V5 optimisation + JR Z,STORS0 + LD A,E +STORS2: LD E,A + DEC E + AND E + JR NZ,STORS2 + SCF + RL E + LD A,E + EXX + LD H,A + EXX +; +STORS0: SCF +STORS1: CALL STORE4 ;PRESERVES CARRY! + LD B,0 + LD C,E + EX DE,HL + POP HL + DEC C + INC C + RET Z ;NULL STRING + LDIR + RET NC ;STRING REPLACED + LD (FREE),DE +CHECK: PUSH HL + LD HL,(FREE) + INC H + SBC HL,SP + POP HL + RET C + XOR A + JP ERROR ;"No room" +; +STORS3: LD C,E + PUSH IX + POP DE + XOR A + LD B,A + CP C + JR Z,STORS5 + LDIR +STORS5: LD A,CR + LD (DE),A + RET +; +; SAVRET - SAVE 'RETURNed' PARAMETER INFO +; +SAVRET: LD (IX+0),L ;Formal VARPTR + LD (IX+1),H + LD (IX+2),A + EX (SP),IY + PUSH AF + PUSH IY + PUSH IX + CALL NXT + CALL VAR + POP IX + LD (IX+4),L ;Actual VARPTR + LD (IX+5),H + LD (IX+6),A + POP IY + POP AF + LD BC,8 + ADD IX,BC + JR ARGUE0 +; +;ARGUE: TRANSFER FN OR PROC ARGUMENTS FROM THE +; CALLING STATEMENT TO THE DUMMY VARIABLES VIA +; THE STACK. IT MUST BE DONE THIS WAY TO MAKE +; PROCFRED(A,B) DEF PROCFRED(B,A) WORK. +; Inputs: DE addresses parameter list +; IY addresses dummy variable list +; IX addresses RETURNed parameter data block +; Outputs: DE,IY updated +; Destroys: Everything +; +ARGUE: LD A,-1 + PUSH AF ;PUT MARKER ON STACK +ARGUE1: INC IY ;BUMP PAST ( OR , + INC DE + PUSH DE + LD B,0 + CALL NXT + CP TRETURN + JR NZ,ARGUE9 + INC IY ;SKIP 'RETURN' + CALL NXT + INC B ;FLAG 'RETURN' +ARGUE9: PUSH BC + PUSH IX + CALL GETVAR ;FORMAL PARAMETER + JR C,ARGERR + CALL NZ,PUTVAR + POP IX + POP BC + POP DE + PUSH HL ;VARPTR + PUSH AF + PUSH DE + DEC B + JR Z,SAVRET + EX (SP),IY +ARGUE0: BIT 6,A ;ARRAY? + JR NZ,ARGUE3 + OR A ;TYPE + JP M,ARGUE2 ;STRING + PUSH IX + CALL EXPRN ;ACTUAL PARAMETER + POP IX + EX (SP),IY + POP DE + POP AF + EXX + PUSH HL + EXX + PUSH HL + LD B,A + PUSH BC + JR ARGUE4 +; +ARGUE2: PUSH IX + CALL EXPRS + EXX + POP BC + EX (SP),IY + POP DE + EXX + POP AF + CALL PUSHS + EXX + PUSH BC + POP IX +ARGUE4: CALL NXT + CP ',' + JR NZ,ARGUE5 + LD A,(DE) + CP ',' + JR Z,ARGUE1 ;ANOTHER +ARGERR: LD A,31 + JP ERROR ;"Bad arguments" +; +ARGUE3: PUSH IX + CALL NXT + CALL GETVAR + JR C,ARGERR + LD C,(IX+0) + LD B,(IX+1) + POP IX + CALL NXT + EX (SP),IY + POP DE + POP AF + PUSH BC ;STACK ARRAY POINTER + PUSH AF ;STACK TYPE + JR ARGUE4 +; +ARGUE5: CALL BRAKET + LD A,(DE) + CP ')' + JR NZ,ARGERR + INC DE +UNSTAK: EXX +ARGUE6: POP BC + LD A,B + INC A + EXX + RET Z ;MARKER POPPED + EXX + DEC A + BIT 6,A ;ARRAY + JR NZ,ARGUE8 + OR A + JP M,ARGUE7 ;STRING + POP HL + EXX + POP HL + EXX + POP IX + CALL STOREN ;WRITE TO DUMMY + JR ARGUE6 +; +ARGUE7: CALL POPS + POP IX + CALL STACCS + JR ARGUE6 +; +ARGUE8: POP BC ;ARRAY POINTER + POP IX + LD (IX+0),C + LD (IX+1),B + JR ARGUE6 +; +;Restore RETURNed parameters, via the stack to ensure that +; PROCFRED(A,B) DEF PROCFRED(RETURN B,RETURN A) works. +; +RETXFR: LD A,-1 + PUSH AF ;PUT MARKER ON STACK +RETXF1: EXX + LD L,(IX+4) ;Actual parameter (destination) + LD H,(IX+5) + PUSH HL ;STACK VARPTR + LD L,(IX+0) ;Formal parameter (source) + LD H,(IX+1) + LD A,(IX+2) + BIT 6,A ;ARRAY? + JR NZ,RETXF3 + OR A ;TYPE + JP M,RETXF2 ;STRING + PUSH HL + EX (SP),IX + CALL LOADN + POP IX + EXX ;STACK VALUE + PUSH HL + EXX + PUSH HL +RETXF6: LD B,(IX+6) + PUSH BC ;TYPE & EXPONENT +RETXF5: CALL CHECK ;CHECK ROOM + JR RETXF4 +; +RETXF3: LD E,(HL) + INC HL + LD D,(HL) + PUSH DE ;STACK ARRAY POINTER + JR RETXF6 +; +RETXF2: PUSH HL + EX (SP),IX + CALL LOADS + POP IX + LD A,(IX+6) + EXX + PUSH IX + POP HL + EXX + CALL PUSHS + EXX + PUSH HL + POP IX + EXX +RETXF4: LD DE,8 + ADD IX,DE + EXX + DJNZ RETXF1 + JP UNSTAK +; +;Restore 'RETURNed' parameters, +; +RESRET: POP BC ;B = 'RETURN' COUNT + LD H,0 + LD L,B + ADD HL,HL + ADD HL,HL + ADD HL,HL ;RETURN COUNT * 8 + ADD HL,SP + LD IX,0 + ADD IX,SP ;ADDRESS PARAMETER LIST + PUSH AF + PUSH DE + PUSH HL + EXX + PUSH BC + PUSH DE + EXX + LD A,B + LD HL,ACCS + LD DE,BUFFER + LD BC,255 + LDIR + LD B,A + CALL RETXFR ;TRANSFER VIA STACK + LD HL,BUFFER + LD DE,ACCS + LD BC,255 + LDIR + EXX + POP DE + POP BC + EXX + POP HL + POP DE + POP AF + JR RESAR1 +; +; Restore LOCAL array or memory block: +; +RESARR: POP BC + BIT 7,B ;String array? + POP HL + POP BC + ADD HL,BC + ADD HL,SP + CALL NZ,FREESA ;Free string array +RESAR1: LD SP,HL + JR RESLO1 +; +; RESLOC - Restore local variables/arrays or DATA/ERROR status from stack +; Inputs: A = 0 if everything OK, bit0 set if DATPTR, bit1 set if ERRTRP +; Outputs: Z if nothing was restored, NZ if something was restored +; Destroys: A,B,C,D,E,H,L,H',L',IX,SP,flags +; +RESLOC: POP DE ;Return address + LD IX,0 ;To flag nothing was restored +RESLO1: POP BC ;Marker ? + LD HL,LOCCHK + OR A + SBC HL,BC + JR Z,RESLO2 ;Something to restore + OR A + JR NZ,RESLO8 + LD HL,RETCHK + SBC HL,BC + JR Z,RESRET + LD HL,ARRCHK + OR A + SBC HL,BC + JR Z,RESARR +RESLO8: PUSH IX + POP HL + LD A,H + OR L +RESLO0: PUSH BC ;Put back marker + EX DE,HL + JP (HL) ;Return +; +RESLO2: POP IX ;Variable pointer + OR A + JR Z,RESLO3 ;Everything allowed + PUSH IX + POP BC + BIT 0,A + JR Z,RESLO6 ;Bit 0 set, so + LD HL,DATPTR ;test for DATPTR + SBC HL,BC + JR Z,RESLO3 +RESLO6: OR A + BIT 1,A + JR Z,RESLO7 ;Bit 1 set, so + LD HL,ERRTRP ;test for ERRPTR + SBC HL,BC + JR Z,RESLO3 +RESLO7: PUSH BC ;Put back pointer + LD BC,LOCCHK + JR RESLO0 +; +RESLO3: POP BC ;Type / exponent + BIT 6,B + JR NZ,RESLO4 ;Array? + BIT 7,B + JR NZ,RESLO5 ;String? + POP HL + EXX + POP HL + EXX + BIT 4,B + JR NZ,RESLO1 + PUSH AF + LD A,B + CALL STOREN ;Numeric + POP AF + JR RESLO1 +; +RESLO4: POP HL + BIT 4,B + JR NZ,RESLO1 + LD (IX+0),L ;Array + LD (IX+1),H + JR RESLO1 +; +RESLO9: LD B,0 + ADD HL,BC + LD SP,HL +RESLGO: JR RESLO1 +; +RESLO5: LD HL,0 + ADD HL,SP + BIT 4,B + JR NZ,RESLO9 + PUSH AF + PUSH DE + LD E,C + LD A,B + CALL STORES ;String + POP DE + POP AF + LD SP,HL + JR RESLGO +; +;SAVLOC: SUBROUTINE TO STACK LOCAL PARAMETERS +; OF A FUNCTION OR PROCEDURE. +;THERE IS A LOT OF STACK MANIPULATION - CARE!! +; Inputs: IY is parameters pointer +; Outputs: IY updated +; A' incremented for each RETURN +; Destroys: A',A,B,C,D,E,H,L,IX,IY,F,SP +; +SAVLOC: POP DE ;RETURN ADDRESS +SAVLO1: INC IY ;BUMP PAST ( OR , + CALL NXT + CP TRETURN + JR NZ,SAVLO6 + EX AF,AF' + INC A ;RETURN counter + EX AF,AF' + INC IY ;Bump past RETURN + CALL NXT +SAVLO6: PUSH DE + EXX + PUSH BC + PUSH DE + PUSH HL + EXX + CALL VAR ;DUMMY VARIABLE + EXX + POP HL + POP DE + POP BC + EXX + POP DE + BIT 6,A ;ARRAY? + JR NZ,SAVLO3 + OR A ;TYPE + JP M,SAVLO2 ;STRING + EXX + PUSH HL ;SAVE H'L' + EXX + LD B,A ;TYPE + CALL LOADN + EXX + EX (SP),HL + EXX + PUSH HL + PUSH BC + JR SAVLO4 +; +SAVLO3: LD C,(IX+0) ;ARRAY POINTER + LD B,(IX+1) + PUSH BC ;SAVE TO STACK + PUSH AF ;SAVE TYPE + JR SAVLO4 +; +SAVLO2: PUSH AF ;STRING TYPE + PUSH DE + EXX + PUSH HL + EXX + CALL LOADS + EXX + POP HL + EXX + LD C,E + POP DE + CALL CHECK + POP AF ;LEVEL STACK + LD HL,0 + LD B,L + SBC HL,BC + ADD HL,SP + LD SP,HL + LD B,A ;TYPE + PUSH BC + JR Z,SAVLO4 + PUSH DE + LD DE,ACCS + EX DE,HL + LD B,L + LDIR ;SAVE STRING ON STACK + POP DE +SAVLO4: PUSH IX ;VARPTR + CALL SAVLO5 +LOCCHK EQU $ +SAVLO5: CALL CHECK + CALL NXT + CP ',' ;MORE? + JR Z,SAVLO1 + EX DE,HL + JP (HL) ;"RETURN" +; +TERMQ: CALL NXT + CP TELSE + RET NC + CP ':' ;ASSEMBLER SEPARATOR + RET NC + CP CR + RET +; +SPAN: CALL TERMQ + RET Z + INC IY + CP '"' + CALL Z,QUOTE + JR SPAN +; +EQUALS: CALL NXT + INC IY + CP '=' + RET Z + LD A,4 + JP ERROR ;"Mistake" +; +FORMAT: CP TTAB + JR Z,DOTAB + CP TSPC + JR Z,DOSPC + CP '''' + RET NZ + CALL CRLF + XOR A + RET +; +DOTAB: PUSH BC + CALL EXPRI + EXX + POP BC + LD A,(IY) + CP ',' + JR Z,DOTAB1 + CALL BRAKET + LD A,L +TABIT: LD HL,COUNT + CP (HL) + RET Z + PUSH AF + CALL C,CRLF + POP AF + SUB (HL) + JR SPACES +DOTAB1: INC IY + PUSH BC + PUSH HL + CALL EXPRI + EXX + POP DE + POP BC + CALL BRAKET + CALL PUTCSR + XOR A + RET +; +DOSPC: PUSH BC + CALL ITEMI + EXX + LD A,L + POP BC +SPACES: OR A + RET Z + PUSH BC + LD B,A +FILL1: LD A,' ' + CALL OUTCHR + DJNZ FILL1 + POP BC + XOR A + RET +; +PTEXT: LD HL,ACCS + INC E +PTEXT1: DEC E + RET Z + LD A,(HL) + INC HL + CALL OUTCHR + JR PTEXT1 +; +FETCHS: PUSH AF + PUSH BC + PUSH HL + EX (SP),IY + CALL XTRACT + CALL NXT + EX (SP),IY + POP HL + POP BC + POP AF + RET +; +LINES: LD DE,ACCS +LINE1S: LD A,(HL) + LD (DE),A + CP CR + RET Z + INC HL + INC E + JR LINE1S +; +XTRACT: CALL NXT + CP '"' + INC IY + JP Z,CONS + DEC IY + LD DE,ACCS +XTRAC1: LD A,(IY) + LD (DE),A + CP ',' + RET Z + CP CR + RET Z + INC IY + INC E + JR XTRAC1 +; +DSRCH: LD A,TDATA +SEARCH: LD B,0 +SRCH1: LD C,(HL) + INC C + DEC C + JR Z,SRCH2 ;FAIL + INC HL + INC HL + INC HL + CP (HL) + RET Z + DEC C + DEC C + DEC C + ADD HL,BC + JP SRCH1 +SRCH2: DEC HL ;POINT TO CR + SCF + RET +; +; NSCAN - scan for token at start of line, with nesting of inner structures +; Alternative entry at NSCAN1 with L = level (used by CASE) +; +; Inputs: B = token to find (1, start of line) +; C = token to find (2, start of line) +; E = token to nest (end of line) +; D = token to unnest (start of line) +; IY = start search area (line length byte) +; Outputs: NZ if not found +; Z if found, IY points to byte after token +; Destroys: A,B,C,L,IY,F +; +NSCAN: LD L,0 ;nest level +NSCAN1: LD A,(IY) ;get line length + OR A ;test zero = end of prog + JR Z,NSCAN6 + LD A,(IY+3) ;initial token + CP B ;test value reqd + JR Z,NSCAN3 ;found (1) + CP C + JR Z,NSCAN3 ;found (2) +NSCAN7: CP D ;unnest? + JR Z,NSCAN5 +NSCAN2: PUSH BC + LD B,0 + LD C,(IY) + ADD IY,BC ;go to next line + LD A,(IY-2) + CP E ;nest? + LD A,C + POP BC + JR NZ,NSCAN1 ;continue + CP 5 ;empty line ? + JR C,NSCAN1 ;continue + INC L ;increment nest level + JR NSCAN1 ;continue +; +NSCAN3: INC L + DEC L + JR NZ,NSCAN7 +NSCAN4: LD BC,4 + ADD IY,BC + XOR A ;Z + RET +; +NSCAN5: DEC L ;decrement nest level + JP P,NSCAN2 + JR NSCAN4 +; +NSCAN6: OR 1 ;NZ + RET +; +; WSRCH - search for token, with nesting of inner structures +; +; Inputs: B = token to find or unnest (anywhere) +; C = token to nest (anywhere), ignore after EXIT +; D = ordinal (1 = find first token, 2 = second) +; IY = address to start looking +; Outputs: IY points to byte after that found +; if not found abort to END +; Destroys: A,D,IY,F +; +WSRCH: LD A,(IY) + INC IY + CP '"' + CALL Z,QUOTE + CP TREM + JR Z,WSRCHM + CP TEXIT + JR Z,WSRCHE + CP B + JR Z,WSRCHX + CP C + JR Z,WSRCHP + CP CR + JR NZ,WSRCH +WSRCH1: LD A,(IY) ;Line length + INC IY + OR A + JP Z,END + INC IY + INC IY ;Skip line number + LD A,(IY) + CP TDATA + JR NZ,WSRCH +WSRCHM: LD A,(IY) + INC IY + CP CR + JR NZ,WSRCHM ;Skip to end of line + JR WSRCH1 +; +WSRCHP: INC D + JR WSRCH +; +WSRCHX: DEC D + JR NZ,WSRCH + RET +; +WSRCHE: CALL NXT + INC IY + JR WSRCH +; +; QUOTE - skip quoted string +; +QUOTE: LD A,(IY) + INC IY + CP CR + JP Z,MISQUO + CP '"' + JR NZ,QUOTE + RET +; +MISQUO: LD A,9 + JP ERROR ;"Missing quote" +; +; X14OR5 - multiply by 1, 4 or 5 +; Inputs: DE = number to be multiplied +; A = 1, 4 or 5 (else multiply by 4) +; Outputs: DE = DE * A +; Carry set if overflow +; Destroys: D,E,H,L,F +; +X14OR5: LD H,D + LD L,E + CP 1 + RET Z + CP 5 + ADD HL,HL + RET C + ADD HL,HL + RET C + EX DE,HL + RET NZ + ADD HL,DE + EX DE,HL + RET +; +; MUL16 - 16-bit multiply +; Inputs: HL = number to be multiplied +; BC = multiplier +; Outputs: HL = HL * BC +; Carry set if overflow +; Destroys: A,D,E,H,L,F +; +MUL16: EX DE,HL + LD HL,0 + LD A,16 +MUL161: ADD HL,HL + RET C ;OVERFLOW + SLA E + RL D + JR NC,MUL162 + ADD HL,BC + RET C +MUL162: DEC A + JR NZ,MUL161 + RET +; +CHANEL: CALL NXT + CP '#' + LD A,45 + JP NZ,ERROR ;"Missing #" +CHNL: INC IY ;SKIP '#' + CALL ITEMI + EXX + EX DE,HL + RET +; +; FREESA - Free members of a string array if adjacent to the top of heap +; Inputs: BC = length of array (= 4 * number of elements) +; HL addresses array first byte *above* array +; Outputs: NZ if any array element freed, Z if none +; Destroys: nothing +; +FREESA: PUSH AF +FREES0: PUSH BC + PUSH DE + PUSH HL + XOR A + LD D,B + LD E,C + LD B,A +FREES1: PUSH DE + DEC HL + LD D,(HL) + DEC HL + LD E,(HL) + DEC HL + LD C,(HL) + DEC HL + PUSH HL + LD HL,(FREE) + EX DE,HL + ADD HL,BC + SBC HL,DE + JR NZ,FREES2 + ADD HL,DE + SBC HL,BC + LD (FREE),HL + OR H +FREES2: POP DE + POP HL + LD C,4 + OR A + SBC HL,BC + EX DE,HL + JR NZ,FREES1 + OR A + POP HL + POP DE + POP BC + OR A + JR NZ,FREES0 + POP AF + RET +; + END diff --git a/Source/Apps/BBCBASIC/hook.z80 b/Source/Apps/BBCBASIC/hook.z80 new file mode 100644 index 00000000..f5619647 --- /dev/null +++ b/Source/Apps/BBCBASIC/hook.z80 @@ -0,0 +1,64 @@ + NAME ('HOOK') +; + GLOBAL CLG + GLOBAL COLOUR + GLOBAL DRAW + GLOBAL ENVEL + GLOBAL GCOL + GLOBAL MODE + GLOBAL MOVE + GLOBAL PLOT + GLOBAL SOUND + GLOBAL PUTIMS + GLOBAL CIRCLE + GLOBAL ELLIPSE + GLOBAL FILL + GLOBAL MOUSE + GLOBAL ORIGIN + GLOBAL RECTAN + GLOBAL LINE + GLOBAL TINT + GLOBAL WAIT + GLOBAL SYS +; + GLOBAL ADVAL + GLOBAL POINT + GLOBAL GETIMS + GLOBAL TINTFN + GLOBAL MODEFN + GLOBAL WIDFN +; + EXTRN EXTERR +; +CLG: +COLOUR: +DRAW: +ENVEL: +GCOL: +MODE: +MOVE: +PLOT: +SOUND: +ADVAL: +POINT: +GETIMS: +PUTIMS: +CIRCLE: +ELLIPSE: +FILL: +MOUSE: +ORIGIN: +RECTAN: +LINE: +TINT: +TINTFN: +MODEFN: +WIDFN: +WAIT: +SYS: + XOR A + CALL EXTERR + DEFM 'Sorry' + DEFB 0 +; + END diff --git a/Source/Apps/BBCBASIC/main.z80 b/Source/Apps/BBCBASIC/main.z80 new file mode 100644 index 00000000..5d947378 --- /dev/null +++ b/Source/Apps/BBCBASIC/main.z80 @@ -0,0 +1,2237 @@ + TITLE BBC BASIC (C) R.T.RUSSELL 1981-2024 + NAME ('MAIN') +; +;BBC BASIC INTERPRETER - Z80 VERSION +;COMMANDS AND COMMON MODULE - "MAIN" +;(C) COPYRIGHT R.T.RUSSELL 1981-2024 +; +;THE NAME BBC BASIC IS USED WITH THE PERMISSION +;OF THE BRITISH BROADCASTING CORPORATION AND IS +;NOT TRANSFERRABLE TO A FORKED OR DERIVED WORK. +; +;VERSION 2.3, 07-05-1984 +;VERSION 3.0, 01-03-1987 +;VERSION 5.0, 27-05-2024 +; + EXTRN XEQ + EXTRN RUN0 + EXTRN CHAIN0 + EXTRN TERMQ + EXTRN MUL16 + EXTRN X14OR5 + EXTRN SPACES + EXTRN ESCAPE + EXTRN CHECK + EXTRN SEARCH +; + EXTRN OSWRCH + EXTRN OSLINE + EXTRN OSINIT + EXTRN OSLOAD + EXTRN OSSAVE + EXTRN OSBGET + EXTRN OSBPUT + EXTRN OSSHUT + EXTRN OSSTAT + EXTRN PROMPT + EXTRN LTRAP + EXTRN OSCLI + EXTRN RESET +; + EXTRN COMMA + EXTRN BRAKET + EXTRN ZERO + EXTRN ITEMI + EXTRN EXPRI + EXTRN EXPRS + EXTRN DECODE + EXTRN LOADN + EXTRN SFIX +; + GLOBAL NXT + GLOBAL NLIST + GLOBAL START + GLOBAL OUTCHR + GLOBAL OUT + GLOBAL ERROR + GLOBAL EXTERR + GLOBAL REPORT + GLOBAL CLOOP + GLOBAL WARM + GLOBAL CLEAR + GLOBAL CRLF + GLOBAL SAYLN + GLOBAL LOAD0 + GLOBAL TELL + GLOBAL FINDL + GLOBAL GETTOP + GLOBAL SETLIN + GLOBAL GETVAR + GLOBAL PUTVAR + GLOBAL GETDEF + GLOBAL LOCATE + GLOBAL CREATE + GLOBAL PBCDL + GLOBAL LEXAN2 + GLOBAL RANGE + GLOBAL VERMSG + GLOBAL KEYWDS + GLOBAL KEYWDL +; + EXTRN PAGE + EXTRN ACCS + EXTRN BUFFER + EXTRN LOMEM + EXTRN HIMEM + EXTRN COUNT + EXTRN WIDTH + EXTRN FREE + EXTRN STAVAR + EXTRN DYNVAR + EXTRN ERRTXT + EXTRN ERR + EXTRN ERL + EXTRN CURLIN + EXTRN ERRTRP + EXTRN ONERSP + EXTRN FNPTR + EXTRN PROPTR + EXTRN AUTONO + EXTRN INCREM + EXTRN LISTON + EXTRN TRACEN +; +CR EQU 0DH +LF EQU 0AH +ESC EQU 1BH +; +TERROR EQU 85H +TLINE EQU 86H +TELSE EQU 8BH +TTHEN EQU 8CH +TLINO EQU 8DH +TFN EQU 0A4H +TTO EQU 0B8H +TWHILE EQU 0C7H +TCASE EQU 0C8H +TWHEN EQU 0C9H +TOF EQU 0CAH +TENDCASE EQU 0CBH +TOTHERWISE EQU 0CCH +TENDIF EQU 0CDH +TENDWHILE EQU 0CEH +TDATA EQU 0DCH +TDIM EQU 0DEH +TFOR EQU 0E3H +TGOSUB EQU 0E4H +TGOTO EQU 0E5H +TIF EQU 0E7H +TLOCAL EQU 0EAH +TNEXT EQU 0EDH +TON EQU 0EEH +TPROC EQU 0F2H +TREM EQU 0F4H +TREPEAT EQU 0F5H +TRESTORE EQU 0F7H +TTRACE EQU 0FCH +TUNTIL EQU 0FDH +TEXIT EQU 10H +; +TOKLO EQU 8FH +TOKHI EQU 93H +OFFSET EQU 0CFH-TOKLO +; +START: JP COLD + JP WARM + JP ESCAPE + JP EXTERR + JP TELL + JP TEXT + JP ITEMI + JP EXPRI + JP EXPRS + JP OSCLI + JP OSBGET + JP OSBPUT + JP OSSTAT + JP OSSHUT +COLD: LD HL,STAVAR ;COLD START + LD SP,HL + LD (HL),10 + INC L + LD (HL),9 + INC L + XOR A +PURGE: LD (HL),A ;CLEAR SCRATCHPAD + INC L + JR NZ,PURGE + LD A,37H ;V3.0 + LD (LISTON),A + LD HL,NOTICE + LD (ERRTXT),HL + CALL OSINIT + LD (HIMEM),DE + LD (PAGE),HL + CALL NEWIT + JP NZ,CHAIN0 ;AUTO-RUN + CALL TELL +VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta2' + DEFB CR + DEFB LF +NOTICE: DEFM '(C) Copyright R.T.Russell 2024' + DEFB CR + DEFB LF + DEFB 0 +WARM: DEFB 0F6H +CLOOP: SCF + LD SP,(HIMEM) + CALL PROMPT ;PROMPT USER + LD HL,LISTON + LD A,(HL) + AND 0FH ;LISTO + OR 30H ;OPT 3 + LD (HL),A + SBC HL,HL ;HL <- 0 (V3.0) + LD (ERRTRP),HL + LD (ONERSP),HL + LD (CURLIN),HL ;For CMOS EDIT->LIST + LD HL,(AUTONO) + PUSH HL + LD A,H + OR L + JR Z,NOAUTO + PUSH HL + CALL PBCD ;AUTO NUMBER + POP HL + LD BC,(INCREM) + LD B,0 + ADD HL,BC + JP C,TOOBIG + LD (AUTONO),HL + LD A,' ' + CALL OUTCHR +NOAUTO: LD HL,ACCS + CALL OSLINE ;GET CONSOLE INPUT + XOR A + LD (COUNT),A + LD IY,ACCS + LD HL,COMNDS + CALL LEX0 + POP HL + JR NZ,NOTCMD + ADD A,A + LD C,A + LD B,0 + LD HL,CMDTAB + ADD HL,BC + LD A,(HL) ;TABLE ENTRY + INC HL + LD H,(HL) + LD L,A + INC IY + CALL NXT + JP (HL) ;EXECUTE COMMAND +; +NOTCMD: LD A,H + OR L + CALL Z,LINNUM + CALL NXT + LD DE,BUFFER + LD C,1 ;LEFT MODE + PUSH HL + CALL LEXAN2 ;LEXICAL ANALYSIS + POP HL + LD (DE),A ;TERMINATOR + XOR A + LD B,A + LD C,E ;BC=LINE LENGTH + INC DE + LD (DE),A ;ZERO NEXT + LD A,H + OR L + LD IY,BUFFER ;FOR XEQ + JP Z,XEQ ;DIRECT MODE + PUSH BC + CALL FINDL + CALL Z,DEL + POP BC + LD A,C + OR A + JR Z,CLOOP2 ;DELETE LINE ONLY + ADD A,4 + LD C,A ;LENGTH INCLUSIVE + PUSH DE ;LINE NUMBER + PUSH BC ;SAVE LINE LENGTH + EX DE,HL + PUSH BC + CALL GETTOP + POP BC + PUSH HL + ADD HL,BC + PUSH HL + INC H + XOR A + SBC HL,SP + POP HL + JP NC,ERROR ;"No room" + EX (SP),HL + PUSH HL + INC HL + OR A + SBC HL,DE + LD B,H ;BC=AMOUNT TO MOVE + LD C,L + POP HL + POP DE + JR Z,ATEND + LDDR ;MAKE SPACE +ATEND: POP BC ;LINE LENGTH + POP DE ;LINE NUMBER + INC HL + LD (HL),C ;STORE LENGTH + INC HL + LD (HL),E ;STORE LINE NUMBER + INC HL + LD (HL),D + INC HL + LD DE,BUFFER + EX DE,HL + DEC C + DEC C + DEC C + LDIR ;ADD LINE + CALL CLEAN +CLOOP2: JP CLOOP +; +;LIST OF TOKENS AND KEYWORDS. +;IF A KEYWORD IS FOLLOWED BY NUL THEN IT WILL +; ONLY MATCH WITH THE WORD FOLLOWED IMMEDIATELY +; BY A DELIMITER. +; +KEYWDS: DEFB 80H + DEFM 'AND' + DEFB 94H + DEFM 'ABS' + DEFB 95H + DEFM 'ACS' + DEFB 96H + DEFM 'ADVAL' + DEFB 97H + DEFM 'ASC' + DEFB 98H + DEFM 'ASN' + DEFB 99H + DEFM 'ATN' + DEFB 9AH + DEFM 'BGET ' + DEFB 0D5H + DEFM 'BPUT ' + DEFB 0FH + DEFM 'BY ' ; v5 + DEFB 0FBH + DEFM 'COLOUR' + DEFB 0FBH + DEFM 'COLOR' + DEFB 0D6H + DEFM 'CALL' + DEFB 0C8H + DEFM 'CASE' ; v5 + DEFB 0D7H + DEFM 'CHAIN' + DEFB 0BDH + DEFM 'CHR$' + DEFB 01H + DEFM 'CIRCLE' ; v5 + DEFB 0D8H + DEFM 'CLEAR ' + DEFB 0D9H + DEFM 'CLOSE ' + DEFB 0DAH + DEFM 'CLG ' + DEFB 0DBH + DEFM 'CLS ' + DEFB 9BH + DEFM 'COS' + DEFB 9CH + DEFM 'COUNT ' + DEFB 0DCH + DEFM 'DATA' + DEFB 9DH + DEFM 'DEG' + DEFB 0DDH + DEFM 'DEF' + DEFB 81H + DEFM 'DIV' + DEFB 0DEH + DEFM 'DIM' + DEFB 0DFH + DEFM 'DRAW' + DEFB 02H + DEFM 'ELLIPSE' ; v5 + DEFB 0CBH + DEFM 'ENDCASE ' ; v5 + DEFB 0CDH + DEFM 'ENDIF ' ; v5 + DEFB 0E1H + DEFM 'ENDPROC ' + DEFB 0CEH + DEFM 'ENDWHILE ' ; v5 + DEFB 0E0H + DEFM 'END ' + DEFB 0E2H + DEFM 'ENVELOPE' + DEFB 8BH + DEFM 'ELSE' + DEFB 0A0H + DEFM 'EVAL' + DEFB 9EH + DEFM 'ERL ' + DEFB 85H + DEFM 'ERROR' + DEFB 0C5H + DEFM 'EOF ' + DEFB 10H + DEFM 'EXIT ' ; v5 + DEFB 82H + DEFM 'EOR' + DEFB 9FH + DEFM 'ERR ' + DEFB 0A1H + DEFM 'EXP' + DEFB 0A2H + DEFM 'EXT ' + DEFB 0E3H + DEFM 'FOR' + DEFB 0A3H + DEFM 'FALSE ' + DEFB 03H + DEFM 'FILL' ; v5 + DEFB 0A4H + DEFM 'FN' + DEFB 0E5H + DEFM 'GOTO' + DEFB 0BEH + DEFM 'GET$' + DEFB 0A5H + DEFM 'GET' + DEFB 0E4H + DEFM 'GOSUB' + DEFB 0E6H + DEFM 'GCOL' + DEFB 93H + DEFM 'HIMEM ' + DEFB 0E8H + DEFM 'INPUT' + DEFB 0E7H + DEFM 'IF' + DEFB 0BFH + DEFM 'INKEY$' + DEFB 0A6H + DEFM 'INKEY' + DEFB 0CH + DEFM 'INSTALL' ; v5 + DEFB 0A8H + DEFM 'INT' + DEFB 0A7H + DEFM 'INSTR(' + DEFB 86H + DEFM 'LINE' + DEFB 92H + DEFM 'LOMEM ' + DEFB 0EAH + DEFM 'LOCAL' + DEFB 0C0H + DEFM 'LEFT$(' + DEFB 0A9H + DEFM 'LEN' + DEFB 0E9H + DEFM 'LET' + DEFB 0ABH + DEFM 'LOG' + DEFB 0AAH + DEFM 'LN' + DEFB 0C1H + DEFM 'MID$(' + DEFB 0EBH + DEFM 'MODE' + DEFB 83H + DEFM 'MOD' + DEFB 04H + DEFM 'MOUSE' ; v5 + DEFB 0ECH + DEFM 'MOVE' + DEFB 0EDH + DEFM 'NEXT' + DEFB 0ACH + DEFM 'NOT' + DEFB 05H + DEFM 'ORIGIN' ; v5 + DEFB 0CCH + DEFM 'OTHERWISE' ; v5 + DEFB 0EEH + DEFM 'ON' + DEFB 87H + DEFM 'OFF ' + DEFB 0CAH + DEFM 'OF ' ; v5 + DEFB 84H + DEFM 'OR' + DEFB 8EH + DEFM 'OPENIN' + DEFB 0AEH + DEFM 'OPENOUT' + DEFB 0ADH + DEFM 'OPENUP' + DEFB 0FFH + DEFM 'OSCLI' + DEFB 0F1H + DEFM 'PRINT' + DEFB 90H + DEFM 'PAGE ' + DEFB 8FH + DEFM 'PTR ' + DEFB 0AFH + DEFM 'PI ' + DEFB 0F0H + DEFM 'PLOT' + DEFB 0B0H + DEFM 'POINT(' + DEFB 0EH + DEFM 'PUT' ; Token changed + DEFB 0F2H + DEFM 'PROC' + DEFB 0B1H + DEFM 'POS ' + DEFB 06H + DEFM 'QUIT ' ; v5 + DEFB 0F8H + DEFM 'RETURN ' + DEFB 0F5H + DEFM 'REPEAT' + DEFB 0F6H + DEFM 'REPORT ' + DEFB 0F3H + DEFM 'READ' + DEFB 0F4H + DEFM 'REM' + DEFB 0F9H + DEFM 'RUN ' + DEFB 0B2H + DEFM 'RAD' + DEFB 0F7H + DEFM 'RESTORE' + DEFB 0C2H + DEFM 'RIGHT$(' + DEFB 0B3H + DEFM 'RND ' + DEFB 07H + DEFM 'RECTANGLE' ; v5 + DEFB 88H + DEFM 'STEP' + DEFB 0B4H + DEFM 'SGN' + DEFB 0B5H + DEFM 'SIN' + DEFB 0B6H + DEFM 'SQR' + DEFB 89H + DEFM 'SPC' + DEFB 0C3H + DEFM 'STR$' + DEFB 0C4H + DEFM 'STRING$(' + DEFB 0D4H + DEFM 'SOUND' + DEFB 0FAH + DEFM 'STOP ' + DEFB 0C6H + DEFM 'SUM' ; v5 + DEFB 08H + DEFM 'SWAP' ; v5 + DEFB 09H + DEFM 'SYS' ; v5 + DEFB 0B7H + DEFM 'TAN' + DEFB 8CH + DEFM 'THEN' + DEFB 0B8H + DEFM 'TO' + DEFB 8AH + DEFM 'TAB(' + DEFB 0FCH + DEFM 'TRACE' + DEFB 91H + DEFM 'TIME ' + DEFB 0AH + DEFM 'TINT' + DEFB 0B9H + DEFM 'TRUE ' + DEFB 0FDH + DEFM 'UNTIL' + DEFB 0BAH + DEFM 'USR' + DEFB 0EFH + DEFM 'VDU' + DEFB 0BBH + DEFM 'VAL' + DEFB 0BCH + DEFM 'VPOS ' + DEFB 0FEH + DEFM 'WIDTH' + DEFB 0BH + DEFM 'WAIT ' ; v5 + DEFB 0C9H + DEFM 'WHEN' ; v5 + DEFB 0C7H + DEFM 'WHILE' ; v5 +;'LEFT' TOKENS: + DEFB 0CFH + DEFM 'PTR' + DEFB 0D1H + DEFM 'TIME' + DEFB 0D3H + DEFM 'HIMEM' + DEFB 0D2H + DEFM 'LOMEM' + DEFB 0D0H + DEFM 'PAGE' +; + DEFB 11H + DEFM 'Missing ' + DEFB 12H + DEFM 'No such ' + DEFB 13H + DEFM 'Bad ' + DEFB 14H + DEFM ' range' + DEFB 15H + DEFM 'variable' + DEFB 16H + DEFM 'Out of' + DEFB 17H + DEFM 'No ' + DEFB 18H + DEFM ' space' + DEFB 19H + DEFM 'Not in a ' + DEFB 1AH + DEFM ' loop' + DEFB 1BH + DEFM ' not ' +KEYWDL EQU $-KEYWDS + DEFW -1 +; +;LIST OF IMMEDIATE MODE COMMANDS: +; +COMNDS: DEFB 80H + DEFM 'AUTO' + DEFB 81H + DEFM 'DELETE' + DEFB 82H + DEFM 'LIST' + DEFB 83H + DEFM 'LOAD' + DEFB 84H + DEFM 'NEW ' + DEFB 85H + DEFM 'OLD ' + DEFB 86H + DEFM 'RENUMBER' + DEFB 87H + DEFM 'SAVE' + DEFW -1 +; +;IMMEDIATE MODE COMMANDS: +; +CMDTAB: DEFW AUTO + DEFW DELETE + DEFW LIST + DEFW LOAD + DEFW NEW + DEFW OLD + DEFW RENUM + DEFW SAVE +; +;ERROR MESSAGES: +; +ERRWDS: DEFB 17H + DEFM 'room' + DEFB 0 + DEFB 16H + DEFB 14H + DEFW 0 + DEFM 'Multiple label' + DEFB 0 + DEFM 'Mistake' + DEFB 0 + DEFB 11H + DEFM ',' + DEFB 0 + DEFM 'Type mismatch' + DEFB 0 + DEFB 19H + DEFB TFN + DEFW 0 + DEFB 11H + DEFM '"' + DEFB 0 + DEFB 13H + DEFB TDIM + DEFB 0 + DEFB TDIM + DEFB 18H + DEFB 0 + DEFB 19H + DEFB TFN + DEFM ' or ' + DEFB TPROC + DEFB 0 + DEFB 19H + DEFB TPROC + DEFB 0 + DEFB 13H + DEFM 'use of array' + DEFB 0 + DEFB 13H + DEFM 'subscript' + DEFB 0 + DEFM 'Syntax error' + DEFB 0 + DEFM 'Escape' + DEFB 0 + DEFM 'Division by zero' + DEFB 0 + DEFM 'String too long' + DEFB 0 + DEFM 'Number too big' + DEFB 0 + DEFM '-ve root' + DEFB 0 + DEFM 'Log' + DEFB 14H + DEFB 0 + DEFM 'Accuracy lost' + DEFB 0 + DEFM 'Exponent' + DEFB 14H + DEFW 0 + DEFB 12H + DEFB 15H + DEFB 0 + DEFB 11H + DEFM ')' + DEFB 0 + DEFB 13H + DEFM 'hex or binary' + DEFB 0 + DEFB 12H + DEFB TFN + DEFM '/' + DEFB TPROC + DEFB 0 + DEFB 13H + DEFM 'call' + DEFB 0 + DEFB 13H + DEFM 'arguments' + DEFB 0 + DEFB 19H + DEFB TFOR + DEFB 1AH + DEFB 0 + DEFM 'Can''t match ' + DEFB TFOR + DEFB 0 + DEFB 13H + DEFB TFOR + DEFM ' ' + DEFB 15H + DEFW 0 + DEFB 11H + DEFB TTO + DEFW 0 + DEFB 17H + DEFB TGOSUB + DEFB 0 + DEFB TON + DEFM ' syntax' + DEFB 0 + DEFB TON + DEFB 14H + DEFB 0 + DEFB 12H + DEFM 'line' + DEFB 0 + DEFB 16H + DEFM ' ' + DEFB TDATA + DEFB 0 + DEFB 19H + DEFB TREPEAT + DEFB 1AH + DEFB 0 + DEFB 13H + DEFB TEXIT + DEFB 0 + DEFB 11H + DEFM '#' + DEFB 0 + DEFB 19H ;46 Not in a WHILE loop + DEFB TWHILE + DEFB 1AH + DEFB 0 + DEFB 11H ;47 Missing ENDCASE + DEFB TENDCASE + DEFB 0 + DEFB TOF ;48 OF not last + DEFB 1BH + DEFM 'last' + DEFB 0 + DEFB 11H ;49 Missing ENDIF + DEFB TENDIF + DEFB 0 + DEFW 0 + DEFB 0 + DEFB TON ;53 ON ERROR not LOCAL + DEFM ' ' + DEFB TERROR + DEFB 1BH + DEFB TLOCAL + DEFB 0 + DEFB TDATA ;54 DATA not LOCAL + DEFB 1BH + DEFB TLOCAL + DEFB 0 +; +;Indent tokens (first four needn't be at start of line): +; +TOKADD: DEFB TFOR + DEFB TREPEAT + DEFB TWHILE + DEFB TCASE + DEFB TELSE + DEFB TWHEN + DEFB TOTHERWISE +LENADD EQU $-TOKADD +; +;Outdent tokens (first three needn't be at start of line): +; +TOKSUB: DEFB TNEXT + DEFB TUNTIL + DEFB TENDWHILE + DEFB TENDCASE + DEFB TENDIF + DEFB TELSE + DEFB TWHEN + DEFB TOTHERWISE +LENSUB EQU $-TOKSUB +; +;COMMANDS: +; +;DELETE line,line +; +DELETE: CALL DLPAIR +DELET1: LD A,(HL) + OR A + JP Z,WARM + INC HL + LD E,(HL) + INC HL + LD D,(HL) + DEC HL + DEC HL + EX DE,HL + SCF + SBC HL,BC + EX DE,HL + JR NC,WARMNC + PUSH BC + CALL DEL + POP BC + JR DELET1 +; +;LISTO expr +; +LISTO: INC IY ;SKIP "O" + CALL EXPRI + EXX + LD A,L + LD (LISTON),A +CLOOP1: JP CLOOP +; +;LIST +;LIST line +;LIST line,line [IF string] +;LIST ,line +;LIST line, +; +LIST: CP 'O' + JR Z,LISTO + LD C,1 + LD DE,BUFFER + CALL LEXAN2 + LD (DE),A + LD IY,BUFFER + CALL DLPAIR + CALL NXT + CP TIF ;IF CLAUSE ? + LD A,0 ;INIT IF-CLAUSE LENGTH + JR NZ,LISTB + INC IY ;SKIP IF + CALL NXT ;SKIP SPACES (IF ANY) + EX DE,HL + PUSH IY + POP HL ;HL ADDRESSES IF CLAUSE + LD A,CR + PUSH BC + LD BC,256 + CPIR ;LOCATE CR + LD A,C + CPL ;A = SUBSTRING LENGTH + POP BC + EX DE,HL +LISTB: LD E,A ;IF-CLAUSE LENGTH + LD A,B + OR C + JR NZ,LISTA + DEC BC +LISTA: EXX + LD IX,LISTON + LD E,0 ;INDENTATION COUNT + EXX + LD A,20 +; +LISTC: PUSH BC ;SAVE HIGH LINE NUMBER + PUSH DE ;SAVE IF-CLAUSE LENGTH + PUSH HL ;SAVE PROGRAM POINTER + EX AF,AF' + LD A,(HL) + OR A + JR Z,WARMNC +; +;CHECK IF PAST TERMINATING LINE NUMBER: +; + LD A,E ;A = IF-CLAUSE LENGTH + INC HL + LD E,(HL) + INC HL + LD D,(HL) ;DE = LINE NUMBER + DEC HL + DEC HL + PUSH DE ;SAVE LINE NUMBER + EX DE,HL + SCF + SBC HL,BC + EX DE,HL + POP DE ;RESTORE LINE NUMBER +WARMNC: JP NC,WARM + LD C,(HL) ;C = LINE LENGTH + 4 + LD B,A ;B = IF-CLAUSE LENGTH +; +;CHECK FOR IF CLAUSE: +; + INC HL + INC HL + INC HL ;HL ADDRESSES LINE TEXT + DEC C + DEC C + DEC C + DEC C ;C = LINE LENGTH + PUSH DE ;SAVE LINE NUMBER + PUSH HL ;SAVE LINE ADDRESS + XOR A ;A <- 0 + CP B ;WAS THERE AN IF-CLAUSE + PUSH IY + POP DE ;DE ADDRESSES IF-CLAUSE + CALL NZ,SEARCH ;SEARCH FOR IF CLAUSE + POP HL ;RESTORE LINE ADDRESS + POP DE ;RESTORE LINE NUMBER + PUSH IY + CALL Z,LISTIT ;LIST IF MATCH + POP IY +; + EX AF,AF' + DEC A + CALL LTRAP + POP HL ;RESTORE POINTER + LD E,(HL) + LD D,0 + ADD HL,DE ;ADDRESS NEXT LINE + POP DE ;RESTORE IF-CLAUSE LEN + POP BC ;RESTORE HI LINE NUMBER + JR LISTC +; +;RENUMBER +;RENUMBER start +;RENUMBER start,increment +;RENUMBER ,increment +; +RENUM: CALL CLEAR ;USES DYNAMIC AREA + CALL PAIR ;LOAD HL,BC + EXX + LD HL,(PAGE) + LD DE,(LOMEM) +RENUM1: LD A,(HL) ;BUILD TABLE + OR A + JR Z,RENUM2 + INC HL + LD C,(HL) ;OLD LINE NUMBER + INC HL + LD B,(HL) + EX DE,HL + LD (HL),C + INC HL + LD (HL),B + INC HL + EXX + PUSH HL + ADD HL,BC ;ADD INCREMENT + JP C,TOOBIG ;"Too big" + EXX + POP BC + LD (HL),C + INC HL + LD (HL),B + INC HL + EX DE,HL + DEC HL + DEC HL + XOR A + LD B,A + LD C,(HL) + ADD HL,BC ;NEXT LINE + EX DE,HL + PUSH HL + INC H + SBC HL,SP + POP HL + EX DE,HL + JR C,RENUM1 ;CONTINUE + CALL EXTERR ;"Out of space" + DEFB 16H + DEFB 18H + DEFB 0 +; +RENUM2: EX DE,HL + LD (HL),-1 + INC HL + LD (HL),-1 + LD DE,(LOMEM) + EXX + LD HL,(PAGE) +RENUM3: LD C,(HL) + LD A,C + OR A + JP Z,WARM + EXX + EX DE,HL + INC HL + INC HL + LD E,(HL) + INC HL + LD D,(HL) + INC HL + PUSH DE + EX DE,HL + EXX + POP DE + INC HL + LD (HL),E ;NEW LINE NUMBER + INC HL + LD (HL),D + INC HL + DEC C + DEC C + DEC C + LD B,0 +RENUM7: LD A,TLINO + CPIR ;SEARCH FOR LINE NUMBER + JR NZ,RENUM3 + PUSH BC + PUSH HL + PUSH HL + POP IY + EXX + PUSH HL + CALL DECODE ;DECODE LINE NUMBER + POP HL + EXX + LD B,H + LD C,L + LD HL,(LOMEM) +RENUM4: LD E,(HL) ;CROSS-REFERENCE TABLE + INC HL + LD D,(HL) + INC HL + EX DE,HL + OR A ;CLEAR CARRY + SBC HL,BC + EX DE,HL + LD E,(HL) ;NEW NUMBER + INC HL + LD D,(HL) + INC HL + JR C,RENUM4 + EX DE,HL + JR Z,RENUM5 ;FOUND + CALL TELL + DEFM 'Failed at ' + DEFB 0 + EXX + PUSH HL + EXX + POP HL + CALL PBCDL + CALL CRLF + JR RENUM6 +RENUM5: POP DE + PUSH DE + DEC DE + CALL ENCODE ;RE-WRITE NUMBER +RENUM6: POP HL + POP BC + JR RENUM7 +; +;AUTO +;AUTO start,increment +;AUTO start +;AUTO ,increment +; +AUTO: CALL PAIR + LD (AUTONO),HL + LD A,C + LD (INCREM),A + JR CLOOP0 +; +;BAD +;NEW +; +BAD: CALL TELL ;"Bad program' + DEFB 13H + DEFM 'program' + DEFB CR + DEFB LF + DEFB 0 +NEW: CALL NEWIT + JR CLOOP0 +; +;OLD +; +OLD: LD HL,(PAGE) + PUSH HL + INC HL + INC HL + INC HL + LD BC,252 + LD A,CR + CPIR + JR NZ,BAD + LD A,L + POP HL + LD (HL),A + CALL CLEAN +CLOOP0: JP CLOOP +; +;LOAD filename +; +LOAD: CALL EXPRS ;GET FILENAME + LD A,CR + LD (DE),A + CALL LOAD0 + CALL CLEAR + JR WARM0 +; +;SAVE filename +; +SAVE: CALL EXPRS ;FILENAME + LD A,CR + LD (DE),A + LD DE,(PAGE) + CALL GETTOP + OR A + SBC HL,DE + LD B,H ;LENGTH OF PROGRAM + LD C,L + LD HL,ACCS + CALL OSSAVE +WARM0: JP WARM +; +;ERROR +;N.B. CARE NEEDED BECAUSE SP MAY NOT BE VALID (E.G. ABOVE HIMEM) +; +ERROR: LD HL,ERRWDS + LD C,A + OR A + JR Z,ERROR1 + LD B,A ;ERROR NUMBER + XOR A +ERROR0: CP (HL) + INC HL + JR NZ,ERROR0 + DJNZ ERROR0 + JR ERROR1 ;MUST NOT PUSH HL HERE +; +EXTERR: POP HL + LD C,A +ERROR1: LD (ERRTXT),HL + LD HL,(ONERSP) + LD A,H + OR L + LD SP,(HIMEM) ;MUST SET SP BEFORE 'CALL' + JR Z,ERROR4 + LD SP,HL +ERROR4: LD A,C ;ERROR NUMBER + CALL SETLIN ;SP IS SET NOW + LD (ERR),A + LD (ERL),HL + OR A + JR Z,ERROR2 ;'FATAL' ERROR + LD HL,(ERRTRP) + LD A,H + OR L + PUSH HL + POP IY + JP NZ,XEQ ;ERROR TRAPPED +ERROR2: LD SP,(HIMEM) + SBC HL,HL + LD (AUTONO),HL + LD (TRACEN),HL ;CANCEL TRACE + CALL RESET ;RESET OPSYS + CALL CRLF + CALL REPORT ;MESSAGE + LD HL,(ERL) + CALL SAYLN + LD E,0 + CALL C,OSSHUT ;CLOSE ALL FILES + CALL CRLF + JP CLOOP +; +;SUBROUTINES: +; +; +;LEX - SEARCH FOR KEYWORDS +; Inputs: HL = start of keyword table +; IY = start of match text +; Outputs: If found, Z-flag set, A=token. +; If not found, Z-flag reset, A=(IY). +; IY updated (if NZ, IY unchanged). +; Destroys: A,B,H,L,IY,F +; +LEX: LD HL,KEYWDS +LEX0: LD A,(IY) + LD B,(HL) + INC HL + CP (HL) + JR Z,LEX2 + RET C ;FAIL EXIT +LEX1: INC HL + LD A,(HL) + CP 160 + JP PE,LEX1 + JR LEX0 +; +LEX2: PUSH IY ;SAVE POINTER +LEX3: INC HL + LD A,(HL) + CP 160 + JP PO,LEX6 ;FOUND + INC IY + LD A,(IY) + CP (HL) + JR NZ,LEX7 + CP 161 + JP PE,LEX3 +LEX7: LD A,(IY) + CP '.' + JR Z,LEX6 ;FOUND (ABBREV.) + CALL RANGE1 + JR C,LEX5 +LEX4: POP IY ;RESTORE POINTER + JR LEX1 +; +LEX5: LD A,(HL) + CP ' ' + JR NZ,LEX4 + DEC IY +LEX6: POP AF + XOR A + LD A,B + RET +; +;DEL - DELETE A PROGRAM LINE. +; Inputs: HL addresses program line. +; Destroys: B,C,F +; +DEL: PUSH DE + PUSH HL + PUSH HL + LD B,0 + LD C,(HL) + ADD HL,BC + PUSH HL + EX DE,HL + CALL GETTOP + SBC HL,DE + LD B,H + LD C,L + POP HL + POP DE + LDIR ;DELETE LINE + POP HL + POP DE + RET +; +;LOAD0 - LOAD A DISK FILE THEN CLEAN. +; Inputs: Filename in ACCS (term CR) +; Destroys: A,B,C,D,E,H,L,F +; +;CLEAN - CHECK FOR BAD PROGRAM, FIND END OF TEXT +; AND WRITE FF FF. +; Destroys: A,B,C,H,L,F +; +LOAD0: LD DE,(PAGE) + LD HL,-256 + ADD HL,SP + SBC HL,DE ;FIND AVAILABLE SPACE + LD B,H + LD C,L + LD HL,ACCS + CALL OSLOAD ;LOAD + CALL NC,NEWIT + LD A,0 + JP NC,ERROR ;"No room" +CLEAN: CALL GETTOP + DEC HL + LD (HL),-1 ;WRITE &FFFF + DEC HL + LD (HL),-1 + JR CLEAR +; +GETTOP: LD HL,(PAGE) + LD B,0 + LD A,CR +GETOP1: LD C,(HL) + INC C + DEC C + JR Z,GETOP2 + ADD HL,BC + DEC HL + CP (HL) + INC HL + JR Z,GETOP1 + JP BAD +GETOP2: INC HL ;N.B. CALLED FROM NEWIT + INC HL + INC HL + RET +; +;NEWIT - NEW PROGRAM THEN CLEAR +; Destroys: H,L +; +;CLEAR - CLEAR ALL DYNAMIC VARIABLES INCLUDING +; FUNCTION AND PROCEDURE POINTERS. +; Destroys: Nothing +; +NEWIT: LD HL,(PAGE) + LD (HL),0 +CLEAR: PUSH HL + PUSH BC + PUSH AF + CALL GETTOP + LD (LOMEM),HL + LD (FREE),HL + LD HL,DYNVAR + LD B,2*(54+2) +CLEAR1: LD (HL),0 + INC HL + DJNZ CLEAR1 + POP AF + POP BC + POP HL + RET +; +;LISTIT - LIST A PROGRAM LINE. +; Inputs: HL addresses line +; DE = line number (binary) +; E' = indentation count +; IX addresses LISTON +; Destroys: A,D,E,B',C',D',E',H',L',IY,F +; +LISTIT: PUSH HL + EX DE,HL + PUSH BC + CALL PBCD + POP BC + POP HL + LD A,(HL) + EXX + LD HL,TOKSUB + LD BC,LENSUB + CPIR + CALL Z,INDSUB + CP TENDCASE + CALL Z,INDSUB + LD A,' ' + BIT 0,(IX) + CALL NZ,OUTCHR + LD A,E + ADD A,A + BIT 1,(IX) + CALL NZ,SPACES + EXX + LD A,(HL) + LD E,0 + EXX + LD BC,LENADD +LIST5: LD HL,TOKADD + CPIR + CALL Z,INDADD + CP TCASE + CALL Z,INDADD + EXX +LIST8: LD A,(HL) + INC HL + CP CR + JR Z,LIST9 + LD D,A + CP TEXIT + JR NZ,LIST6 + SET 7,E +LIST6: CP '"' + JR NZ,LIST7 + INC E +LIST7: CALL LOUT + LD A,E + AND 81H + JR NZ,LIST8 + LD A,(HL) + EXX + LD HL,TOKSUB + LD BC,3 + CPIR + CALL Z,INDSUB + LD C,4 + JR LIST5 +; +LIST9: LD A,D + CP TTHEN + EXX + CALL Z,INDADD + EXX + JR CRLF +; +PRLINO: PUSH HL + POP IY + PUSH BC + CALL DECODE + POP BC + EXX + PUSH BC + PUSH DE + CALL PBCDL + POP DE + POP BC + EXX + PUSH IY + POP HL + RET +; +LOUT: BIT 0,E + JR NZ,OUTCHR + CP TLINO + JR Z,PRLINO + CALL OUT + RET +; +INDADD: INC E + RET +; +INDSUB: DEC E + JP P,INDRET + INC E +INDRET: RET +; +;CRLF - SEND CARRIAGE RETURN, LINE FEED. +; Destroys: A,F +;OUTCHR - OUTPUT A CHARACTER TO CONSOLE. +; Inputs: A = character +; Destroys: A,F +; +CRLF: LD A,CR + CALL OUTCHR + LD A,LF +OUTCHR: CALL OSWRCH + SUB CR + JR Z,CARRET + RET C ;NON-PRINTING + LD A,(COUNT) + INC A +CARRET: LD (COUNT),A + RET Z + PUSH HL + LD HL,(WIDTH) + CP L + POP HL + RET NZ + JR CRLF +; +;OUT - SEND CHARACTER OR KEYWORD +; Inputs: A = character (>=10, <128) +; A = Token (<10, >=128) +; Destroys: A,F +; +OUT: CP 160 + JP PE,OUTCHR + PUSH BC + PUSH HL + LD HL,KEYWDS + LD BC,KEYWDL + CPIR + CALL NZ,OUTCHR + LD B,160 + CP 145 + JP PE,TOKEN1 + INC B +TOKEN1: LD A,(HL) + INC HL + CP B + PUSH AF + CALL PE,OUTCHR + POP AF + JP PE,TOKEN1 + POP HL + POP BC + RET +; +;FINDL - FIND PROGRAM LINE. +; Inputs: HL = line number (binary) +; Outputs: HL addresses line (if found) +; DE = line number +; Z-flag set if found. +; Destroys: A,B,C,D,E,H,L,F +; +FINDL: EX DE,HL + LD HL,(PAGE) + XOR A ;A=0 + CP (HL) + INC A + RET NC + XOR A ;CLEAR CARRY + LD B,A +FINDL1: LD C,(HL) + PUSH HL + INC HL + LD A,(HL) + INC HL + LD H,(HL) + LD L,A + SBC HL,DE + POP HL + RET NC ;FOUND OR PAST + ADD HL,BC + JR FINDL1 +; +;SETLIN - Search program for line containing address. +; Inputs: Address in (CURLIN) +; Outputs: Line number in HL +; Destroys: B,C,D,E,H,L,F +; +SETLIN: LD B,0 + LD DE,(CURLIN) + LD HL,(PAGE) + OR A + SBC HL,DE + ADD HL,DE + JR NC,SET3 +SET1: LD C,(HL) + INC C + DEC C + JR Z,SET3 + ADD HL,BC + SBC HL,DE + ADD HL,DE + JR C,SET1 + SBC HL,BC + INC HL + LD E,(HL) ;LINE NUMBER + INC HL + LD D,(HL) + EX DE,HL +SET2: RET +; +SET3: LD HL,0 + JR SET2 +; +;SAYLN - PRINT " at line nnnn" MESSAGE. +; Inputs: HL = line number +; Outputs: Carry=0 if line number is zero. +; Carry=1 if line number is non-zero. +; Destroys: A,B,C,D,E,H,L,F +; +SAYLN: LD A,H + OR L + RET Z + CALL TELL + DEFM ' at line ' + DEFB 0 +PBCDL: LD C,0 + JR PBCD0 +; +;PBCD - PRINT NUMBER AS DECIMAL INTEGER. +; Inputs: HL = number (binary). +; Outputs: Carry = 1 +; Destroys: A,B,C,D,E,H,L,F +; +PBCD: LD C,' ' +PBCD0: LD B,5 + LD DE,10000 +PBCD1: XOR A +PBCD2: SBC HL,DE + INC A + JR NC,PBCD2 + ADD HL,DE + DEC A + JR Z,PBCD3 + SET 4,C + SET 5,C +PBCD3: OR C + CALL NZ,OUTCHR + LD A,B + CP 5 + JR Z,PBCD4 + ADD HL,HL + LD D,H + LD E,L + ADD HL,HL + ADD HL,HL + ADD HL,DE +PBCD4: LD DE,1000 + DJNZ PBCD1 + SCF + RET +; +;HANDLE WHOLE ARRAY: +; +GETV1: INC IY + INC IY ;SKIP () + PUSH HL ;SET EXIT CONDITIONS + POP IX + LD A,D + OR 64 ;FLAG ARRAY + CP A + RET +; +;PUTVAR - CREATE VARIABLE AND INITIALISE TO ZERO. +; Inputs: HL, IY as returned from GETVAR (NZ). +; Outputs: As GETVAR. +; Destroys: everything +; +PUTVAR: CALL CREATE + LD A,(IY) + CP '(' + JR NZ,GETVZ ;SET EXIT CONDITIONS + LD A,(IY+1) + CP ')' ;WHOLE ARRAY? + JR Z,GETV1 +ARRAY: LD A,14 ;'Bad use of array' +ERROR3: JP ERROR +; +;GETVAR - GET LOCATION OF VARIABLE, RETURN IN HL & IX +; Inputs: IY addresses first character. +; Outputs: Carry set and NZ if illegal character. +; Z-flag set if variable found, then: +; A = variable type (0,4,5,128 or 129) +; (68,69 or 193 for whole array) +; HL = IX = variable pointer. +; IY updated +; If Z-flag & carry reset, then: +; HL, IY set for subsequent PUTVAR call. +; Destroys: everything +; +GETVAR: LD A,(IY) + CP '!' + JR Z,GETV5 + CP '?' + JR Z,GETV6 + CP '|' + JR Z,GETVF + CP '$' + JR Z,GETV4 + CALL LOCATE + RET NZ + LD A,(IY) + CP '(' ;ARRAY? + JR NZ,GETVX ;EXIT + LD A,(IY+1) + CP ')' ;WHOLE ARRAY? + JR Z,GETV1 + PUSH DE ;SAVE TYPE + LD A,(HL) + INC HL + LD H,(HL) + LD L,A ;INDIRECT LINK + AND 0FEH + OR H + JR Z,ARRAY + LD A,(HL) ;NO. OF DIMENSIONS + OR A + JR Z,ARRAY + INC HL + LD DE,0 ;ACCUMULATOR + PUSH AF + INC IY ;SKIP ( +GETV3: PUSH HL + PUSH DE + CALL EXPRI ;SUBSCRIPT + EXX + POP DE + EX (SP),HL + LD C,(HL) + INC HL + LD B,(HL) + INC HL + EX (SP),HL + EX DE,HL + PUSH DE + CALL MUL16 ;HL=HL*BC + POP DE + ADD HL,DE + EX DE,HL + OR A + SBC HL,BC + LD A,15 + JR NC,ERROR3 ;"Subscript" + POP HL + POP AF + DEC A ;DIMENSION COUNTER + JR NZ,GETV2 + CALL BRAKET ;CLOSING BRACKET + POP AF ;RESTORE TYPE + PUSH HL + CALL X14OR5 ;DE=DE*n + POP HL + ADD HL,DE + LD D,A ;TYPE + LD A,(IY) +GETVX: CP '?' + JR Z,GETV9 + CP '!' + JR Z,GETV8 +GETVZ: PUSH HL ;SET EXIT CONDITIONS + POP IX + LD A,D + CP A + RET +; +GETV2: PUSH AF + CALL COMMA + JR GETV3 +; +;PROCESS UNARY & BINARY INDIRECTION: +; +GETV5: LD A,4 ;UNARY 32-BIT INDIRN. + JR GETV7 +GETV6: XOR A ;UNARY 8-BIT INDIRECTION + JR GETV7 +GETVF: LD A,5 ;VARIANT INDIRECTION + JR GETV7 +GETV4: LD A,128 ;STATIC STRING +GETV7: SBC HL,HL + PUSH AF + JR GETV0 +; +GETV8: LD B,4 ;32-BIT BINARY INDIRN. + JR GETVA +GETV9: LD B,0 ;8-BIT BINARY INDIRN. +GETVA: PUSH HL + POP IX + LD A,D ;TYPE + CP 129 + RET Z ;STRING! + PUSH BC + CALL LOADN ;LEFT OPERAND + CALL SFIX + EXX +GETV0: PUSH HL + INC IY + CALL ITEMI + EXX + POP DE + POP AF + ADD HL,DE + PUSH HL + POP IX + CP A + RET +; +;GETDEF - Find entry for FN or PROC in dynamic area. +; Inputs: IY addresses byte following "DEF" token. +; Outputs: Z flag set if found +; Carry set if neither FN or PROC first. +; If Z: HL points to entry +; IY addresses delimiter +; Destroys: A,D,E,H,L,IY,F +; +GETDEF: LD A,(IY+1) + CALL RANGE1 + RET C + LD A,(IY) + LD HL,FNPTR + CP TFN + JR Z,LOC2 + LD HL,PROPTR + CP TPROC + JR Z,LOC2 + SCF + RET +; +;LOCATE - Try to locate variable name in static or +;dynamic variables. If illegal first character return +;carry, non-zero. If found, return no-carry, zero. +;If not found, return no-carry, non-zero. +; Inputs: IY addresses first character of name. +; A=(IY) +; Outputs: Z-flag set if found, then: +; IY addresses terminator +; HL addresses location of variable +; D=type of variable: 4 = integer +; 5 = floating point +; 129 = string +; Destroys: A,D,E,H,L,IY,F +; +LOCATE: SUB '@' + RET C + LD H,0 + CP 'Z'-'@'+1 + JR NC,LOC0 ;NOT STATIC + ADD A,A + LD L,A + LD A,(IY+1) ;2nd CHARACTER + CP '%' + JR NZ,LOC1 ;NOT STATIC + LD A,(IY+2) + CP '(' + JR Z,LOC1 ;NOT STATIC + ADD HL,HL + LD DE,STAVAR ;STATIC VARIABLES + ADD HL,DE + INC IY + INC IY + LD D,4 ;INTEGER TYPE + XOR A + RET +; +LOC0: CP '_'-'@' + RET C + CP 'z'-'@'+1 + CCF + DEC A ;SET NZ + RET C + SUB 3 + ADD A,A + LD L,A +LOC1: LD DE,DYNVAR ;DYNAMIC VARIABLES + DEC L + DEC L + SCF + RET M + ADD HL,DE +LOC2: LD E,(HL) + INC HL + LD D,(HL) + LD A,D + OR E + JR Z,LOC6 ;UNDEFINED VARIABLE + LD H,D + LD L,E + INC HL ;SKIP LINK + INC HL + PUSH IY +LOC3: LD A,(HL) ;COMPARE + INC HL + INC IY + CP (IY) + JR Z,LOC3 + OR A ;0=TERMINATOR + JR Z,LOC5 ;FOUND (MAYBE) +LOC4: POP IY + EX DE,HL + JR LOC2 ;TRY NEXT ENTRY +; +LOC5: DEC IY + LD A,(IY) + CP '(' + JR Z,LOCX ;FOUND + INC IY + CALL RANGE + JR C,LOCX ;FOUND + CP '(' + JR Z,LOC4 ;KEEP LOOKING + LD A,(IY-1) + CALL RANGE1 + JR NC,LOC4 ;KEEP LOOKING +LOCX: POP DE +TYPE: LD A,(IY-1) + CP '$' + LD D,129 + RET Z ;STRING + CP '&' + LD D,1 + RET Z ;BYTE + CP '%' + LD D,4 + RET Z ;INTEGER + INC D + CP A + RET +; +LOC6: INC A ;SET NZ + RET +; +;CREATE - CREATE NEW ENTRY, INITIALISE TO ZERO. +; Inputs: HL, IY as returned from LOCATE (NZ). +; Outputs: As LOCATE, GETDEF. +; Destroys: As LOCATE, GETDEF. +; +CREATE: XOR A + LD DE,(FREE) + LD (HL),D + DEC HL + LD (HL),E + EX DE,HL + LD (HL),A + INC HL + LD (HL),A + INC HL +LOC7: INC IY + CALL RANGE ;END OF VARIABLE? + JR C,LOC8 + LD (HL),A + INC HL + CALL RANGE1 + JR NC,LOC7 + CP '(' + JR Z,LOC8 + LD A,(IY+1) + CP '(' + JR Z,LOC7 + INC IY +LOC8: LD (HL),0 ;TERMINATOR + INC HL + PUSH HL + CALL TYPE + LD A,(IY) + CP '(' + LD A,2 ;SIZE OF INDIRECT LINK + JR Z,LOC9 + LD A,D + OR A ;STRING? + JP P,LOC9 + LD A,4 +LOC9: LD (HL),0 ;INITIALISE TO ZERO + INC HL + DEC A + JR NZ,LOC9 + LD (FREE),HL + CALL CHECK + POP HL + XOR A + RET +; +;LINNUM - GET LINE NUMBER FROM TEXT STRING +; Inputs: IY = Text Pointer +; Outputs: HL = Line number (zero if none) +; IY updated +; Destroys: A,D,E,H,L,IY,F +; +LINNUM: CALL NXT + LD HL,0 +LINNM1: LD A,(IY) + SUB '0' + RET C + CP 10 + RET NC + INC IY + LD D,H + LD E,L + ADD HL,HL ;*2 + JR C,TOOBIG + ADD HL,HL ;*4 + JR C,TOOBIG + ADD HL,DE ;*5 + JR C,TOOBIG + ADD HL,HL ;*10 + JR C,TOOBIG + LD E,A + LD D,0 + ADD HL,DE ;ADD IN DIGIT + JR NC,LINNM1 +TOOBIG: LD A,20 + JP ERROR ;"Too big" +; +;PAIR - GET PAIR OF LINE NUMBERS FOR RENUMBER/AUTO. +; Inputs: IY = text pointer +; Outputs: HL = first number (10 by default) +; BC = second number (10 by default) +; Destroys: A,B,C,D,E,H,L,B',C',D',E',H',L',IY,F +; +PAIR: CALL LINNUM ;FIRST + LD A,H + OR L + JR NZ,PAIR1 + LD L,10 +PAIR1: CALL TERMQ + INC IY + PUSH HL + LD HL,10 + CALL NZ,LINNUM ;SECOND + EX (SP),HL + POP BC + LD A,B + OR C + RET NZ + CALL EXTERR + DEFM 'Silly' + DEFB 0 +; +;DLPAIR - GET PAIR OF LINE NUMBERS FOR DELETE/LIST. +; Inputs: IY = text pointer +; Outputs: HL = points to program text +; BC = second number (0 by default) +; Destroys: A,B,C,D,E,H,L,IY,F +; +DLPAIR: CALL LINNUM + PUSH HL + CALL TERMQ + JR Z,DLP1 + CP TIF + JR Z,DLP1 + INC IY + CALL LINNUM +DLP1: EX (SP),HL + CALL FINDL + POP BC + RET +; +;TEST FOR VALID CHARACTER IN VARIABLE NAME: +; Inputs: IY addresses character +; Outputs: Carry set if out-of-range. +; Destroys: A,F +; +RANGE: LD A,(IY) + CP '$' + RET Z + CP '%' + RET Z + CP '(' + RET Z + CP '&' + RET Z +RANGE1: CP '0' + RET C + CP '9'+1 + CCF + RET NC + CP '@' ;V2.4 + RET Z +RANGE2: CP 'A' + RET C + CP 'Z'+1 + CCF + RET NC + CP '_' + RET C + CP 'z'+1 + CCF + RET +; +;LEXAN - LEXICAL ANALYSIS. +; Bit 0,C: 1=left, 0=right +; Bit 3,C: 1=in HEX +; Bit 4,C: 1=accept line number +; Bit 5,C: 1=in variable, FN, PROC +; Bit 6,C: 1=in REM, DATA, * +; Bit 7,C: 1=in quotes +; Inputs: IY addresses source string +; DE addresses destination string +; (must be page boundary) +; C sets initial mode +; Outputs: DE, IY updated +; A holds carriage return +; +LEXAN1: LD (DE),A ;TRANSFER TO BUFFER + INC DE ;INCREMENT POINTERS + INC IY +LEXAN2: LD A,E ;MAIN ENTRY + CP 252 ;TEST LENGTH + LD A,19 + JP NC,ERROR ;'String too long' + LD A,(IY) + CP CR + RET Z ;END OF LINE + CALL RANGE1 + JR NC,LEXAN3 + RES 5,C ;NOT IN VARIABLE + RES 3,C ;NOT IN HEX +LEXAN3: CP ' ' + JR Z,LEXAN1 ;PASS SPACES + CP ',' + JR Z,LEXAN1 ;PASS COMMAS + CP 'G' + JR C,LEXAN4 + RES 3,C ;NOT IN HEX +LEXAN4: CP '"' + JR NZ,LEXAN5 + RL C + CCF ;TOGGLE C7 + RR C +LEXAN5: BIT 4,C + JR Z,LEXAN6 + RES 4,C + PUSH BC + PUSH DE + CALL LINNUM ;GET LINE NUMBER + POP DE + POP BC + LD A,H + OR L + CALL NZ,ENCODE ;ENCODE LINE NUMBER + JR LEXAN2 ;CONTINUE +; +LEXAN6: DEC C + JR Z,LEXAN7 ;C=1 (LEFT) + INC C + JR NZ,LEXAN1 + OR A + CALL P,LEX ;TOKENISE IF POSS. + JR LEXAN8 +; +LEXAN7: CP '*' + JR Z,LEXAN9 + OR A + CALL P,LEX ;TOKENISE IF POSS. + CP TOKLO + JR C,LEXAN8 + CP TOKHI+1 + JR NC,LEXAN8 + ADD A,OFFSET ;LEFT VERSION +LEXAN8: CP TREM + JR Z,LEXAN9 + CP TDATA + JR NZ,LEXANA +LEXAN9: SET 6,C ;QUIT TOKENISING +LEXANA: CP TFN + JR Z,LEXANB + CP TPROC + JR Z,LEXANB + CALL RANGE2 + JR C,LEXANC +LEXANB: SET 5,C ;IN VARIABLE/FN/PROC +LEXANC: CP '&' + JR NZ,LEXAND + SET 3,C ;IN HEX +LEXAND: LD HL,LIST1 + PUSH BC + LD BC,LIST1L + CPIR + POP BC + JR NZ,LEXANE + SET 4,C ;ACCEPT LINE NUMBER +LEXANE: LD HL,LIST2 + PUSH BC + LD BC,LIST2L + CPIR + POP BC + JR NZ,LEXANF + SET 0,C ;ENTER LEFT MODE +LEXANF: JP LEXAN1 +; +LIST1: DEFB TGOTO + DEFB TGOSUB + DEFB TRESTORE + DEFB TTRACE +LIST2: DEFB TTHEN + DEFB TELSE +LIST1L EQU $-LIST1 + DEFB TREPEAT + DEFB TERROR + DEFB ':' +LIST2L EQU $-LIST2 +; +;ENCODE - ENCODE LINE NUMBER INTO PSEUDO-BINARY FORM. +; Inputs: HL=line number, DE=string pointer +; Outputs: DE updated, BIT 4,C set. +; Destroys: A,B,C,D,E,H,L,F +; +ENCODE: SET 4,C + EX DE,HL + LD (HL),TLINO + INC HL + LD A,D + AND 0C0H + RRCA + RRCA + LD B,A + LD A,E + AND 0C0H + OR B + RRCA + RRCA + XOR 01010100B + LD (HL),A + INC HL + LD A,E + AND 3FH + OR '@' + LD (HL),A + INC HL + LD A,D + AND 3FH + OR '@' + LD (HL),A + INC HL + EX DE,HL + RET +; +;TEXT - OUTPUT MESSAGE. +; Inputs: HL addresses text (terminated by nul) +; Outputs: HL addresses character following nul. +; Destroys: A,H,L,F +; +REPORT: LD HL,(ERRTXT) +TEXT: LD A,(HL) + INC HL + OR A + RET Z + CP LF + JR Z,TEXTLF ;Token for TINT + CALL OUT + JR TEXT +; +TEXTLF: CALL OUTCHR + JR TEXT +; +;TELL - OUTPUT MESSAGE. +; Inputs: Text follows subroutine call (term=nul) +; Destroys: A,F +; +TELL: EX (SP),HL ;GET RETURN ADDRESS + CALL TEXT + EX (SP),HL + RET +; +; NLIST - Check for end of list +; +NLIST: CALL NXT + CP ',' ;ANOTHER VARIABLE? + JR Z,NXT1 + POP BC ;DITCH RETURN ADDRESS + JP XEQ +; +NXT: LD A,(IY) + CP ' ' + RET NZ +NXT1: INC IY + JR NXT +; + END START diff --git a/Source/Apps/BBCBASIC/math.z80 b/Source/Apps/BBCBASIC/math.z80 new file mode 100644 index 00000000..5a3ba8c3 --- /dev/null +++ b/Source/Apps/BBCBASIC/math.z80 @@ -0,0 +1,2267 @@ + TITLE '(C) COPYRIGHT R.T.RUSSELL 1986-2024' + NAME ('MATH') +; +;Z80 FLOATING POINT PACKAGE +;(C) COPYRIGHT R.T.RUSSELL 1986-2024 +;VERSION 0.0, 26-10-1986 +;VERSION 0.1, 14-12-1988 (BUG FIX) +;VERSION 5.0, 21-05-2024 (SHIFTS ADDED) +; +;BINARY FLOATING POINT REPRESENTATION: +; 32 BIT SIGN-MAGNITUDE NORMALIZED MANTISSA +; 8 BIT EXCESS-128 SIGNED EXPONENT +; SIGN BIT REPLACES MANTISSA MSB (IMPLIED "1") +; MANTISSA=0 & EXPONENT=0 IMPLIES VALUE IS ZERO. +; +;BINARY INTEGER REPRESENTATION: +; 32 BIT 2'S-COMPLEMENT SIGNED INTEGER +; "EXPONENT" BYTE = 0 (WHEN PRESENT) +; +;NORMAL REGISTER ALLOCATION: MANTISSA - HLH'L' +; EXPONENT - C +;ALTERNATE REGISTER ALLOCATION: MANTISSA - DED'E' +; EXPONENT - B +; +;Error codes: +; +BADOP EQU 1 ;Bad operation code +DIVBY0 EQU 18 ;Division by zero +TOOBIG EQU 20 ;Too big +NGROOT EQU 21 ;Negative root +LOGRNG EQU 22 ;Log range +ACLOST EQU 23 ;Accuracy lost +EXPRNG EQU 24 ;Exp range +; + GLOBAL FPP + EXTRN STORE5 + EXTRN DLOAD5 +; +;Call entry and despatch code: +; +FPP: PUSH IY ;Save IY + LD IY,0 + ADD IY,SP ;Save SP in IY + CALL OP ;Perform operation + CP A ;Good return (Z, NC) +EXIT: POP IY ;Restore IY + RET ;Return to caller +; +;Error exit: +; +BAD: LD A,BADOP ;"Bad operation code" +ERROR: LD SP,IY ;Restore SP from IY + OR A ;Set NZ + SCF ;Set C + JR EXIT +; +;Perform operation or function: +; +OP: CP (RTABLE-DTABLE)/2 + JR NC,BAD + CP (FTABLE-DTABLE)/2 + JR NC,DISPAT + EX AF,AF' + LD A,B + OR C ;Both integer? + CALL NZ,FLOATA ;No, so float both + EX AF,AF' +DISPAT: PUSH HL + LD HL,DTABLE + PUSH BC + ADD A,A ;A = op-code * 2 + LD C,A + LD B,0 ;BC = op-code * 2 + ADD HL,BC + LD A,(HL) ;Get low byte + INC HL + LD H,(HL) ;Get high byte + LD L,A + POP BC + EX (SP),HL + RET ;Off to routine +; +;Despatch table: +; +DTABLE: DEFW IAND ;0 AND (INTEGER) + DEFW IBDIV ;1 DIV + DEFW IEOR ;2 EOR + DEFW IMOD ;3 MOD + DEFW IOR ;4 OR + DEFW ILE ;5 <= + DEFW INE ;6 <> + DEFW IGE ;7 >= + DEFW ILT ;8 < + DEFW IEQ ;9 = + DEFW IMUL ;10 * + DEFW IADD ;11 + + DEFW IGT ;12 > + DEFW ISUB ;13 - + DEFW IPOW ;14 ^ + DEFW IDIV ;15 / +; +FTABLE: DEFW ABS ;16 ABS + DEFW ACS ;17 ACS + DEFW ASN ;18 ASN + DEFW ATN ;19 ATN + DEFW COS ;20 COS + DEFW DEG ;21 DEG + DEFW EXP ;22 EXP + DEFW INT ;23 INT + DEFW LN ;24 LN + DEFW LOG ;25 LOG + DEFW CPL ;26 NOT + DEFW RAD ;27 RAD + DEFW SGN ;28 SGN + DEFW SIN ;29 SIN + DEFW SQR ;30 SQR + DEFW TAN ;31 TAN +; + DEFW ZERO ;32 ZERO + DEFW FONE ;33 FONE + DEFW TRUE ;34 TRUE + DEFW PI ;35 PI +; + DEFW VAL ;36 VAL + DEFW STR ;37 STR$ +; + DEFW SFIX ;38 FIX + DEFW SFLOAT ;39 FLOAT +; + DEFW FTEST ;40 TEST + DEFW FCOMP ;41 COMPARE +; + DEFW ISHL ;42 << + DEFW ISHX ;43 <<< + DEFW ISAR ;44 >> + DEFW ISHR ;45 >>> +; +RTABLE: DEFW FAND ;AND (FLOATING-POINT) + DEFW FBDIV ;DIV + DEFW FEOR ;EOR + DEFW FMOD ;MOD + DEFW FOR ;OR + DEFW FLE ;<= + DEFW FNE ;<> + DEFW FGE ;>= + DEFW FLT ;< + DEFW FEQ ;= + DEFW FMUL ;* + DEFW FADD ;+ + DEFW FGT ;> + DEFW FSUB ;- + DEFW FPOW ;^ + DEFW FDIV ;/ +; +;ARITHMETIC AND LOGICAL OPERATORS: +;All take two arguments, in HLH'L'C & DED'E'B. +;Output in HLH'L'C +;All registers except IX, IY destroyed. +; (N.B. FPOW destroys IX). +; +;FAND - Floating-point AND. +;IAND - Integer AND. +; +FAND: CALL FIX2 +IAND: LD A,H + AND D + LD H,A + LD A,L + AND E + LD L,A + EXX + LD A,H + AND D + LD H,A + LD A,L + AND E + LD L,A + EXX + RET +; +;FEOR - Floating-point exclusive-OR. +;IEOR - Integer exclusive-OR. +; +FEOR: CALL FIX2 +IEOR: LD A,H + XOR D + LD H,A + LD A,L + XOR E + LD L,A + EXX + LD A,H + XOR D + LD H,A + LD A,L + XOR E + LD L,A + EXX + RET +; +;FOR - Floating-point OR. +;IOR - Integer OR. +; +FOR: CALL FIX2 +IOR: LD A,H + OR D + LD H,A + LD A,L + OR E + LD L,A + EXX + LD A,H + OR D + LD H,A + LD A,L + OR E + LD L,A + EXX + RET +; +;FMOD - Floating-point remainder. +;IMOD - Integer remainder. +; +FMOD: CALL FIX2 +IMOD: LD A,H + XOR D ;DIV RESULT SIGN + BIT 7,H + CALL ABS2 ;MAKE BOTH POSITIVE + LD A,-33 + CALL DIVA ;DIVIDE + EXX + LD C,0 ;INTEGER MARKER + EX AF,AF' + RET Z + JP NEGATE +; +;BDIV - Integer division. +; +FBDIV: CALL FIX2 +IBDIV: CALL IMOD + OR A + CALL SWAP + LD C,0 + RET P + JP NEGATE +; +;ISUB - Integer subtraction. +;FSUB - Floating point subtraction with rounding. +; +ISUB: CALL SUB + RET PO + CALL ADD + CALL FLOAT2 +FSUB: LD A,D + XOR 80H ;CHANGE SIGN THEN ADD + LD D,A + JR FADD +; +;Reverse subtract. +; +RSUB: LD A,H + XOR 80H + LD H,A + JR FADD +; +;IADD - Integer addition. +;FADD - Floating point addition with rounding. +; +IADD: CALL ADD + RET PO + CALL SUB + CALL FLOAT2 +FADD: DEC B + INC B + RET Z ;ARG 2 ZERO + DEC C + INC C + JP Z,SWAP ;ARG 1 ZERO + EXX + LD BC,0 ;INITIALISE + EXX + LD A,H + XOR D ;XOR SIGNS + PUSH AF + LD A,B + CP C ;COMPARE EXPONENTS + CALL C,SWAP ;MAKE DED'E'B LARGEST + LD A,B + SET 7,H ;IMPLIED 1 + CALL NZ,FIX ;ALIGN + POP AF + LD A,D ;SIGN OF LARGER + SET 7,D ;IMPLIED 1 + JP M,FADD3 ;SIGNS DIFFERENT + CALL ADD ;HLH'L'=HLH'L'+DED'E' + CALL C,DIV2 ;NORMALISE + SET 7,H + JR FADD4 +; +FADD3: CALL SUB ;HLH'L'=HLH'L'-DED'E' + CALL C,NEG ;NEGATE HLH'L'B'C' + CALL FLO48 + CPL ;CHANGE RESULT SIGN +FADD4: EXX + EX DE,HL + LD HL,8000H + OR A ;CLEAR CARRY + SBC HL,BC + EX DE,HL + EXX + CALL Z,ODD ;ROUND UNBIASSED + CALL C,ADD1 ;ROUND UP + CALL C,INCC + RES 7,H + DEC C + INC C + JP Z,ZERO + OR A ;RESULT SIGNQ + RET P ;POSITIVE + SET 7,H ;NEGATIVE + RET +; +;IDIV - Integer division. +;FDIV - Floating point division with rounding. +; +IDIV: CALL FLOAT2 +FDIV: DEC B ;TEST FOR ZERO + INC B + LD A,DIVBY0 + JP Z,ERROR ;"Division by zero" + DEC C ;TEST FOR ZERO + INC C + RET Z + LD A,H + XOR D ;CALC. RESULT SIGN + EX AF,AF' ;SAVE SIGN + SET 7,D ;REPLACE IMPLIED 1's + SET 7,H + PUSH BC ;SAVE EXPONENTS + LD B,D ;LOAD REGISTERS + LD C,E + LD DE,0 + EXX + LD B,D + LD C,E + LD DE,0 + LD A,-32 ;LOOP COUNTER + CALL DIVA ;DIVIDE + EXX + BIT 7,D + EXX + CALL Z,DIVB ;NORMALISE & INC A + EX DE,HL + EXX + SRL B ;DIVISOR/2 + RR C + OR A ;CLEAR CARRY + SBC HL,BC ;REMAINDER-DIVISOR/2 + CCF + EX DE,HL ;RESULT IN HLH'L' + CALL Z,ODD ;ROUND UNBIASSED + CALL C,ADD1 ;ROUND UP + POP BC ;RESTORE EXPONENTS + CALL C,INCC + RRA ;LSB OF A TO CARRY + LD A,C ;COMPUTE NEW EXPONENT + SBC A,B + CCF + JP CHKOVF +; +;IMUL - Integer multiplication. +; +IMUL: LD A,H + XOR D + CALL ABS2 ;MAKE BOTH POSITIVE + LD A,-33 + CALL MULA ;MULTIPLY + EXX + LD C,191 ;PRESET EXPONENT + CALL TEST ;TEST RANGE + JR NZ,IMUL1 ;TOO BIG + BIT 7,D + JR NZ,IMUL1 + CALL SWAP + LD C,D ;INTEGER MARKER + EX AF,AF' + RET P + JP NEGATE +; +IMUL1: DEC C + EXX + SLA E + RL D + EXX + RL E + RL D + EXX + ADC HL,HL + EXX + ADC HL,HL + JP P,IMUL1 ;NORMALISE + EX AF,AF' + RET M + RES 7,H ;POSITIVE + RET +; +;FMUL - Floating point multiplication with rounding. +; +FMUL: DEC B ;TEST FOR ZERO + INC B + JP Z,ZERO + DEC C ;TEST FOR ZERO + INC C + RET Z + LD A,H + XOR D ;CALC. RESULT SIGN + EX AF,AF' + SET 7,D ;REPLACE IMPLIED 1's + SET 7,H + PUSH BC ;SAVE EXPONENTS + LD B,H ;LOAD REGISTERS + LD C,L + LD HL,0 + EXX + LD B,H + LD C,L + LD HL,0 + LD A,-32 ;LOOP COUNTER + CALL MULA ;MULTIPLY + CALL C,MULB ;NORMALISE & INC A + EXX + PUSH HL + LD HL,8000H + OR A ;CLEAR CARRY + SBC HL,DE + POP HL + CALL Z,ODD ;ROUND UNBIASSED + CALL C,ADD1 ;ROUND UP + POP BC ;RESTORE EXPONENTS + CALL C,INCC + RRA ;LSB OF A TO CARRY + LD A,C ;COMPUTE NEW EXPONENT + ADC A,B +CHKOVF: JR C,CHKO1 + JP P,ZERO ;UNDERFLOW + JR CHKO2 +CHKO1: JP M,OFLOW ;OVERFLOW +CHKO2: ADD A,80H + LD C,A + JP Z,ZERO + EX AF,AF' ;RESTORE SIGN BIT + RES 7,H + RET P + SET 7,H + RET +; +;IPOW - Integer involution. +; +IPOW: CALL SWAP + BIT 7,H + PUSH AF ;SAVE SIGN + CALL NZ,NEGATE +IPOW0: LD C,B + LD B,32 ;LOOP COUNTER +IPOW1: CALL X2 + JR C,IPOW2 + DJNZ IPOW1 + POP AF + EXX + INC L ;RESULT=1 + EXX + LD C,H + RET +; +IPOW2: POP AF + PUSH BC + EX DE,HL + PUSH HL + EXX + EX DE,HL + PUSH HL + EXX + LD IX,0 + ADD IX,SP + JR Z,IPOW4 + PUSH BC + EXX + PUSH DE + EXX + PUSH DE + CALL SFLOAT + CALL RECIP + CALL STORE5 + JR IPOW5 +; +IPOW3: PUSH BC + EXX + SLA E + RL D + PUSH DE + EXX + RL E + RL D + PUSH DE + LD A,'*' AND 0FH + PUSH AF + CALL COPY + CALL OP ;SQUARE + POP AF + CALL DLOAD5 + CALL C,OP ;MULTIPLY BY X +IPOW5: POP DE + EXX + POP DE + EXX + LD A,C + POP BC + LD C,A +IPOW4: DJNZ IPOW3 + POP AF + POP AF + POP AF + RET +; +FPOW0: POP AF + POP AF + POP AF + JR IPOW0 +; +;FPOW - Floating-point involution. +; +FPOW: BIT 7,D + PUSH AF + CALL SWAP + CALL PUSH5 + DEC C + INC C + JR Z,FPOW0 + LD A,158 + CP C + JR C,FPOW1 + INC A + CALL FIX + EX AF,AF' + JP P,FPOW0 +FPOW1: CALL SWAP + CALL LN0 + CALL POP5 + POP AF + CALL FMUL + JP EXP0 +; +;Integer and floating-point compare. +;Result is TRUE (-1) or FALSE (0). +; +FLT: CALL FCP + JR ILT1 +ILT: CALL ICP +ILT1: RET NC + JR TRUE +; +FGT: CALL FCP + JR IGT1 +IGT: CALL ICP +IGT1: RET Z + RET C + JR TRUE +; +FGE: CALL FCP + JR IGE1 +IGE: CALL ICP +IGE1: RET C + JR TRUE +; +FLE: CALL FCP + JR ILE1 +ILE: CALL ICP +ILE1: JR Z,TRUE + RET NC + JR TRUE +; +FNE: CALL FCP + JR INE1 +INE: CALL ICP +INE1: RET Z + JR TRUE +; +FEQ: CALL FCP + JR IEQ1 +IEQ: CALL ICP +IEQ1: RET NZ +TRUE: LD HL,-1 + EXX + LD HL,-1 + EXX + XOR A + LD C,A + RET +; +;Integer shifts: +; +ISHX: +ISHL: CALL SHIFTS + JR Z,SHRET +ISHL1: EXX + ADD HL,HL + EXX + ADC HL,HL + DJNZ ISHL1 +SHRET: RET +; +ISAR: CALL SHIFTS + JR Z,SHRET +ISAR1: SRA H + RR L + EXX + RR H + RR L + EXX + DJNZ ISAR1 + RET +; +ISHR: CALL SHIFTS + JR Z,SHRET +ISHR1: SRL H + RR L + EXX + RR H + RR L + EXX + DJNZ ISHR1 + RET +; +SHIFTS: CALL FIX2 + LD A,D + OR E + EXX + OR D + LD A,E + EXX + LD B,32 + JR NZ,SHMAX + LD B,A + OR A +SHMAX: RET +; +;FUNCTIONS: +; +;Result returned in HLH'L'C (floating point) +;Result returned in HLH'L' (C=0) (integer) +;All registers except IY destroyed. +; +;ABS - Absolute value +;Result is numeric, variable type. +; +ABS: BIT 7,H + RET Z ;POSITIVE/ZERO + DEC C + INC C + JP Z,NEGATE ;INTEGER + RES 7,H + RET +; +;NOT - Complement integer. +;Result is integer numeric. +; +CPL: CALL SFIX + LD A,H + CPL + LD H,A + LD A,L + CPL + LD L,A + EXX + LD A,H + CPL + LD H,A + LD A,L + CPL + LD L,A + EXX + XOR A ;NUMERIC MARKER + RET +; +;PI - Return PI (3.141592654) +;Result is floating-point numeric. +; +PI: LD HL,490FH + EXX + LD HL,0DAA2H + EXX + LD C,81H + XOR A ;NUMERIC MARKER + RET +; +;DEG - Convert radians to degrees +;Result is floating-point numeric. +; +DEG: CALL FPI180 + CALL FMUL + XOR A + RET +; +;RAD - Convert degrees to radians +;Result is floating-point numeric. +; +RAD: CALL FPI180 + CALL FDIV + XOR A + RET +; +;180/PI +; +FPI180: CALL SFLOAT + LD DE,652EH + EXX + LD DE,0E0D3H + EXX + LD B,85H + RET +; +;SGN - Return -1, 0 or +1 +;Result is integer numeric. +; +SGN: CALL TEST + OR C + RET Z ;ZERO + BIT 7,H + JP NZ,TRUE ;-1 + CALL ZERO + JP ADD1 ;1 +; +;VAL - Return numeric value of string. +;Input: ASCII string at IX +;Result is variable type numeric. +; +VAL: CALL SIGNQ + PUSH AF + CALL CON + POP AF + CP '-' + LD A,0 ;NUMERIC MARKER + RET NZ + DEC C + INC C + JP Z,NEGATE ;ZERO/INTEGER + LD A,H + XOR 80H ;CHANGE SIGN (FP) + LD H,A + XOR A + RET +; +;INT - Floor function +;Result is integer numeric. +; +INT: DEC C + INC C + RET Z ;ZERO/INTEGER + LD A,159 + LD B,H ;B7=SIGN BIT + CALL FIX + EX AF,AF' + AND B + CALL M,ADD1 ;NEGATIVE NON-INTEGER + LD A,B + OR A + CALL M,NEGATE + XOR A + LD C,A + RET +; +;SQR - square root +;Result is floating-point numeric. +; +SQR: CALL SFLOAT +SQR0: BIT 7,H + LD A,NGROOT + JP NZ,ERROR ;"-ve root" + DEC C + INC C + RET Z ;ZERO + SET 7,H ;IMPLIED 1 + BIT 0,C + CALL Z,DIV2 ;MAKE EXPONENT ODD + LD A,C + SUB 80H + SRA A ;HALVE EXPONENT + ADD A,80H + LD C,A + PUSH BC ;SAVE EXPONENT + EX DE,HL + LD HL,0 + LD B,H + LD C,L + EXX + EX DE,HL + LD HL,0 + LD B,H + LD C,L + LD A,-31 + CALL SQRA ;ROOT + EXX + BIT 7,B + EXX + CALL Z,SQRA ;NORMALISE & INC A + CALL SQRB + OR A ;CLEAR CARRY + CALL DIVB + RR E ;LSB TO CARRY + LD H,B + LD L,C + EXX + LD H,B + LD L,C + CALL C,ADD1 ;ROUND UP + POP BC ;RESTORE EXPONENT + CALL C,INCC + RRA + SBC A,A + ADD A,C + LD C,A + RES 7,H ;POSITIVE + XOR A + RET +; +;TAN - Tangent function +;Result is floating-point numeric. +; +TAN: CALL SFLOAT + CALL PUSH5 + CALL COS0 + CALL POP5 + CALL PUSH5 + CALL SWAP + CALL SIN0 + CALL POP5 + CALL FDIV + XOR A ;NUMERIC MARKER + RET +; +;COS - Cosine function +;Result is floating-point numeric. +; +COS: CALL SFLOAT +COS0: CALL SCALE + INC E + INC E + LD A,E + JR SIN1 +; +;SIN - Sine function +;Result is floating-point numeric. +; +SIN: CALL SFLOAT +SIN0: PUSH HL ;H7=SIGN + CALL SCALE + POP AF + RLCA + RLCA + RLCA + AND 4 + XOR E +SIN1: PUSH AF ;OCTANT + RES 7,H + RRA + CALL PIBY4 + CALL C,RSUB ;X=(PI/4)-X + POP AF + PUSH AF + AND 3 + JP PO,SIN2 ;USE COSINE APPROX. + CALL PUSH5 ;SAVE X + CALL SQUARE ;PUSH X*X + CALL POLY + DEFW 0A8B7H ;a(8) + DEFW 3611H + DEFB 6DH + DEFW 0DE26H ;a(6) + DEFW 0D005H + DEFB 73H + DEFW 80C0H ;a(4) + DEFW 888H + DEFB 79H + DEFW 0AA9DH ;a(2) + DEFW 0AAAAH + DEFB 7DH + DEFW 0 ;a(0) + DEFW 0 + DEFB 80H + CALL POP5 + CALL POP5 + CALL FMUL + JP SIN3 +; +SIN2: CALL SQUARE ;PUSH X*X + CALL POLY + DEFW 0D571H ;b(8) + DEFW 4C78H + DEFB 70H + DEFW 94AFH ;b(6) + DEFW 0B603H + DEFB 76H + DEFW 9CC8H ;b(4) + DEFW 2AAAH + DEFB 7BH + DEFW 0FFDDH ;b(2) + DEFW 0FFFFH + DEFB 7EH + DEFW 0 ;b(0) + DEFW 0 + DEFB 80H + CALL POP5 +SIN3: POP AF + AND 4 + RET Z + DEC C + INC C + RET Z ;ZERO + SET 7,H ;MAKE NEGATIVE + RET +; +;Floating-point one: +; +FONE: LD HL,0 + EXX + LD HL,0 + EXX + LD C,80H + RET +; +DONE: LD DE,0 + EXX + LD DE,0 + EXX + LD B,80H + RET +; +PIBY4: LD DE,490FH + EXX + LD DE,0DAA2H + EXX + LD B,7FH + RET +; +;EXP - Exponential function +;Result is floating-point numeric. +; +EXP: CALL SFLOAT +EXP0: CALL LN2 ;LN(2) + EXX + DEC E + LD BC,0D1CFH ;0.6931471805599453 + EXX + PUSH HL ;H7=SIGN + CALL MOD48 ;"MODULUS" + POP AF + BIT 7,E + JR Z,EXP1 + RLA + JP C,ZERO + LD A,EXPRNG + JP ERROR ;"Exp range" +; +EXP1: AND 80H + OR E + PUSH AF ;INTEGER PART + RES 7,H + CALL PUSH5 ;PUSH X*LN(2) + CALL POLY + DEFW 4072H ;a(7) + DEFW 942EH + DEFB 73H + DEFW 6F65H ;a(6) + DEFW 2E4FH + DEFB 76H + DEFW 6D37H ;a(5) + DEFW 8802H + DEFB 79H + DEFW 0E512H ;a(4) + DEFW 2AA0H + DEFB 7BH + DEFW 4F14H ;a(3) + DEFW 0AAAAH + DEFB 7DH + DEFW 0FD56H ;a(2) + DEFW 7FFFH + DEFB 7EH + DEFW 0FFFEH ;a(1) + DEFW 0FFFFH + DEFB 7FH + DEFW 0 ;a(0) + DEFW 0 + DEFB 80H + CALL POP5 + POP AF + PUSH AF + CALL P,RECIP ;X=1/X + POP AF + JP P,EXP4 + AND 7FH + NEG +EXP4: ADD A,80H + ADD A,C + JR C,EXP2 + JP P,ZERO ;UNDERFLOW + JR EXP3 +EXP2: JP M,OFLOW ;OVERFLOW +EXP3: ADD A,80H + JP Z,ZERO + LD C,A + XOR A ;NUMERIC MARKER + RET +; +RECIP: CALL DONE +RDIV: CALL SWAP + JP FDIV ;RECIPROCAL +; +LN2: LD DE,3172H ;LN(2) + EXX + LD DE,17F8H + EXX + LD B,7FH + RET +; +;LN - Natural log. +;Result is floating-point numeric. +; +LN: CALL SFLOAT +LN0: LD A,LOGRNG + BIT 7,H + JP NZ,ERROR ;"Log range" + INC C + DEC C + JP Z,ERROR + LD DE,3504H ;SQR(2) + EXX + LD DE,0F333H ;1.41421356237 + EXX + CALL ICP0 ;MANTISSA>SQR(2)? + LD A,C ;EXPONENT + LD C,80H ;1 <= X < 2 + JR C,LN4 + DEC C + INC A +LN4: PUSH AF ;SAVE EXPONENT + CALL RATIO ;X=(X-1)/(X+1) + CALL PUSH5 + CALL SQUARE ;PUSH X*X + CALL POLY + DEFW 0CC48H ;a(9) + DEFW 74FBH + DEFB 7DH + DEFW 0AEAFH ;a(7) + DEFW 11FFH + DEFB 7EH + DEFW 0D98CH ;a(5) + DEFW 4CCDH + DEFB 7EH + DEFW 0A9E3H ;a(3) + DEFW 2AAAH + DEFB 7FH + DEFW 0 ;a(1) + DEFW 0 + DEFB 81H + CALL POP5 + CALL POP5 + CALL FMUL + POP AF ;EXPONENT + CALL PUSH5 + EX AF,AF' + CALL ZERO + EX AF,AF' + SUB 80H + JR Z,LN3 + JR NC,LN1 + CPL + INC A +LN1: LD H,A + LD C,87H + PUSH AF + CALL FLOAT + RES 7,H + CALL LN2 + CALL FMUL + POP AF + JR NC,LN3 + JP M,LN3 + SET 7,H +LN3: CALL POP5 + CALL FADD + XOR A + RET +; +;LOG - base-10 logarithm. +;Result is floating-point numeric. +; +LOG: CALL LN + LD DE,5E5BH ;LOG(e) + EXX + LD DE,0D8A9H + EXX + LD B,7EH + CALL FMUL + XOR A + RET +; +;ASN - Arc-sine +;Result is floating-point numeric. +; +ASN: CALL SFLOAT + CALL PUSH5 + CALL COPY + CALL FMUL + CALL DONE + CALL RSUB + CALL SQR0 + CALL POP5 + INC C + DEC C + LD A,2 + PUSH DE + JR Z,ACS1 + POP DE + CALL RDIV + JR ATN0 +; +;ATN - arc-tangent +;Result is floating-point numeric. +; +ATN: CALL SFLOAT +ATN0: PUSH HL ;SAVE SIGN + RES 7,H + LD DE,5413H ;TAN(PI/8)=SQR(2)-1 + EXX + LD DE,0CCD0H + EXX + LD B,7EH + CALL FCP0 ;COMPARE + LD B,0 + JR C,ATN2 + LD DE,1A82H ;TAN(3*PI/8)=SQR(2)+1 + EXX + LD DE,799AH + EXX + LD B,81H + CALL FCP0 ;COMPARE + JR C,ATN1 + CALL RECIP ;X=1/X + LD B,2 + JP ATN2 +ATN1: CALL RATIO ;X=(X-1)/(X+1) + LD B,1 +ATN2: PUSH BC ;SAVE FLAG + CALL PUSH5 + CALL SQUARE ;PUSH X*X + CALL POLY + DEFW 0F335H ;a(13) + DEFW 37D8H + DEFB 7BH + DEFW 6B91H ;a(11) + DEFW 0AAB9H + DEFB 7CH + DEFW 41DEH ;a(9) + DEFW 6197H + DEFB 7CH + DEFW 9D7BH ;a(7) + DEFW 9237H + DEFB 7DH + DEFW 2A5AH ;a(5) + DEFW 4CCCH + DEFB 7DH + DEFW 0A95CH ;a(3) + DEFW 0AAAAH + DEFB 7EH + DEFW 0 ;a(1) + DEFW 0 + DEFB 80H + CALL POP5 + CALL POP5 + CALL FMUL + POP AF +ACS1: CALL PIBY4 ;PI/4 + RRA + PUSH AF + CALL C,FADD + POP AF + INC B + RRA + CALL C,RSUB + POP AF + OR A + RET P + SET 7,H ;MAKE NEGATIVE + XOR A + RET +; +;ACS - Arc cosine=PI/2-ASN. +;Result is floating point numeric. +; +ACS: CALL ASN + LD A,2 + PUSH AF + JR ACS1 +; +;Function STR - convert numeric value to ASCII string. +; Inputs: HLH'L'C = integer or floating-point number +; DE = address at which to store string +; IX = address of @% format control +; Outputs: String stored, with NUL terminator +; +;First normalise for decimal output: +; +STR: CALL SFLOAT + LD B,0 ;DEFAULT PT. POSITION + BIT 7,H ;NEGATIVE? + JR Z,STR10 + RES 7,H + LD A,'-' + LD (DE),A ;STORE SIGN + INC DE +STR10: XOR A ;CLEAR A + CP C + JR Z,STR2 ;ZERO + PUSH DE ;SAVE TEXT POINTER + LD A,B +STR11: PUSH AF ;SAVE DECIMAL COUNTER + LD A,C ;BINARY EXPONENT + CP 161 + JR NC,STR14 + CP 155 + JR NC,STR15 + CPL + CP 225 + JR C,STR13 + LD A,-8 +STR13: ADD A,28 + CALL POWR10 + PUSH AF + CALL FMUL + POP AF + LD B,A + POP AF + SUB B + JR STR11 +STR14: SUB 32 + CALL POWR10 + PUSH AF + CALL FDIV + POP AF + LD B,A + POP AF + ADD A,B + JR STR11 +STR15: LD A,9 + CALL POWR10 ;10^9 + CALL FCP0 + LD A,C + POP BC + LD C,A + SET 7,H ;IMPLIED 1 + CALL C,X10B ;X10, DEC B + POP DE ;RESTORE TEXT POINTER + RES 7,C + LD A,0 + RLA ;PUT CARRY IN LSB +; +;At this point decimal normalisation has been done, +;now convert to decimal digits: +; AHLH'L' = number in normalised integer form +; B = decimal place adjustment +; C = binary place adjustment (29-33) +; +STR2: INC C + EX AF,AF' ;SAVE A + LD A,B + BIT 1,(IX+2) + JR NZ,STR20 + XOR A + CP (IX+1) + JR Z,STR21 + LD A,-10 +STR20: ADD A,(IX+1) ;SIG. FIG. COUNT + OR A ;CLEAR CARRY + JP M,STR21 + XOR A +STR21: PUSH AF + EX AF,AF' ;RESTORE A +STR22: CALL X2 ;RL AHLH'L' + ADC A,A + CP 10 + JR C,STR23 + SUB 10 + EXX + INC L ;SET RESULT BIT + EXX +STR23: DEC C + JR NZ,STR22 ;32 TIMES + LD C,A ;REMAINDER + LD A,H + AND 3FH ;CLEAR OUT JUNK + LD H,A + POP AF + JP P,STR24 + INC A + JR NZ,STR26 + LD A,4 + CP C ;ROUND UP? + LD A,0 + JR STR26 +STR24: PUSH AF + LD A,C + ADC A,'0' ;ADD CARRY + CP '0' + JR Z,STR25 ;SUPPRESS ZERO + CP '9'+1 + CCF + JR NC,STR26 +STR25: EX (SP),HL + BIT 6,L ;ZERO FLAG + EX (SP),HL + JR NZ,STR27 + LD A,'0' +STR26: INC A ;SET +VE + DEC A + PUSH AF ;PUT ON STACK + CARRY +STR27: INC B + CALL TEST ;IS HLH'L' ZERO? + LD C,32 + LD A,0 + JR NZ,STR22 + POP AF + PUSH AF + LD A,0 + JR C,STR22 +; +;At this point, the decimal character string is stored +; on the stack. Trailing zeroes are suppressed and may +; need to be replaced. +;B register holds decimal point position. +;Now format number and store as ASCII string: +; +STR3: EX DE,HL ;STRING POINTER + LD C,-1 ;FLAG "E" + LD D,1 + LD E,(IX+1) ;f2 + BIT 0,(IX+2) + JR NZ,STR34 ;E MODE + BIT 1,(IX+2) + JR Z,STR31 + LD A,B ;F MODE + OR A + JR Z,STR30 + JP M,STR30 + LD D,B +STR30: LD A,D + ADD A,(IX+1) + LD E,A + CP 11 + JR C,STR32 +STR31: LD A,B ;G MODE + LD DE,101H + OR A + JP M,STR34 + JR Z,STR32 + LD A,(IX+1) + OR A + JR NZ,STR3A + LD A,10 +STR3A: CP B + JR C,STR34 + LD D,B + LD E,B +STR32: LD A,B + ADD A,129 + LD C,A +STR34: SET 7,D + DEC E +STR35: LD A,D + CP C + JR NC,STR33 +STR36: POP AF + JR Z,STR37 + JP P,STR38 +STR37: PUSH AF + INC E + DEC E + JP M,STR4 +STR33: LD A,'0' +STR38: DEC D + JP PO,STR39 + LD (HL),'.' + INC HL +STR39: LD (HL),A + INC HL + DEC E + JP P,STR35 + JR STR36 +; +STR4: POP AF +STR40: INC C + LD C,L + JR NZ,STR44 + LD (HL),'E' ;EXPONENT + INC HL + LD A,B + DEC A + JP P,STR41 + LD (HL),'-' + INC HL + NEG +STR41: LD (HL),'0' + JR Z,STR47 + CP 10 + LD B,A + LD A,':' + JR C,STR42 + INC HL + LD (HL),'0' +STR42: INC (HL) + CP (HL) + JR NZ,STR43 + LD (HL),'0' + DEC HL + INC (HL) + INC HL +STR43: DJNZ STR42 +STR47: INC HL +STR44: EX DE,HL + RET +; +;Support subroutines: +; +;CON - Get unsigned numeric constant from ASCII string. +; Inputs: ASCII string at (IX). +; Outputs: Variable-type result in HLH'L'C +; IX updated (points to delimiter) +; A7 = 0 (numeric marker) +; +CON: CALL ZERO ;INITIALISE TO ZERO + LD C,0 ;TRUNCATION COUNTER + CALL NUMBER ;GET INTEGER PART + CP '.' + LD B,0 ;DECL. PLACE COUNTER + CALL Z,NUMBIX ;GET FRACTION PART + CP 'E' + LD A,0 ;INITIALISE EXPONENT + CALL Z,GETEXP ;GET EXPONENT + BIT 7,H + JR NZ,CON0 ;INTEGER OVERFLOW + OR A + JR NZ,CON0 ;EXPONENT NON-ZERO + CP B + JR NZ,CON0 ;DECIMAL POINT + CP C + RET Z ;INTEGER +CON0: SUB B + ADD A,C + LD C,159 + CALL FLOAT + RES 7,H ;DITCH IMPLIED 1 + OR A + RET Z ;DONE + JP M,CON2 ;NEGATIVE EXPONENT + CALL POWR10 + CALL FMUL ;SCALE + XOR A + RET +CON2: CP -38 + JR C,CON3 ;CAN'T SCALE IN ONE GO + NEG + CALL POWR10 + CALL FDIV ;SCALE + XOR A + RET +CON3: PUSH AF + LD A,38 + CALL POWR10 + CALL FDIV + POP AF + ADD A,38 + JR CON2 +; +;GETEXP - Get decimal exponent from string +; Inputs: ASCII string at (IX) +; (IX points at 'E') +; A = initial value +; Outputs: A = new exponent +; IX updated. +; Destroys: A,A',IX,F,F' +; +GETEXP: PUSH BC ;SAVE REGISTERS + LD B,A ;INITIAL VALUE + LD C,2 ;2 DIGITS MAX + INC IX ;BUMP PAST 'E' + CALL SIGNQ + EX AF,AF' ;SAVE EXPONENT SIGN +GETEX1: CALL DIGITQ + JR C,GETEX2 + LD A,B ;B=B*10 + ADD A,A + ADD A,A + ADD A,B + ADD A,A + LD B,A + LD A,(IX) ;GET BACK DIGIT + INC IX + AND 0FH ;MASK UNWANTED BITS + ADD A,B ;ADD IN DIGIT + LD B,A + DEC C + JP P,GETEX1 + LD B,100 ;FORCE OVERFLOW + JR GETEX1 +GETEX2: EX AF,AF' ;RESTORE SIGN + CP '-' + LD A,B + POP BC ;RESTORE + RET NZ + NEG ;NEGATE EXPONENT + RET +; +;NUMBER: Get unsigned integer from string. +; Inputs: string at (IX) +; C = truncated digit count +; (initially zero) +; B = total digit count +; HLH'L' = initial value +; Outputs: HLH'L' = number (binary integer) +; A = delimiter. +; B, C & IX updated +; Destroys: A,B,C,D,E,H,L,B',C',D',E',H',L',IX,F +; +NUMBIX: INC IX +NUMBER: CALL DIGITQ + RET C + INC B ;INCREMENT DIGIT COUNT + INC IX + CALL X10 ;*10 & COPY OLD VALUE + JR C,NUMB1 ;OVERFLOW + DEC C ;SEE IF TRUNCATED + INC C + JR NZ,NUMB1 ;IMPORTANT! + AND 0FH + EXX + LD B,0 + LD C,A + ADD HL,BC ;ADD IN DIGIT + EXX + JR NC,NUMBER + INC HL ;CARRY + LD A,H + OR L + JR NZ,NUMBER +NUMB1: INC C ;TRUNCATION COUNTER + CALL SWAP1 ;RESTORE PREVIOUS VALUE + JR NUMBER +; +;FIX - Fix number to specified exponent value. +; Inputs: HLH'L'C = +ve non-zero number (floated) +; A = desired exponent (A>C) +; Outputs: HLH'L'C = fixed number (unsigned) +; fraction shifted into B'C' +; A'F' positive if integer input +; Destroys: C,H,L,A',B',C',H',L',F,F' +; +FIX: EX AF,AF' + XOR A + EX AF,AF' + SET 7,H ;IMPLIED 1 +FIX1: CALL DIV2 + CP C + RET Z + JP NC,FIX1 + JP OFLOW +; +;SFIX - Convert to integer if necessary. +; Input: Variable-type number in HLH'L'C +; Output: Integer in HLH'L', C=0 +; Destroys: A,C,H,L,A',B',C',H',L',F,F' +; +;NEGATE - Negate HLH'L' +; Destroys: H,L,H',L',F +; +FIX2: CALL SWAP + CALL SFIX + CALL SWAP +SFIX: DEC C + INC C + RET Z ;INTEGER/ZERO + BIT 7,H ;SIGN + PUSH AF + LD A,159 + CALL FIX + POP AF + LD C,0 + RET Z +NEGATE: OR A ;CLEAR CARRY + EXX +NEG0: PUSH DE + EX DE,HL + LD HL,0 + SBC HL,DE + POP DE + EXX + PUSH DE + EX DE,HL + LD HL,0 + SBC HL,DE + POP DE + RET +; +;NEG - Negate HLH'L'B'C' +; Also complements A (used in FADD) +; Destroys: A,H,L,B',C',H',L',F +; +NEG: EXX + CPL + PUSH HL + OR A ;CLEAR CARRY + SBC HL,HL + SBC HL,BC + LD B,H + LD C,L + POP HL + JR NEG0 +; +;SCALE - Trig scaling. +;MOD48 - 48-bit floating-point "modulus" (remainder). +; Inputs: HLH'L'C unsigned floating-point dividend +; DED'E'B'C'B unsigned 48-bit FP divisor +; Outputs: HLH'L'C floating point remainder (H7=1) +; E = quotient (bit 7 is sticky) +; Destroys: A,B,C,D,E,H,L,B',C',D',E',H',L',IX,F +;FLO48 - Float unsigned number (48 bits) +; Input/output in HLH'L'B'C'C +; Destroys: C,H,L,B',C',H',L',F +; +SCALE: LD A,150 + CP C + LD A,ACLOST + JP C,ERROR ;"Accuracy lost" + CALL PIBY4 + EXX + LD BC,2169H ;3.141592653589793238 + EXX +MOD48: SET 7,D ;IMPLIED 1 + SET 7,H + LD A,C + LD C,0 ;INIT QUOTIENT + LD IX,0 + PUSH IX ;PUT ZERO ON STACK + CP B + JR C,MOD485 ;DIVIDEND=DIVISOR + EXX + EX (SP),HL + ADD HL,BC + EX (SP),HL + ADC HL,DE + EXX + ADC HL,DE +MOD482: CCF + RL C ;QUOTIENT + JR NC,MOD483 + SET 7,C ;STICKY BIT +MOD483: DEC A + CP B + JR C,MOD484 ;DIVIDENDR, A=&C0 if L=1. +;Note: The last coefficient is EXECUTED on return +; so must contain only innocuous bytes! +; +POLY: LD IX,2 + ADD IX,SP + EX (SP),IX + CALL DLOAD5 ;FIRST COEFFICIENT +POLY1: CALL FMUL + LD DE,5 + ADD IX,DE + CALL DLOAD5 ;NEXT COEFFICIENT + EX (SP),IX + INC B + DEC B ;TEST + JP M,FADD + CALL FADD + CALL DLOAD5 ;X + EX (SP),IX + JR POLY1 +; +;POWR10 - Calculate power of ten. +; Inputs: A=power of 10 required (A<128) +; A=binary exponent to be exceeded (A>=128) +; Outputs: DED'E'B = result +; A = actual power of ten returned +; Destroys: A,B,D,E,A',D',E',F,F' +; +POWR10: INC A + EX AF,AF' + PUSH HL + EXX + PUSH HL + EXX + CALL DONE + CALL SWAP + XOR A +POWR11: EX AF,AF' + DEC A + JR Z,POWR14 ;EXIT TYPE 1 + JP P,POWR13 + CP C + JR C,POWR14 ;EXIT TYPE 2 + INC A +POWR13: EX AF,AF' + INC A + SET 7,H + CALL X5 + JR NC,POWR12 + EX AF,AF' + CALL D2C + EX AF,AF' +POWR12: EX AF,AF' + CALL C,ADD1 ;ROUND UP + INC C + JP M,POWR11 + JP OFLOW +POWR14: CALL SWAP + RES 7,D + EXX + POP HL + EXX + POP HL + EX AF,AF' + RET +; +;DIVA, DIVB - DIVISION PRIMITIVE. +; Function: D'E'DE = H'L'HLD'E'DE / B'C'BC +; Remainder in H'L'HL +; Inputs: A = loop counter (normally -32) +; Destroys: A,D,E,H,L,D',E',H',L',F +; +DIVA: OR A ;CLEAR CARRY +DIV0: SBC HL,BC ;DIVIDEND-DIVISOR + EXX + SBC HL,BC + EXX + JR NC,DIV1 + ADD HL,BC ;DIVIDEND+DIVISOR + EXX + ADC HL,BC + EXX +DIV1: CCF +DIVC: RL E ;SHIFT RESULT INTO DE + RL D + EXX + RL E + RL D + EXX + INC A + RET P +DIVB: ADC HL,HL ;DIVIDEND*2 + EXX + ADC HL,HL + EXX + JR NC,DIV0 + OR A + SBC HL,BC ;DIVIDEND-DIVISOR + EXX + SBC HL,BC + EXX + SCF + JP DIVC +; +;MULA, MULB - MULTIPLICATION PRIMITIVE. +; Function: H'L'HLD'E'DE = B'C'BC * D'E'DE +; Inputs: A = loop counter (usually -32) +; H'L'HL = 0 +; Destroys: D,E,H,L,D',E',H',L',A,F +; +MULA: OR A ;CLEAR CARRY +MUL0: EXX + RR D ;MULTIPLIER/2 + RR E + EXX + RR D + RR E + JR NC,MUL1 + ADD HL,BC ;ADD IN MULTIPLICAND + EXX + ADC HL,BC + EXX +MUL1: INC A + RET P +MULB: EXX + RR H ;PRODUCT/2 + RR L + EXX + RR H + RR L + JP MUL0 +; +;SQRA, SQRB - SQUARE ROOT PRIMITIVES +; Function: B'C'BC = SQR (D'E'DE) +; Inputs: A = loop counter (normally -31) +; B'C'BCH'L'HL initialised to 0 +; Destroys: A,B,C,D,E,H,L,B',C',D',E',H',L',F +; +SQR1: SBC HL,BC + EXX + SBC HL,BC + EXX + INC C + JR NC,SQR2 + DEC C + ADD HL,BC + EXX + ADC HL,BC + EXX + DEC C +SQR2: INC A + RET P +SQRA: SLA C + RL B + EXX + RL C + RL B + EXX + INC C + SLA E + RL D + EXX + RL E + RL D + EXX + ADC HL,HL + EXX + ADC HL,HL + EXX + SLA E + RL D + EXX + RL E + RL D + EXX + ADC HL,HL + EXX + ADC HL,HL + EXX + JP NC,SQR1 +SQR3: OR A + SBC HL,BC + EXX + SBC HL,BC + EXX + INC C + JP SQR2 +; +SQRB: ADD HL,HL + EXX + ADC HL,HL + EXX + JR C,SQR3 + INC A + INC C + SBC HL,BC + EXX + SBC HL,BC + EXX + RET NC + ADD HL,BC + EXX + ADC HL,BC + EXX + DEC C + RET +; +DIGITQ: LD A,(IX) + CP '9'+1 + CCF + RET C + CP '0' + RET +; +SIGNQ: LD A,(IX) + INC IX + CP ' ' + JR Z,SIGNQ + CP '+' + RET Z + CP '-' + RET Z + DEC IX + RET +; +ABS2: EX AF,AF' + BIT 7,H + CALL NZ,NEGATE ;MAKE ARGUMENTS +VE + CALL SWAP + BIT 7,H + CALL NZ,NEGATE + LD B,H + LD C,L + LD HL,0 + EXX + LD B,H + LD C,L + LD HL,0 + RET +; + END diff --git a/Source/Apps/Build.cmd b/Source/Apps/Build.cmd index 0776541e..92bcb2a1 100644 --- a/Source/Apps/Build.cmd +++ b/Source/Apps/Build.cmd @@ -2,47 +2,37 @@ setlocal set TOOLS=..\..\Tools -set APPBIN=..\..\Binary\Apps set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH% set TASMTABS=%TOOLS%\tasm32 set CPMDIR80=%TOOLS%/cpm/ -call :asm syscopy || exit /b -call :asm assign || exit /b -call :asm format || exit /b -call :asm talk || exit /b -call :asm mode || exit /b -call :asm rtc || exit /b -call :asm timer || exit /b -call :asm rtchb || exit /b +call :build syscopy || exit /b +call :build assign || exit /b +call :build format || exit /b +call :build talk || exit /b +call :build mode || exit /b +call :build rtc || exit /b +call :build timer || exit /b +call :build sysgen || exit /b +call :build XM || exit /b +call :build FDU || exit /b +call :build Tune || exit /b +call :build FAT || exit /b +call :build Test || exit /b +call :build ZMP || exit /b +call :build ZMD || exit /b +call :build Dev || exit /b +call :build VGM || exit /b +call :build cpuspd || exit /b +call :build reboot || exit /b +call :build Survey || exit /b +call :build HTalk || exit /b +call :build BBCBASIC || exit /b +call :build copysl || exit /b -zxcc Z80ASM -SYSGEN/F || exit /b - -pushd XM && call Build || exit /b & popd -pushd FDU && call Build || exit /b & popd -pushd Tune && call Build || exit /b & popd -pushd FAT && call Build || exit /b & popd -pushd Test && call Build || exit /b & popd -pushd ZMP && call Build || exit /b & popd -pushd ZMD && call Build || exit /b & popd -pushd Dev && call Build || exit /b & popd -pushd VGM && call Build || exit /b & popd -pushd cpuspd && call Build || exit /b & popd -pushd Survey && call Build || exit /b & popd -pushd HTalk && call Build || exit /b & popd - -copy *.com %APPBIN%\ || exit /b - -goto :eof - -:asm -echo. -echo Building %1... -tasm -t80 -g3 -fFF %1.asm %1.com %1.lst || exit /b goto :eof -:asm180 -echo. -echo Building %1... -tasm -t180 -g3 -fFF %1.asm %1.com %1.lst || exit /b +:build +echo Building %1 +pushd %1 && call Build || exit /b & popd goto :eof diff --git a/Source/Apps/Clean.cmd b/Source/Apps/Clean.cmd index 06057f1f..aee7b56c 100644 --- a/Source/Apps/Clean.cmd +++ b/Source/Apps/Clean.cmd @@ -1,21 +1,32 @@ @echo off setlocal -if exist *.bin del *.bin -if exist *.com del *.com -if exist *.lst del *.lst -if exist *.hex del *.hex -if exist *.prn del *.prn +call :clean syscopy || exit /b +call :clean assign || exit /b +call :clean format || exit /b +call :clean talk || exit /b +call :clean mode || exit /b +call :clean rtc || exit /b +call :clean timer || exit /b +call :clean sysgen || exit /b +call :clean XM || exit /b +call :clean FDU || exit /b +call :clean Tune || exit /b +call :clean FAT || exit /b +call :clean Test || exit /b +call :clean ZMP || exit /b +call :clean ZMD || exit /b +call :clean Dev || exit /b +call :clean VGM || exit /b +call :clean cpuspd || exit /b +call :clean reboot || exit /b +call :clean Survey || exit /b +call :clean HTalk || exit /b +call :clean BBCBASIC || exit /b +call :clean copysl || exit /b -pushd XM && call Clean || exit /b 1 & popd -pushd FDU && call Clean || exit /b 1 & popd -pushd Tune && call Clean || exit /b 1 & popd -pushd FAT && call Clean || exit /b 1 & popd -pushd Test && call Clean || exit /b 1 & popd -pushd ZMP && call Clean || exit /b 1 & popd -pushd ZMD && call Clean || exit /b 1 & popd -pushd Dev && call Clean || exit /b 1 & popd -pushd VGM && call Clean || exit /b 1 & popd -pushd cpuspd && call Clean || exit /b 1 & popd -pushd Survey && call Clean || exit /b 1 & popd -pushd HTalk && call Clean || exit /b 1 & popd +goto :eof + +:clean +pushd %1 && call Clean || exit /b & popd +goto :eof diff --git a/Source/Apps/Makefile b/Source/Apps/Makefile index a3ae67fe..f6abf7b2 100644 --- a/Source/Apps/Makefile +++ b/Source/Apps/Makefile @@ -1,9 +1,5 @@ -OBJECTS = sysgen.com syscopy.com assign.com format.com talk.com \ - mode.com rtc.com timer.com rtchb.com -SUBDIRS = HTalk XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd Survey -DEST = ../../Binary/Apps +SUBDIRS = HTalk XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd reboot Survey BBCBASIC copysl \ + sysgen syscopy assign format talk mode rtc timer TOOLS =../../Tools include $(TOOLS)/Makefile.inc - -USETASM = 1 diff --git a/Source/Apps/Test/2piotst/Build.cmd b/Source/Apps/Test/2piotst/Build.cmd index 8d719eab..004b4bc9 100644 --- a/Source/Apps/Test/2piotst/Build.cmd +++ b/Source/Apps/Test/2piotst/Build.cmd @@ -1,10 +1,8 @@ @echo off setlocal -set TOOLS=..\..\..\..\Tools - +set TOOLS=../../../../Tools set PATH=%TOOLS%\zxcc;%PATH% - set CPMDIR80=%TOOLS%/cpm/ zxcc M80 -=2piotst/l || exit /b diff --git a/Source/Apps/Test/Build.cmd b/Source/Apps/Test/Build.cmd index e56d13b3..55688dfa 100644 --- a/Source/Apps/Test/Build.cmd +++ b/Source/Apps/Test/Build.cmd @@ -1,41 +1,31 @@ @echo off setlocal -set TOOLS=../../../Tools -set APPBIN=..\..\Binary\Apps - +set TOOLS=..\..\..\Tools set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH% - set TASMTABS=%TOOLS%\tasm32 - set CPMDIR80=%TOOLS%/cpm/ -pushd DMAmon && call Build || exit /b & popd -pushd tstdskng && call Build || exit /b & popd -pushd inttest && call Build || exit /b & popd -pushd ppidetst && call Build || exit /b & popd -pushd ramtest && call Build || exit /b & popd -pushd I2C && call Build || exit /b & popd -pushd rzsz && call Build || exit /b & popd -pushd vdctest && call Build || exit /b & popd -pushd kbdtest && call Build || exit /b & popd -pushd ps2info && call Build || exit /b & popd -pushd 2piotst && call Build || exit /b & popd -pushd piomon && call Build || exit /b & popd -pushd banktest && call Build || exit /b & popd -pushd portscan && call Build || exit /b & popd -pushd sound && call Build || exit /b & popd - -goto :eof +call :build DMAmon || exit /b +call :build tstdskng || exit /b +call :build inttest || exit /b +call :build ppidetst || exit /b +call :build ramtest || exit /b +call :build I2C || exit /b +call :build rzsz || exit /b +call :build vdctest || exit /b +call :build kbdtest || exit /b +call :build ps2info || exit /b +call :build 2piotst || exit /b +call :build piomon || exit /b +call :build banktest || exit /b +call :build portscan || exit /b +call :build sound || exit /b +call :build testh8p || exit /b -:asm -echo. -echo Building %1... -tasm -t80 -g3 -fFF %1.asm %1.com %1.lst || exit /b goto :eof -:asm180 -echo. -echo Building %1... -tasm -t180 -g3 -fFF %1.asm %1.com %1.lst || exit /b +:build +echo Building %1 +pushd %1 && call Build || exit /b & popd goto :eof diff --git a/Source/Apps/Test/Clean.cmd b/Source/Apps/Test/Clean.cmd index 4e81e284..733b934e 100644 --- a/Source/Apps/Test/Clean.cmd +++ b/Source/Apps/Test/Clean.cmd @@ -22,3 +22,4 @@ pushd piomon && call Clean || exit /b 1 & popd pushd banktest && call Clean || exit /b 1 & popd pushd portscan && call Clean || exit /b 1 & popd pushd sound && call Clean || exit /b 1 & popd +pushd testh8p && call Clean || exit /b 1 & popd diff --git a/Source/Apps/Test/I2C/Build.cmd b/Source/Apps/Test/I2C/Build.cmd index 6821c4e3..1c6ad0e5 100644 --- a/Source/Apps/Test/I2C/Build.cmd +++ b/Source/Apps/Test/I2C/Build.cmd @@ -5,9 +5,9 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF i2cscan.asm i2cscan.com i2cscan.lst || exit /b -tasm -t180 -g3 -fFF rtcds7.asm rtcds7.com rtcds7.lst || exit /b -tasm -t180 -g3 -fFF i2clcd.asm i2clcd.com i2clcd.lst || exit /b +tasm -t80 -g3 -fFF i2cscan.asm i2cscan.com i2cscan.lst || exit /b +tasm -t80 -g3 -fFF rtcds7.asm rtcds7.com rtcds7.lst || exit /b +tasm -t80 -g3 -fFF i2clcd.asm i2clcd.com i2clcd.lst || exit /b tasm -t80 -g3 -ff srom.asm srom.com srom.lst || exit /b copy /Y i2c*.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/Makefile b/Source/Apps/Test/Makefile index 7d70c01b..8697fdcf 100644 --- a/Source/Apps/Test/Makefile +++ b/Source/Apps/Test/Makefile @@ -1,6 +1,6 @@ -OBJECTS = -SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan sound -DEST = ../../../Binary/Apps/Test +# OBJECTS = +SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan sound testh8p +# DEST = ../../../Binary/Apps/Test TOOLS =../../../Tools include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/Test/inttest/Build.cmd b/Source/Apps/Test/inttest/Build.cmd index e26d9b73..e0a3ff6d 100644 --- a/Source/Apps/Test/inttest/Build.cmd +++ b/Source/Apps/Test/inttest/Build.cmd @@ -5,7 +5,8 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF inttest.asm inttest.com inttest.lst || exit /b +tasm -t80 -g3 -fFF inttest.asm inttest.com inttest.lst || exit /b copy /Y inttest.com ..\..\..\..\Binary\Apps\Test\ || exit /b +copy /Y inttest.doc ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/inttest/Makefile b/Source/Apps/Test/inttest/Makefile index 04222fbd..25570390 100644 --- a/Source/Apps/Test/inttest/Makefile +++ b/Source/Apps/Test/inttest/Makefile @@ -1,5 +1,7 @@ OBJECTS = inttest.com +DOCS = inttest.doc DEST = ../../../../Binary/Apps/Test +DOCDEST = ../../../../Binary/Apps/Test TOOLS =../../../../Tools USETASM=1 diff --git a/Source/Apps/Test/inttest/inttest.asm b/Source/Apps/Test/inttest/inttest.asm index d751a700..9781f207 100644 --- a/Source/Apps/Test/inttest/inttest.asm +++ b/Source/Apps/Test/inttest/inttest.asm @@ -176,6 +176,8 @@ estidx: jr z,hkim cp 2 jr z,hkim + cp 3 + jr z,hkim ret ; ; Setup interrupt handler @@ -545,8 +547,8 @@ stack .equ $ ; stack top ; ; Messages ; -msgban .db "INTTEST v1.2, 15-May-2019",13,10 - .db "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",0 +msgban .db "INTTEST v1.3, 16-May-2024",13,10 + .db "Copyright (C) 2024, Wayne Warthen, GNU GPL v3",0 msginfo .db "Interrupt information request...",0 msgmode .db " Active interrupt mode: ",0 msgcnt .db " Vector entries in use: ",0 diff --git a/Source/Apps/Test/inttest/inttest.doc b/Source/Apps/Test/inttest/inttest.doc new file mode 100644 index 00000000..686c140a --- /dev/null +++ b/Source/Apps/Test/inttest/inttest.doc @@ -0,0 +1,44 @@ +INTTEST +======= + +RomWBW includes an API allowing applications to "hook" interrupts. +The `INTTEST` utility allows you to test this functionality. + + +** Syntax ** + +`INTTEST` + + +** Usage ** + +`INTTEST` is an interactive application. At startup, it will display +a list of the interrupt vector slots in your system along with the +current vector address for each of them. + +It then prompts you to enter the slot number (in hex) of a vector to +hook. After entering this, the application will watch the hooked +vector and countdown from 0xFF to 0x00 as interrupts are noted. + +When the counter reaches 0x00, the interrupt is unhooked and the +application terminates. The application can also be terminated by +pressing . + + +** Notes ** + +If your system is running without interrupts active, the application +will terminate immediately. + +All slots have vectors even if the corresponding interrupt is not +doing anything. In this case, the vector is pointing to the "bad +interrupt" handler. + +If you hook a vector that is not receiving any interrupts, the +down-counter will not do anything. + + +** Etymology* * + +The `INTTEST` command is an original product and the source code is +provided in the RomWBW distribution. diff --git a/Source/Apps/Test/kbdtest/Build.cmd b/Source/Apps/Test/kbdtest/Build.cmd index 5ae6b746..283ad2fa 100644 --- a/Source/Apps/Test/kbdtest/Build.cmd +++ b/Source/Apps/Test/kbdtest/Build.cmd @@ -5,7 +5,7 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF kbdtest.asm kbdtest.com kbdtest.lst || exit /b +tasm -t80 -g3 -fFF kbdtest.asm kbdtest.com kbdtest.lst || exit /b copy /Y kbdtest.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/piomon/Build.cmd b/Source/Apps/Test/piomon/Build.cmd index f0e405e1..a648d875 100644 --- a/Source/Apps/Test/piomon/Build.cmd +++ b/Source/Apps/Test/piomon/Build.cmd @@ -5,6 +5,6 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF piomon.asm piomon.com piomon.lst || exit /b +tasm -t80 -g3 -fFF piomon.asm piomon.com piomon.lst || exit /b copy /Y piomon.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/ppidetst/Build.cmd b/Source/Apps/Test/ppidetst/Build.cmd index 5b7becb0..3367763e 100644 --- a/Source/Apps/Test/ppidetst/Build.cmd +++ b/Source/Apps/Test/ppidetst/Build.cmd @@ -5,7 +5,7 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF ppidetst.asm ppidetst.com ppidetst.lst || exit /b +tasm -t80 -g3 -fFF ppidetst.asm ppidetst.com ppidetst.lst || exit /b copy /Y ppidetst.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/ps2info/Build.cmd b/Source/Apps/Test/ps2info/Build.cmd index 965883ce..9753c099 100644 --- a/Source/Apps/Test/ps2info/Build.cmd +++ b/Source/Apps/Test/ps2info/Build.cmd @@ -5,6 +5,6 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF ps2info.asm ps2info.com ps2info.lst || exit /b +tasm -t80 -g3 -fFF ps2info.asm ps2info.com ps2info.lst || exit /b copy /Y ps2info.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/ps2info/ps2info.asm b/Source/Apps/Test/ps2info/ps2info.asm index 2acbf282..22a6ea7d 100644 --- a/Source/Apps/Test/ps2info/ps2info.asm +++ b/Source/Apps/Test/ps2info/ps2info.asm @@ -11,6 +11,7 @@ ; WBW 2022-04-01: Add menu for test functions ; WBW 2022-04-02: Fix prtchr register saving/recovery ; WBW 2023-10-19: Add support for Duodyne +; WBW 2024-06-10: Add support for RC2014 ; ;======================================================================= ; @@ -25,6 +26,10 @@ iodat_rph .equ $8C ; PS/2 controller data port address ; Duodyne: iocmd_duo .equ $4D ; PS/2 controller command port address iodat_duo .equ $4C ; PS/2 controller data port address +; RC2014 (EP/Sally) +iocmd_rc .equ $64 ; PS/2 controller command port address +iodat_rc .equ $60 ; PS/2 controller data port address + ; cpumhz .equ 8 ; for time delay calculations (not critical) ; @@ -87,6 +92,8 @@ setup1: jr z,setup_rph cp '3' ; Duodyne jr z,setup_duo + cp '4' ; RC2014 EP/Sally + jr z,setup_rc cp 'X' jr z,exit jr setup @@ -115,6 +122,14 @@ setup_duo: ld de,str_duo jr setup2 ; +setup_rc: + ld a,iocmd_rc + ld (iocmd),a + ld a,iodat_rc + ld (iodat),a + ld de,str_rc + jr setup2 +; setup2: call prtstr call crlf2 @@ -1437,16 +1452,18 @@ delay1: ; Constants ;======================================================================= ; -str_banner .db "PS/2 Keyboard/Mouse Information v0.8, 6-Nov-2023",0 +str_banner .db "PS/2 Keyboard/Mouse Information v0.9, 10-Jun-2024",0 str_hwmenu .db "PS/2 Controller Port Options:\r\n\r\n" .db " 1 - Nhyodyne\r\n" .db " 2 - Rhyophyre\r\n" .db " 3 - Duodyne\r\n" + .db " 4 - RC2014\r\n" .db " X - Exit Application\r\n" .db "\r\nSelection? ",0 str_mbc .db "Nhyodyne",0 str_rph .db "Rhyophyre",0 str_duo .db "Duodyne",0 +str_rc .db "RC2014 (Saly)",0 str_menu .db "PS/2 Testing Options:\r\n\r\n" .db " C - Test PS/2 Controller\r\n" .db " K - Test PS/2 Keyboard\r\n" diff --git a/Source/Apps/Test/ramtest/Makefile b/Source/Apps/Test/ramtest/Makefile index 3c5e6515..311b3bdc 100644 --- a/Source/Apps/Test/ramtest/Makefile +++ b/Source/Apps/Test/ramtest/Makefile @@ -2,7 +2,7 @@ OBJECTS = ramtest.com DEST = ../../../../Binary/Apps/Test DOCDEST = ../../../../Doc TOOLS = ../../../../Tools -OTHERS = loader.bin dbgmon.bin +OTHERS = *.bin include $(TOOLS)/Makefile.inc ramtest.com: loader.bin dbgmon.bin diff --git a/Source/Apps/Test/testh8p/Build.cmd b/Source/Apps/Test/testh8p/Build.cmd new file mode 100644 index 00000000..d22386d9 --- /dev/null +++ b/Source/Apps/Test/testh8p/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF testh8p.asm testh8p.com testh8p.lst || exit /b + +copy /Y testh8p.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/testh8p/Clean.cmd b/Source/Apps/Test/testh8p/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/Test/testh8p/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/Test/testh8p/Makefile b/Source/Apps/Test/testh8p/Makefile new file mode 100644 index 00000000..d8e7dd1d --- /dev/null +++ b/Source/Apps/Test/testh8p/Makefile @@ -0,0 +1,9 @@ +OBJECTS = testh8p.com +# DOCS = testh8p.doc +DEST = ../../../../Binary/Apps/Test +DOCDEST = ../../../../Binary/Apps/Test +TOOLS =../../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/Test/testh8p/testh8p.asm b/Source/Apps/Test/testh8p/testh8p.asm new file mode 100644 index 00000000..ada91ca3 --- /dev/null +++ b/Source/Apps/Test/testh8p/testh8p.asm @@ -0,0 +1,238 @@ +;=============================================================================== +; H8 Panel Test +;=============================================================================== +; +; AUTHOR: WAYNE WARTHEN (wwarthen@gmail.com) +;_______________________________________________________________________________ +; +; +; Trivial utility to test the register pair display functionality of the +; Heath H8 Front Panel. +; +; Program will display a set of known register values on the console, +; then go into an infinite loop. The H8 panel can then be checked to +; see if the correct values are displayed. +; +; There is no way to exit this program. You must reset your system. +; +;=============================================================================== +; Definitions +;=============================================================================== +; +stksiz .equ $40 ; Working stack size +; +restart .equ $0000 ; CP/M restart vector +bdos .equ $0005 ; BDOS invocation vector +; +regA .equ $11 +regBC .equ $2233 +regDE .equ $4455 +regHL .equ $6677 +; +;=============================================================================== +; Code Section +;=============================================================================== +; +; + .org $100 +; + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack +; + ld de,str_prefix + call prtstr +; + ld de,str_A + ld hl,regA + call prtreg + ld de,str_BC + ld hl,regBC + call prtreg + ld de,str_DE + ld hl,regDE + call prtreg + ld de,str_HL + ld hl,regHL + call prtreg + ld de,str_SP + ld hl,regSP + call prtreg + ld de,str_PC + ld hl,regPC + call prtreg +; + ld a,regA + ld bc,regBC + ld de,regDE + ld hl,regHL +regPC: jr $ +; +; +; +prtreg: + call prtstr ; print label + ld a,h ; first byte + call prtoctbyte ; print it + ld a,'.' ; separator + call prtchr ; print it + ld a,l ; second byte + call prtoctbyte ; print it + ret +; +; +; +prtoctbyte: + rlca ; 2 ms bits + rlca + push af + and %00000011 ; isolate + add a,'0' ; make char + call prtchr ; show it + pop af + rlca ; next 3 bits + rlca + rlca + push af + and %00000111 ; isolate + add a,'0' ; make char + call prtchr ; show it + pop af + rlca ; next 3 bits + rlca + rlca + push af + and %00000111 ; isolate + add a,'0' ; make char + call prtchr ; show it + pop af + ret +; +; Print character in A without destroying any registers +; +prtchr: + push bc ; save registers + push de + push hl + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it + pop hl ; restore registers + pop de + pop bc + ret +; +; Print a zero terminated string at (DE) without destroying any registers +; +prtstr: + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + ret +; +; Start a new line +; +crlf2: + call crlf ; two of them +crlf: + push af ; preserve AF + ld a,13 ; + call prtchr ; print it + ld a,10 ; + call prtchr ; print it + pop af ; restore AF + ret +; +; Print the value in A in hex without destroying any registers +; +prthex: + push af ; save AF + push de ; save DE + call hexascii ; convert value in A to hex chars in DE + ld a,d ; get the high order hex char + call prtchr ; print it + ld a,e ; get the low order hex char + call prtchr ; print it + pop de ; restore DE + pop af ; restore AF + ret ; done +; +; print the hex word value in hl +; +prthexword: + push af + ld a,h + call prthex + ld a,l + call prthex + pop af + ret +; +; print the hex dword value in de:hl +; +prthex32: + push bc + push de + pop bc + call prthexword + push hl + pop bc + call prthexword + pop bc + ret +; +; Convert binary value in A to ascii hex characters in DE +; +hexascii: + ld d,a ; save A in D + call hexconv ; convert low nibble of A to hex + ld e,a ; save it in E + ld a,d ; get original value back + rlca ; rotate high order nibble to low bits + rlca + rlca + rlca + call hexconv ; convert nibble + ld d,a ; save it in D + ret ; done +; +; Convert low nibble of A to ascii hex +; +hexconv: + and $0F ; low nibble only + add a,$90 + daa + adc a,$40 + daa + ret +; +;=============================================================================== +; Storage Section +;=============================================================================== +; +rtcbuf .fill 6,$FF ; RTC data buffer +; +str_prefix .db "\r\n\r\nRegisters: ",0 +; +str_A .db "A=",0 +str_BC .db ", BC=",0 +str_DE .db ", DE=",0 +str_HL .db ", HL=",0 +str_SP .db ", SP=",0 +str_PC .db ", PC=",0 +; +stksav .dw 0 ; stack pointer saved at start + .fill stksiz,0 ; stack +stack .equ $ ; stack top +regSP: +; + .end diff --git a/Source/Apps/Test/tstdskng/Build.cmd b/Source/Apps/Test/tstdskng/Build.cmd index a56e8dbc..313a450d 100644 --- a/Source/Apps/Test/tstdskng/Build.cmd +++ b/Source/Apps/Test/tstdskng/Build.cmd @@ -5,7 +5,7 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF tstdskng.asm tstdskng.com tstdskng.lst || exit /b +tasm -t80 -g3 -fFF tstdskng.asm tstdskng.com tstdskng.lst || exit /b copy /Y tstdskng.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Test/vdctest/Build.cmd b/Source/Apps/Test/vdctest/Build.cmd index 814cb585..c8c336dc 100644 --- a/Source/Apps/Test/vdctest/Build.cmd +++ b/Source/Apps/Test/vdctest/Build.cmd @@ -5,8 +5,8 @@ set TOOLS=../../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF vdctest.asm vdctest.com vdctest.lst || exit /b -tasm -t180 -g3 -fFF vdconly.asm vdconly.com vdconly.lst || exit /b +tasm -t80 -g3 -fFF vdctest.asm vdctest.com vdctest.lst || exit /b +tasm -t80 -g3 -fFF vdconly.asm vdconly.com vdconly.lst || exit /b copy /Y vdctest.com ..\..\..\..\Binary\Apps\Test\ || exit /b copy /Y vdconly.com ..\..\..\..\Binary\Apps\Test\ || exit /b diff --git a/Source/Apps/Tune/Build.cmd b/Source/Apps/Tune/Build.cmd index 6c601548..eb16f4c7 100644 --- a/Source/Apps/Tune/Build.cmd +++ b/Source/Apps/Tune/Build.cmd @@ -5,9 +5,9 @@ set TOOLS=../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF -dWBW tune.asm tune.com tune.lst || exit /b -tasm -t180 -g3 -fFF -dZX tune.asm tunezx.com tunezx.lst || exit /b -tasm -t180 -g3 -fFF -dMSX tune.asm tunemsx.com tunemsx.lst || exit /b +tasm -t80 -g3 -fFF -dWBW tune.asm tune.com tune.lst || exit /b +tasm -t80 -g3 -fFF -dZX tune.asm tunezx.com tunezx.lst || exit /b +tasm -t80 -g3 -fFF -dMSX tune.asm tunemsx.com tunemsx.lst || exit /b copy /Y tune*.com ..\..\..\Binary\Apps\ || exit /b copy /Y Tunes\*.* ..\..\..\Binary\Apps\Tunes\ || exit /b \ No newline at end of file diff --git a/Source/Apps/Tune/tune.asm b/Source/Apps/Tune/tune.asm index 8a9d1800..97d16230 100644 --- a/Source/Apps/Tune/tune.asm +++ b/Source/Apps/Tune/tune.asm @@ -49,6 +49,9 @@ ; 2024-02-23 [WBW] Include ACR value in config table ; 2024-04-16 [WBW] Add support for NABU AY-3-8910 ; 2024-05-10 [WBW] Hack to avoid corrupting bits 6&7 of PSG R7 for NABU! +; 2024-07-08 [WBW] Add support for Les Bird's Graphics, Sound, Joystick +; 2024-07-11 [WBW] Updated, Les Bird's module now uses same settings as EB6 +; 2024-09-17 [WBW] Add support for HEATH H8 with Les Bird's MSX Card ;_______________________________________________________________________________ ; ; ToDo: @@ -572,8 +575,8 @@ CFGSIZ .EQU $ - CFGTBL .DB $07, $D8, $D0, $D8, $FF, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (EB) .DW HWSTR_RCEB ; - .DB $07, $A0, $A1, $A2, $FF, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (EB Rev 6) - .DW HWSTR_RCEB6 + .DB $07, $A0, $A1, $A2, $FF, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (MSX) + .DW HWSTR_RCMSX ; .DB $07, $D1, $D0, $D0, $FF, $FF, $FF ; RCZ80 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF @@ -584,8 +587,8 @@ CFGSIZ .EQU $ - CFGTBL .DB $08, $68, $60, $68, $C0, $FF, $FF ; RCZ180 W/ RC SOUND MODULE (EB) .DW HWSTR_RCEB ; - .DB $08, $A0, $A1, $A2, $C0, $FF, $FF ; RCZ180 W/ RC SOUND MODULE (EB Rev 6) - .DW HWSTR_RCEB6 + .DB $08, $A0, $A1, $A2, $C0, $FF, $FF ; RCZ180 W/ RC SOUND MODULE (MSX) + .DW HWSTR_RCMSX ; .DB $08, $61, $60, $60, $C0, $FF, $FF ; RCZ180 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF @@ -596,8 +599,8 @@ CFGSIZ .EQU $ - CFGTBL .DB $09, $D8, $D0, $D8, $FF, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB) .DW HWSTR_RCEB ; - .DB $09, $A0, $A1, $A2, $FF, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (EB Rev 6) - .DW HWSTR_RCEB6 + .DB $09, $A0, $A1, $A2, $FF, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (MSX) + .DW HWSTR_RCMSX ; .DB $09, $D1, $D0, $D0, $FF, $FF, $FF ; EZZ80 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF @@ -608,8 +611,8 @@ CFGSIZ .EQU $ - CFGTBL .DB $0A, $68, $60, $68, $C0, $FF, $FF ; SCZ180 W/ RC SOUND MODULE (EB) .DW HWSTR_RCEB ; - .DB $0A, $A0, $A1, $A2, $C0, $FF, $FF ; SCZ180 W/ RC SOUND MODULE (EB Rev 6) - .DW HWSTR_RCEB6 + .DB $0A, $A0, $A1, $A2, $C0, $FF, $FF ; SCZ180 W/ RC SOUND MODULE (MS6) + .DW HWSTR_RCMSX ; .DB $0A, $61, $60, $60, $C0, $FF, $FF ; SCZ180 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF @@ -620,8 +623,8 @@ CFGSIZ .EQU $ - CFGTBL .DB $0B, $D8, $D0, $D8, $FF, $FF, $FF ; RCZ280 W/ RC SOUND MODULE (EB) .DW HWSTR_RCEB ; - .DB $0B, $A0, $A1, $A2, $FF, $FF, $FF ; RCZ280 W/ RC SOUND MODULE (EB Rev 6) - .DW HWSTR_RCEB6 + .DB $0B, $A0, $A1, $A2, $FF, $FF, $FF ; RCZ280 W/ RC SOUND MODULE (MSX) + .DW HWSTR_RCMSX ; .DB $0B, $D1, $D0, $D0, $FF, $FF, $FF ; RCZ280 W/ RC SOUND MODULE (MF) .DW HWSTR_RCMF @@ -634,6 +637,9 @@ CFGSIZ .EQU $ - CFGTBL ; .DB 17, $A4, $A5, $A4, $FF, $A6, $FE ; DUODYNE .DW HWSTR_DUO +; + .DB 18, $A0, $A1, $A2, $FF, $FF, $FF ; HEATH H8 + .DW HWSTR_HEATH ; .DB 22, $41, $40, $40, $FF, $FF, $FF ; NABU .DW HWSTR_NABU @@ -666,7 +672,7 @@ TMP .DB 0 ; work around use of undocumented Z80 HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN -MSGBAN .DB "Tune Player for RomWBW v3.8, 10-May-2024",0 +MSGBAN .DB "Tune Player for RomWBW v3.11, 17-Sep-2024",0 MSGUSE .DB "Copyright (C) 2024, Wayne Warthen, GNU GPL v3",13,10 .DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10 .DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10 @@ -687,12 +693,13 @@ MSGERR .DB "App Error", 0 HWSTR_SCG .DB "SCG ECB Board",0 HWSTR_N8 .DB "N8 Onboard Sound",0 HWSTR_RCEB .DB "RCBus Sound Module (EB)",0 -HWSTR_RCEB6 .DB "RCBus Sound Module (EBv6)",0 +HWSTR_RCMSX .DB "RCBus Sound Module (MSX)",0 HWSTR_RCMF .DB "RCBus Sound Module (MF)",0 HWSTR_LINC .DB "Z50 LiNC Sound Module",0 HWSTR_MBC .DB "NHYODYNE Sound Module",0 HWSTR_DUO .DB "DUODYNE Sound Module",0 HWSTR_NABU .DB "NABU Onboard Sound",0 +HWSTR_HEATH .DB "HEATH H8 MSX Module",0 MSGUNSUP .db "MYM files not supported with HBIOS yet!\r\n", 0 diff --git a/Source/Apps/VGM/Build.cmd b/Source/Apps/VGM/Build.cmd index 08e013f5..0a032701 100644 --- a/Source/Apps/VGM/Build.cmd +++ b/Source/Apps/VGM/Build.cmd @@ -5,8 +5,8 @@ set TOOLS=../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF -dWBW vgmplay.asm vgmplay.com vgmplay.lst || exit /b -tasm -t180 -g3 -fFF -dWBW ymfmdemo.asm ymfmdemo.com ymfmdemo.lst || exit /b +tasm -t80 -g3 -fFF -dWBW vgmplay.asm vgmplay.com vgmplay.lst || exit /b +tasm -t80 -g3 -fFF -dWBW ymfmdemo.asm ymfmdemo.com ymfmdemo.lst || exit /b copy /Y vgmplay.com ..\..\..\Binary\Apps\ || exit /b copy /Y Tunes\*.vgm ..\..\..\Binary\Apps\Tunes\ || exit /b diff --git a/Source/Apps/XM/xmdm125.asm b/Source/Apps/XM/xmdm125.asm index 3340633d..8b02e742 100644 --- a/Source/Apps/XM/xmdm125.asm +++ b/Source/Apps/XM/xmdm125.asm @@ -3478,7 +3478,17 @@ RSDMA: LXI D,TBUF ; Reset DMA address RET ; WRERR: CALL RSDMA ; Reset DMA to normal - MVI C,CAN ; Cancel +; [WBW] BEGIN: Fixed to put CAN character in A instead of C because +; SEND uses the A register. Also increased number of CAN characters +; sent to 3. Credit to HubertH for finding this and providing the fix. +; MVI C,CAN ; Cancel +; [WBW] ----- + MVI A,CAN ; Cancel + CALL SEND ; Sender + MVI A,CAN ; Cancel + CALL SEND ; Sender + MVI A,CAN ; Cancel +; [WBW] END CALL SEND ; Sender ; [WBW] BEGIN: RCVSABT does not return, so file write error ; message was never being displayed. Swapped things around diff --git a/Source/Apps/assign.asm b/Source/Apps/assign.asm deleted file mode 100644 index 7bc6d154..00000000 --- a/Source/Apps/assign.asm +++ /dev/null @@ -1,1972 +0,0 @@ -;=============================================================================== -; ASSIGN - Display and/or modify drive letter assignments -; -;=============================================================================== -; -; Author: Wayne Warthen (wwarthen@gmail.com) -;_______________________________________________________________________________ -; -; Usage: -; ASSIGN D:[=[{D:|[]:[]}]][,...] -; ex: ASSIGN (display all active drive assignments) -; ASSIGN /? (display version and usage) -; ASSIGN /L (display all possible devices) -; ASSIGN C:=D: (swaps C: and D:) -; ASSIGN C:=FD0: (assign C: to floppy unit 0) -; ASSIGN C:=IDE0:1 (assign C: to IDE unit0, slice 1) -; ASSIGN C:= (unassign C:) -;_______________________________________________________________________________ -; -; Change Log: -; 2016-03-21 [WBW] Updated for HBIOS 2.8 -; 2016-04-08 [WBW] Determine key memory addresses dynamically -; 2019-08-07 [WBW] Fixed DPB selection error -; 2019-11-17 [WBW] Added preliminary CP/M 3 support -; 2019-12-24 [WBW] Fixed location of BIOS save area -; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) -; 2020-05-06 [WBW] Add patch level to version compare -; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3 -; 2020-05-12 [WBW] Back out media change flag -; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc -; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3 -; Use CPM3 BDOS direct BIOS call to get DRVTBL adr -; 2023-06-19 [WBW] Update for revised DIODEVICE API -; 2023-09-19 [WBW] Added CHUSB & CHSD device support -; 2023-10-13 [WBW] Fixed DPH creation to select correct DPB -;_______________________________________________________________________________ -; -; ToDo: -; 1) ASSIGN C: causes drive map to be reinstalled unnecessarily -;_______________________________________________________________________________ -; -;=============================================================================== -; Definitions -;=============================================================================== -; -stksiz .equ $40 ; Working stack size -; -restart .equ $0000 ; CP/M restart vector -bdos .equ $0005 ; BDOS invocation vector -bnksel .equ $FFF3 ; HBIOS bank select vector -; -stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp -; -#include "../ver.inc" -; -;=============================================================================== -; Code Section -;=============================================================================== -; - .org $100 -; - ; relocate to high memory - ld hl,image - ld de,$8000 - ld bc,modsize - ldir - jp start -; -image .equ $ -; - .org $8000 -; -start: -; - ; setup stack (save old value) - ld (stksav),sp ; save stack - ld sp,stack ; set new stack -; - ; initialization - call init ; initialize - jr nz,exit ; abort if init fails -; - ; do the real work - call process ; parse and process command line - jr nz,exit ; done if error or no action -; - ; perform table integrity check - call valid - jr nz,exit -; - ; install the new drive map if changes were made - ld a,(modcnt) ; get the mod count - or a ; set flags - call nz,install ; install new drive map -; -exit: ; clean up and return to command processor - call crlf ; formatting - ld sp,(stksav) ; restore stack - jp restart ; return to CP/M via restart - ret ; return to CP/M w/o restart -; -; Initialization -; -init: -; - ; locate start of cbios (function jump table) - ld hl,(restart+1) ; load address of CP/M restart vector - ld de,-3 ; adjustment for start of table - add hl,de ; HL now has start of table - ld (bioloc),hl ; save it -; - ; get CP/M version and save it - ld c,$0C ; function number - call bdos ; do it, HL := version - ld (cpmver),hl ; save it - ;push hl ; *debug* - ;pop bc ; *debug* - ;call prthexword ; *debug* - ;ld a,l ; low byte - ;cp $30 ; CP/M 3.0? -; - ; get location of config data and verify integrity - ld hl,stamp ; HL := adr or RomWBW zero page stamp - ld a,(hl) ; get first byte of RomWBW marker - cp 'W' ; match? - jp nz,errinv ; abort with invalid config block - inc hl ; next byte (marker byte 2) - ld a,(hl) ; load it - cp ~'W' ; match? - jp nz,errinv ; abort with invalid config block - inc hl ; next byte (major/minor version) - ld a,(hl) ; load it - cp RMJ << 4 | RMN ; match? - jp nz,errver ; abort with invalid os version - inc hl ; next byte (update/patch) - ld a,(hl) ; load it - and $F0 ; eliminate patch num - cp RUP << 4 ; match? - jp nz,errver ; abort with invalid os version - inc hl ; bump past version info -; - ; dereference HL to point to CBIOS extension data - ld a,(hl) ; dereference HL - inc hl ; ... to point to - ld h,(hl) ; ... ROMWBW config data block - ld l,a ; ... in CBIOS -; - ; skip device map address - inc hl ; bump two bytes - inc hl ; ... past device map address entry -; - ; get location of drive map - ld e,(hl) ; dereference HL - inc hl ; ... into DE to get - ld d,(hl) ; ... drive map pointer - inc hl ; skip past drive map pointer - ld (maploc),de ; and save it -; - ; get location of dpbmap - ld e,(hl) ; dereference HL - inc hl ; ... into DE to get - ld d,(hl) ; ... DPB map pointer - ld (dpbloc),de ; and save it -; - ; test for CP/M 3 and branch if so - ld a,(cpmver) ; low byte of cpm version - cp $30 ; CP/M 3.0? - jp nc,initcpm3 ; handle CP/M 3.0 or greater -; - ; make a local working copy of the drive map - ld hl,(maploc) ; copy from CBIOS drive map - ld de,mapwrk ; copy to working drive map - dec hl ; point to entry count - ld a,(hl) ; get entry count - inc hl ; restore hl pointer to drive map start - add a,a ; multiple a by - add a,a ; ... size of entries (4 bytes each) - ld c,a ; set BC := 0A - ld b,0 ; ... so BC is length to copy - ldir ; do the copy -; - ; determine end of CBIOS (assume HBIOS for now) - ld hl,($FFFE) ; get proxy start address - ld (bioend),hl ; save as CBIOS end address -; - ; check for UNA (UBIOS) - ld a,($FFFD) ; fixed location of UNA API vector - cp $C3 ; jp instruction? - jr nz,initx ; if not, not UNA - ld hl,($FFFE) ; get jp address - ld a,(hl) ; get byte at target address - cp $FD ; first byte of UNA push ix instruction - jr nz,initx ; if not, not UNA - inc hl ; point to next byte - ld a,(hl) ; get next byte - cp $E5 ; second byte of UNA push ix instruction - jr nz,initx ; if not, not UNA - ld hl,unamod ; point to UNA mode flag - ld (hl),$FF ; set UNA mode flag - ld c,$F1 ; UNA func: Get HMA - rst 08 ; call UNA, HL := UNA proxy start address - ld (bioend),hl ; save as CBIOS end address -; -initx: - ; compute size of CBIOS - ld hl,(bioend) ; HL := end address - ld de,(bioloc) ; DE := starting address - xor a ; clear carry - sbc hl,de ; subtract to get size in HL - ld (biosiz),hl ; and save it -; - ; establish heap limit - ld hl,(bioend) ; HL := end of CBIOS address - ld de,-$40 ; allow 40 bytes for CBIOS stack - add hl,de ; adjust - ld (heaplim),hl ; save it -; -#if 0 - ld a,' ' - call crlf - ld bc,(bioloc) - call prthexword - call prtchr - ld bc,(bioend) - call prthexword - call prtchr - ld bc,(maploc) - call prthexword - call prtchr - ld bc,(heaplim) - call prthexword - -#endif -; - ; return success - xor a ; signal success - ret ; return -; -; CP/M 3 initialization -; -initcpm3: - ld a,22 ; XBIOS DRVTBL function - call xbios ; Invoke XBIOS - ld (drvtbl),hl ; save DRVTBL address -; -; The CP/M 3 drvtbl is in common memory, but the XDPHs are not. -; So, here we temporarily swap the bank to the CP/M 3 system -; bank. We cannot use the CP/M Direct BIOS call because it -; explicitly blocks use of SELMEM, so we are forced to use -; HBIOS call. The CP/M 3 system bank is always the HBIOS -; user bank. -; - ; switch to sysbnk - ld a,($FFE0) ; get current bank - push af ; save it - ld bc,$F8F2 ; HBIOS Get Bank Info - rst 08 ; call HBIOS, E=User Bank - ld a,e ; HBIOS User Bank - call bnksel ; HBIOS BNKSEL -; - ; copy CP/M 3 drvtbl to drvmap working copy - ld hl,(drvtbl) ; get drive table in HL - ld de,mapwrk ; DE := working drive map - ld b,16 -initc2: - push hl ; save drvtbl entry adr - ld a,(hl) ; deref HL to get DPH adr - inc hl ; ... - ld h,(hl) ; ... - ld l,a ; ... - ld a,l ; check for - or h ; ... zero - jr nz,initc3 ; if not zero, copy entry - inc de ; ... else bump past unit field - jr initc4 ; ... and continue without copying -initc3: - dec hl ; back up to - dec hl ; ... unit - ld a,(hl) ; get unit from drvtbl - ld (de),a ; save unit to drvmap - inc hl ; bump to slice - inc de ; bump to slice - ld a,(hl) ; get slice from drvtbl - ld (de),a ; save slice to drvmap -initc4: - inc de ; bump past slice - inc de ; skip - inc de ; ... dph - pop hl ; back to drvtbl entry - inc hl ; bump to - inc hl ; ... next drvtbl entry - djnz initc2 -; - ; switch back to tpabnk - pop af ; recover prev bank - call bnksel ; HBIOS BNKSEL -; - ; return success - xor a ; signal success - ret ; return -; -; Process command line -; -process: -; - ; look for start of parms - ld hl,$81 ; point to start of parm area (past len byte) - call nonblank ; skip to next non-blank char - jp z,showall ; no parms, show all active assignments -; - ; check for special option, introduced by a "/" - cp '/' ; start of usage request? - jp z,option ; yes, handle option -; -process0: -; - sub 'A' ; make it binary - ld (dstdrv),a ; save it as destination drive - inc hl ; next char - ld a,(hl) ; get it - cp ':' ; is it ':' as expected? - jp nz,errprm ; error if not - inc hl ; skip ':' - call nonblank ; skip possible blanks - cp '=' ; proper delimiter? - jr z,process1 ; yes, continue - - ld de,drvshow ; show the drive - ld a,(dstdrv) ; load the drive - jr process4 ; do it -; -process1: ; handle other side of '=' -; - inc hl ; skip '=' - call nonblank ; skip blanks as needed - ld de,drvdel ; assume a drive delete - jp z,process4 ; continue to processing - cp ',' ; comma? - jp z,process4 ; continue to processing - call getalpha ; gobble all alpha characters - dec b ; decrement num chars parsed - jr nz,process2 ; more than 1 char, handle as device name -; - ; handle as drive swap - cp ':' ; check for mandatory trailing colon - jp nz,errprm ; handle unexpected character - inc hl ; skip ':' - ld a,(tmpstr) ; get the drive letter - sub 'A' ; make it binary - ld (srcdrv),a ; assume it is a src drv and save it - ld de,drvswap ; put routine to call in DE - jr process4 ; and continue -; -process2: ; handle a device/slice assignment -; - call getnum ; get number from buffer - jp c,errnum ; abort on overflow - cp 16 ; compare to max - jp nc,errnum ; abort if too high - ld (unit),a ; save it as unit num - ld a,(hl) ; get terminating char - cp ':' ; check for mandatory colon - jp nz,errprm ; handle unexpected character - inc hl ; skip past colon - call getnum ; get number from buffer - jp c,errnum ; abort on overflow - ld (slice),a ; save it as slice num - ld de,drvmap ; put routine to call in DE - jr process4 ; and continue -; -process4: ; check for terminating null or comma -; - call nonblank ; skip possible blanks - jr z,process5 ; null terminator OK - cp ',' ; check for comma - jr z,process5 ; also OK - jp errprm ; otherwise parm error -; -process5: ; do the processing -; - ex de,hl ; move routine to call to HL - push de ; save command string pointer - call jphl ; do the work - pop hl ; recover command string pointer - ret nz ; abort on error - ld a,(hl) ; get the current cmd string char - or a ; set flags - ret z ; if null, we are done - inc hl ; otherwise, skip comma - call nonblank ; and possible blanks after comma - ret z ; get out if nothing more - jp process0 ; we have more work, loop -; -; Handle special options -; -option: -; - inc hl ; next char - ld a,(hl) ; get it - cp '?' ; is it a '?' as expected? - jp z,usage ; yes, display usage - cp 'L' ; is it a 'L', display device list? - jp z,devlist ; yes, display device list - jp errprm ; anything else is an error -; -usage: -; - call crlf ; formatting - ld de,msgban1 ; point to version message part 1 - call prtstr ; print it - ld de,msg22 ; assume CP/M 2.2 - ld a,(cpmver) ; low byte of ver - cp $30 ; CP/M 3.0? - jp c,usage1 ; if not, jump ahead - ld de,msg3 ; CP/M 3 -usage1: - call prtstr - ld de,msbban2 ; next portion of banner - call prtstr - ld a,(unamod) ; get UNA flag - or a ; set flags - ld de,msghb ; point to HBIOS mode message - call z,prtstr ; if not UNA, say so - ld de,msgub ; point to UBIOS mode message - call nz,prtstr ; if UNA, say so - call crlf ; formatting - ld de,msgban3 ; point to version message part 2 - call prtstr ; print it - call crlf2 ; blank line - ld de,msguse ; point to usage message - call prtstr ; print it - or $FF ; signal no action performed - ret ; and return -; -devlist: -; - ld a,(unamod) ; get UNA mode flag - or a ; set flags - jr nz,devlstu ; do UNA mode dev list -; - ld b,$F8 ; hbios func: sysget - ld c,$10 ; sysget subfunc: diocnt - rst 08 ; call hbios, E := device count - ld b,e ; use device count for loop count - ld c,0 ; use C for device index -devlist1: - call crlf ; formatting - ld de,indent ; indent - call prtstr ; ... to look nice - push bc ; preserve loop control - ld a,c ; device to A - call prtdev ; print device mnemonic - ld a,':' ; colon for device/unit format - call prtchr ; print it - pop bc ; restore loop control - inc c ; next device index - djnz devlist1 ; loop as needed - or $FF ; signal no action taken - ret ; done -; -devlstu: - ; UNA mode device list - ld b,0 ; use unit 0 to get count - ld c,$48 ; una func: get disk type - ld l,0 ; preset unit count to zero - rst 08 ; call una, b is assumed to be untouched!!! - ld a,l ; unit count to a - or a ; set flags - ret z ; no units, return - ld b,l ; unit count to b - ld c,0 ; init unit index -devlstu1: - call crlf ; formatting - ld de,indent ; indent - call prtstr ; ... to look nice - push bc ; save loop control vars - ld a,c ; put unit num in A - push af ; save it - call prtdevu ; print the device name - pop af ; restore unit num - call prtdecb ; print unit num - ld a,':' ; colon delimiter - call prtchr ; print it - pop bc ; restore loop control - inc c ; next drive - djnz devlstu1 ; loop as needed - ret ; return -; -; Install the new drive map into CBIOS -; -install: - ld a,(cpmver) ; low byte of CP/M version - cp $30 ; CP/M 3.0? - jp nc,instcpm3 ; handle CP/M 3.0 or greater -; - ; capture CBIOS snapshot and stack frame for error recovery - ld hl,(bioloc) ; start of CBIOS - ld de,$1000 ; save it here - ld bc,(biosiz) ; size of CBIOS - ldir ; save it - ld (xstksav),sp ; save stack frame - ; clear CBIOS buffer area - ld hl,(maploc) ; start fill at drive map - ld a,(bioend + 1) ; msb of CBIOS end address to A -install1: - ld e,0 ; fill with null - ld (hl),e ; fill next byte - inc hl ; point to next byte - cp h ; is H == msb of CBIOS end address? - jr nz,install1 ; if not, loop -; - ; determine the drive map entry count - ld hl,mapwrk - ld c,0 - ld b,16 -install2: - ld a,$FF - cp (hl) - jr z,install3 - ld e,c ; remember high water mark -install3: - inc hl - inc hl - inc hl - inc hl - inc c - djnz install2 - inc e ; convert from max value to count -; - ; record entry count in CBIOS - ld hl,(maploc) ; start of map - dec hl ; backup to entry count - ld (hl),e ; record count -; - ; copy map - ld a,e ; A := entry count - add a,a ; multiply by size - add a,a ; ... of entry (4 bytes) - ld c,a ; put in C for count - ld b,0 ; msb of count is always zero - ld hl,mapwrk ; source of copy is work map - ld de,(maploc) ; target is CBIOS map loc - ldir ; do it -; - ; set start of memory allocation heap - ld (heaptop),de ; DE has next byte available -; - ; allocate directory buffer - ld hl,128 ; size of directory buffer - call alloc ; allocate the space - jp c,instovf ; handle overflow error - ld (dirbuf),hl ; ... and save in dirbuf -; -dph_init: -; -; iterate through drive map to build dph entries dynamically -; - ; setup for dph build loop - ld hl,(maploc) ; point to drive map - dec hl ; backup to entry count - ld b,(hl) ; loop drvcnt times - ld c,0 ; drive index - inc hl ; bump to start of drive map -; -dph_init1: - ; no DPH if drive not assigned - ld a,(hl) - cp $FF - jr nz,dph_init2 - ld de,0 ; not assigned, use DPH pointer of zero - jr dph_init3 -; -dph_init2: - ld a,(hl) ; unit to A - push bc ; save loop control - push hl ; save drive map pointer - ;ld hl,16 ; size of a DPH structure - ld hl,20 ; size of a DPH structure - call alloc ; allocate space for dph - jp c,instovf ; handle overflow error - push hl ; save DPH location - push hl ; move DPH location - pop de ; ... to DE - call makdph ; make the DPH, unit in A from above - pop de ; restore DPH pointer to DE - pop hl ; restore drive map pointer to HL - pop bc ; restore loop control -; -dph_init3: - inc hl ; bump to slice loc - inc hl ; bump to DPH pointer lsb - ld (hl),e ; save lsb - inc hl ; bump to DPH pointer msb - ld (hl),d ; save msb - inc hl ; bump to start of next drive map entry - inc c ; next drive index - djnz dph_init1 ; loop as needed -; - ; display free memory - call crlf2 - ld de,indent - call prtstr - ld hl,(heaplim) ; subtract high water - ld de,(heaptop) ; ... from top of cbios - or a ; ... with cf clear - sbc hl,de ; ... so hl gets bytes free - call prtdecw ; print it - ld de,msgmem ; add description - call prtstr ; and print it -; - call drvrst ; perform BDOS drive reset -; - xor a ; signal success - ret ; done -; -makdph: -; -; make a dph at address in de for dev/unit in a -; - push de ; save incoming dph address -; - ld c,a ; save incoming dev/unit - ld a,(unamod) ; get UNA mode flag - or a ; set flags - ld a,c ; restore incoming dev/unit - jr nz,makdphuna ; do UNA mode - jr makdphwbw ; do WBW mode -; -makdphuna: ; determine appropriate dpb (WBW mode) - ld b,a ; unit num to b - ld c,$48 ; una func: get disk type - rst 08 ; call una - ld a,d ; move disk type to a -; - ; derive dpb address based on disk type - cp $40 ; ram/rom drive? - jr z,makdphuna1 ; handle ram/rom drive if so -; cp $?? ; floppy drive? -; jr z,xxxxx ; handle floppy - ld e,4 ; assume hard disk - jr makdph0 ; continue -; -makdphuna1: ; handle ram/rom - ld c,$45 ; una func: get disk info - ld de,$9000 ; 512 byte buffer *** fix!!! *** - rst 08 ; call una - bit 7,b ; test ram drive bit - ld e,1 ; assume rom - jr z,makdph0 ; not set, rom drive, continue - ld e,2 ; otherwise, must be ram drive - jr makdph0 ; continue -; -makdphwbw: ; determine appropriate dpb (WBW mode, unit number in A) -; - ld c,a ; unit number to C - ld b,$17 ; HBIOS: Report Device Info - rst 08 ; call HBIOS, return w/ device type in D, physical unit in E - ld a,d ; device type to A - cp $00 ; ram/rom? - jr nz,makdph00 ; if not, skip ahead to other types - ld a,e ; physical unit number to A - ld e,1 ; assume rom - cp $01 ; rom? - jr z,makdph0 ; yes, jump ahead - ld e,2 ; otherwise ram - jr makdph0 ; jump ahead -makdph00: - ld e,6 ; assume floppy - cp $01 ; floppy? - jr z,makdph0 ; yes, jump ahead - ld e,3 ; assume ram floppy - cp $02 ; ram floppy? - jr z,makdph0 ; yes, jump ahead - ld e,4 ; everything else is assumed to be hard disk - jr makdph0 ; yes, jump ahead -; -makdph0: - ld hl,(dpbloc) ; point to start of dpb table in CBIOS - ld a,e ; get index of target DPB to A - add a,a ; each entry is two bytes - call addhl ; add offset for desired DPB address - ld e,(hl) ; dereference HL - inc hl ; into DE, so DE - ld d,(hl) ; has address of target DPB -; -makdph1: -; - ; build the dph - pop hl ; hl := start of dph - ld a,8 ; size of dph reserved area - call addhl ; leave it alone (zero filled) -; - ld bc,(dirbuf) ; address of dirbuf - ld (hl),c ; plug dirbuf - inc hl ; ... into dph - ld (hl),b ; ... and bump - inc hl ; ... to next dph entry -; - ld (hl),e ; plug dpb address - inc hl ; ... into dph - ld (hl),d ; ... and bump - inc hl ; ... to next entry - dec de ; point - dec de ; ... to start - dec de ; ... of - dec de ; ... dpb - dec de ; ... prefix data (cks & als buf sizes) - call makdph2 ; handle cks buf, then fall thru for als buf - ret nz ; bail out on error -; -makdph2: - ; DE = address of CKS or ALS buf to allocate - ; HL = address of field in DPH to get allocated address - push hl ; save DPH field ptr - pop bc ; into BC -; - ; HL := alloc size, DE bumped - ex de,hl - ld e,(hl) ; get size to allocate - inc hl ; ... - ld d,(hl) ; ... into HL - inc hl ; and bump DE - ex de,hl -; - ; check for size of zero, special case - ld a,h ; check to see - or l ; ... if hl is zero - jr z,makdph3 ; if so, jump ahead using hl as address -; - ; allocate memory - call alloc ; do the allocation - jp c,instovf ; bail out on overflow - -makdph3: - ; swap hl and bc - push bc ; bc -> (sp) - ex (sp),hl ; (sp) -> hl, hl -> (sp) - pop bc ; (sp) -> bc -; - ; save allocated address - ld (hl),c ; save cks/als buf - inc hl ; ... address in - ld (hl),b ; ... dph and bump - inc hl ; ... to next dph entry - xor a ; signal success - ret -; -; -; -instcpm3: - ; swicth to sysbnk - ld a,($FFE0) ; get current bank - push af ; save it - ld bc,$F8F2 ; HBIOS Get Bank Info - rst 08 ; call HBIOS, E=User Bank - ld a,e ; HBIOS User Bank - call $FFF3 ; HBIOS BNKSEL -; - ; copy drvmap working copy to CP/M 3 drvtbl - ld hl,(drvtbl) ; get drvtbl address - ld a,(hl) ; deref HL to get DPH0 adr - inc hl ; ... - ld h,(hl) ; ... - ld l,a ; ... - ld (dphadr),hl ; save starting dphadr - - - ld hl,(drvtbl) ; get drive table in HL - ld de,mapwrk ; DE := working drive map - ld b,16 -instc1: - ld a,(de) ; get unit field of mapwrk - inc a ; test for $FF - jr nz,instc2 ; if used, do copy - xor a ; zero accum - ld (hl),a ; zero lsb of drvtbl entry adr - inc hl ; move to msb - ld (hl),a ; zero msb of drvtbl entry adr - inc hl ; bump to start of next drvtbl entry - inc de ; bump to next mapwrk entry - inc de ; ... - inc de ; ... - inc de ; ... - jr instc3 ; resume loop without copy -; -instc2: - push hl ; save drvtbl entry adr - push de ; save mapwrk entry adr - ld de,(dphadr) ; get cur dph adr - ld (hl),e ; save dph adr to drvtbl - inc hl ; ... - ld (hl),d ; ... - ex de,hl ; dph adr to HL - pop de ; restore mapwrk entry adr - dec hl ; backup to unit - dec hl ; ... - ld a,(de) ; get unit from mapwrk - ld (hl),a ; put unit into DPH field - inc de ; bump to slice field of mapwrk - inc hl ; bump to slice field of DPH field - ld a,(de) ; get slice from mapwrk - ld (hl),a ; put slice into DPH field -; ld a,11 ; media byte is 11 bytes ahead -; call addhl ; bump HL to media byte adr -; or $FF ; use $FF to signify media change -; ld (hl),a ; set media flag byte - inc de ; bump to next mapwrk entry - inc de ; ... - inc de ; ... - pop hl ; back to drvtbl entry - inc hl ; bump to - inc hl ; ... next drvtbl entry -instc3: - push hl ; save drvtbl entry adr - push de ; save mapwrk entry adr - ld hl,(dphadr) ; get cur dph address - ld de,$27 ; size of xdph - add hl,de ; bump to next dph - ld (dphadr),hl ; save it - pop de ; recover mapwrk entry adr - pop hl ; recover drvtbl entry adr - djnz instc1 -; - ; switch back to tpabnk - pop af ; recover prev bank - call $FFF3 ; HBIOS BNKSEL -; - ; set SCB drive door open flag - ld a,$54 ; SCB drive door opened flag - ld (scboff),a ; set offset parm - or $FF ; SCB operation, $FF = set - ld (scbop),a ; set operation parm - ld (scbval),a ; set value parm to $FF - ld c,$31 ; get/set system control block - ld de,scbpb ; scb parameter block adr - call bdos -; - call drvrst ; perform BDOS drive reset -; - xor a ; signal success - ret -; -; Handle overflow error in installation -; -instovf: - ; restore stack frame and CBIOS image - ld sp,(xstksav) ; restore stack frame - ld hl,$1000 ; start of CBIOS image buffer - ld de,(bioloc) ; start of CBIOS - ld bc,(biosiz) ; size of CBIOS - ldir ; restore it - jp errovf -; -; Allocate HL bytes from heap -; Return pointer to allocated memory in HL -; On overflow error, C set -; -alloc: - push de ; save de so we can use it for work reg - ld de,(heaptop) ; get current heap top - push de ; and save for return value - add hl,de ; add requested space, hl := new heap top - jr c,allocx ; test for cpu memory space overflow - ld de,(heaplim) ; load de with heap limit - ex de,hl ; de=new heaptop, hl=heaplim - sbc hl,de ; heaplim - heaptop - jr c,allocx ; c set on overflow error - ; allocation succeeded, commit new heaptop - ld (heaptop),de ; save new heaptop -allocx: - pop hl ; return value to hl - pop de ; recover de - ret -; -; Scan drive map table for integrity -; Currently just checks for multiple drive -; letters referencing a single file system -; -valid: - ld hl,mapwrk ; point to working drive map table - ld b,16 - 1 ; loop one less times than num entries -; - ; check that drive A: is assigned - ld a,$FF ; value that indicates unassigned - cp (hl) ; compare to A: value - jp z,errnoa ; handle failure -; -valid1: ; outer loop -; call crlf - push hl ; save pointer - push bc ; save loop control - call valid2 ; do the inner loop - pop bc ; restore loop control - pop hl ; restore pointer - jp z,errint ; validation error - ld a,4 ; 4 bytes per entry - call addhl ; bump to next entry - djnz valid1 ; loop until done - xor a ; signal OK - ret ; done -; -valid2: ; setup for inner loop - push hl ; save HL - ld a,4 ; 4 bytes per entry - call addhl ; point to entry following - pop de ; de points to comparison entry -; -valid3: ; inner loop - ; bypass unassigned drives (only need to test 1) - ld a,(hl) ; get first drive unit in A - cp $FF ; unassigned? - jr z,valid4 ; yes, skip -; - ; compare unit/slice values - ld a,(de) ; first byte to A - cp (hl) ; compare - jr nz,valid4 ; if not equal, continue loop - inc de ; bump DE to next byte - inc hl ; bump HL to next byte - ld a,(de) ; first byte to A - cp (hl) ; compare - ret z ; both bytes equal, return signalling problem - dec de ; point DE back to first byte of comparison entry - dec hl ; point HL back -; -valid4: ; no match, loop - inc hl - inc hl ; bump HL - inc hl ; ... to - inc hl ; ... next entry - or $FF ; no match - djnz valid3 ; loop as appropriate - ret -; -; Show a specific drive assignment -; -drvshow: - ld a,(dstdrv) ; get the drive num - call chkdrv ; valid drive letter? - ret nz ; abort if not - call showone ; show it - xor a ; signal success - ret ; done -; -; Delete (unassign) drive -; -drvdel: - ld a,(dstdrv) ; get the dest drive (to be unassigned) - call chkdrv ; valid drive letter? - ret nz ; abort if not - ; point to correct entry in drive map - ld hl,mapwrk ; point to working drive map - ld a,(dstdrv) ; get drive letter to remove - rlca ; calc table offset - rlca ; ... as drive num * 4 - call addhl ; get final table offset - ; wipe out the drive letter - ld a,$FF ; dev/unit := $FF (unassigned) - ld (hl),a ; do it - xor a ; zero accum - inc hl ; slice := 0 - ld (hl),a ; do it - inc hl ; DPH pointer lsb := 0 - ld (hl),a ; do it - inc hl ; DPH pointer msb := 0 - ld (hl),a ; do it - ; done - ld a,(dstdrv) ; get the destination - call showone ; show it - ld hl,modcnt ; point to mod count - inc (hl) ; increment it - xor a ; signal success - ret -; -; Swap the source and destination drive letters -; -drvswap: - ld a,(dstdrv) ; get the destination drive - call chkdrv ; valid drive? - ret nz ; abort if not - ld a,(srcdrv) ; get the source drive - call chkdrv ; valid drive? - ret nz ; abort if not - ld hl,(drives) ; load source/dest in DE - ld a,h ; put source drive num in a - cp l ; compare to the dest drive num - jp z,errswp ; Invalid swap request, src == dest -; - ; Get pointer to source drive table entry - ld hl,mapwrk - ld a,(srcdrv) - rlca - rlca - call addhl - ld (srcptr),hl -; - ; Get pointer to destination drive table entry - ld hl,mapwrk - ld a,(dstdrv) - rlca - rlca - call addhl - ld (dstptr),hl -; - ; 1) dest -> temp - ld hl,(dstptr) - ld de,tmpent - ld bc,4 - ldir -; - ; 2) source -> dest - ld hl,(srcptr) - ld de,(dstptr) - ld bc,4 - ldir -; - ; 3) temp -> source - ld hl,tmpent - ld de,(srcptr) - ld bc,4 - ldir -; - ; print the results - ld a,(dstdrv) ; get the destination - call showone ; show it - ld a,(srcdrv) ; get the source drive - call showone ; show it -; - ld hl,modcnt ; point to mod count - inc (hl) ; increment it - xor a ; signal success - ret ; exit -; -; Assign drive to specified unit/slice -; -drvmap: - ; check for UNA mode - ld a,(unamod) ; get UNA mode flag - or a ; set flags - jr nz,drvmapu ; do UNA mode drvmap -; - ; determine device code by scanning for string - ld b,16 ; device table always has 16 entries - ld c,0 ; c is used to track table entry num - ld de,tmpstr ; de points to specified device name - ld hl,devtbl ; hl points to first entry of devtbl -; -drvmap1: ; loop through device table looking for a match - push hl ; save device table entry pointer - ld a,(hl) ; dereference HL - inc hl ; ... to point to - ld h,(hl) ; ... string - ld l,a ; ... in device table - push de ; save string pointer - push bc ; save loop control stuff - call strcmp ; compare strings - pop bc ; restore loop control stuff - pop de ; restore de - pop hl ; restore table entry pointer - jr z,drvmap2 ; match, continue - inc hl ; bump to next - inc hl ; device table pointer - inc c ; keep track of table entry num - djnz drvmap1 ; and loop - jp errdev -; -drvmap2: - ; convert index to device type id - ld a,c ; index to accum - ld (device),a ; save as device id -; - ; loop thru hbios units looking for device type/unit match - ld b,$F8 ; hbios func: sysget - ld c,$10 ; sysget subfunc: diocnt - rst 08 ; call hbios, E := device count - ld b,e ; use device count for loop count - ld c,0 ; use C for device index -drvmap3: - push bc ; preserve loop control - ld b,$17 ; hbios func: diodevice - rst 08 ; call hbios, D := device, E := unit - pop bc ; restore loop control - ld a,(device) - cp d - jr nz,drvmap4 - ld a,(unit) - cp e - jr z,drvmap5 ; match, continue, C = BIOS unit -drvmap4: - ; continue looping - inc c - djnz drvmap3 - jp errdev ; invalid device specified -; -drvmap5: - ; check for valid unit (supported by BIOS) - push bc ; save unit - ld a,c ; unit to A - call chkdev ; check validity - pop bc ; restore unit - ret nz ; bail out on error - - ; resolve the CBIOS DPH table entry - ld a,(dstdrv) ; dest drv num to A - call chkdrv ; valid drive? - ret nz ; abort if invalid - ld hl,mapwrk ; point to start of drive map - rlca ; multiply by - rlca ; ... entry size of 4 - call addhl ; adjust HL to point to entry - ld (dstptr),hl ; save it -; - ; shove updated unit/slice into the entry - ld (hl),c ; save unit byte - inc hl ; bump to next byte - ld a,(slice) - ld (hl),a ; save slice -; - ; finish up - ld a,(dstdrv) ; get the destination drive - call showone ; show it's new value - ld hl,modcnt ; point to mod count - inc (hl) ; increment it - xor a ; signal success - ret ; exit -; -; UNA mode drive mapping -; -drvmapu: -; - ; verify the device nmeumonic - ld a,(unit) ; get unit specified - ld b,a ; put in b - ld d,0 ; preset type to 0 - ld c,$48 ; una func: get disk type - rst 08 ; call una, b is assumed to be untouched!!! - ld a,d ; resultant device type to a - cp $40 ; RAM/ROM - jr z,drvmapu0 ; special case for RAM/ROM - ld de,udevide ; assume IDE - cp $41 ; IDE? - jr z,drvmapu1 ; do compare - ld de,udevppide ; assume PPIDE - cp $42 ; PPIDE? - jr z,drvmapu1 ; do compare - ld de,udevsd ; assume SD - cp $43 ; SD? - jr z,drvmapu1 ; do compare - ld de,udevdsd ; assume DSD - cp $44 ; DSD? - jr z,drvmapu1 ; do compare - jp errdev ; error, invalid device name -; -drvmapu0: - ; handle RAM/ROM - ld a,(unit) ; get unit specified - ld b,a ; unit num to B - ld c,$45 ; UNA func: get disk info - ld de,$9000 ; 512 byte buffer *** FIX!!! *** - rst 08 ; call UNA - bit 7,b ; test RAM drive bit - ld de,udevrom ; assume ROM - jr z,drvmapu1 ; do compare - ld de,udevram ; assume RAM - jr drvmapu1 ; do compare - jp errdev ; error, invalid device name -; -drvmapu1: - ld hl,tmpstr ; point HL to specified device name - call strcmp ; compare - jp nz,errdev ; no match, invalid device name -; - ; check for valid unit (supported by BIOS) - ld a,(unit) ; get specified unit - call chkdevu ; check validity - jp nz,errdev ; invalid device specified -; - ; resolve the CBIOS DPH table entry - ld a,(dstdrv) ; dest drv num to A - call chkdrv ; valid drive? - ret nz ; abort if invalid - ld hl,mapwrk ; point to start of drive map - rlca ; multiply by - rlca ; ... entry size of 4 - call addhl ; adjust HL to point to entry - ld (dstptr),hl ; save it -; - ; shove updated unit/slice into the entry - ld a,(unit) ; get specified unit - ld (hl),a ; save it - inc hl ; next byte is slice - ld a,(slice) ; get specified slice - ld (hl),a ; save it -; - ; finish up - ld a,(dstdrv) ; get the destination drive - call showone ; show it's new value - ld hl,modcnt ; point to mod count - inc (hl) ; increment it - xor a ; signal success - ret -; -; Display all active drive letter assignments -; -showall: - ld b,16 ; 16 drives possible - ld c,0 ; map index (drive letter) -; - ld a,b ; load count - or $FF ; signal no action - ret z ; bail out if zero -; -showall1: ; loop - ld a,c ; - push bc ; save loop control - call showass - pop bc ; restore loop control - inc c - djnz showall1 - or $FF - ret -; -; Display drive letter assignment IF it is assigned -; Drive num in A -; -showass: -; - ; setup HL to point to desired entry in table - ld c,a ; save incoming drive in C - ld hl,mapwrk ; HL = address of drive map - rlca - rlca - call addhl ; HL = address of drive map table entry - ld a,(hl) ; get unit value - cp $FF ; compare to unassigned value - ld a,c ; recover original drive num - ret z ; bail out if unassigned drive - ; fall thru to display drive -; -; Display drive letter assignment for the drive num in A -; -showone: -; - push af ; save the incoming drive num -; - call crlf ; formatting -; - ld de,indent ; indent - call prtstr ; ... to look nice -; - ; setup HL to point to desired entry in table - pop af - push af - ld hl,mapwrk ; HL = address of drive map - rlca - rlca - call addhl ; HL = address of drive map table entry - pop af -; - ; render the drive letter based on table index - add a,'A' ; convert to alpha - call prtchr ; print it - ld a,':' ; conventional color after drive letter - call prtchr ; print it - ld a,'=' ; use '=' to represent assignment - call prtchr ; print it -; - ; render the map entry - ld a,(hl) ; load unit - cp $FF ; empty? - ret z ; yes, bypass - push hl ; preserve HL - call prtdev ; print device mnemonic - ld a,':' ; colon for device/unit format - call prtchr ; print it - pop hl ; recover HL - inc hl ; point to slice num - ld a,(hl) ; load slice num - call prtdecb ; print it -; - ret -; -; Force BDOS to reset (logout) all drives -; -drvrst: - ld c,$0D ; BDOS Reset Disk function - call bdos ; do it -; - ld c,$25 ; BDOS Reset Multiple Drives - ld de,$FFFF ; all drives - call bdos ; do it -; - xor a ; signal success - ret -; -; Print device mnemonic based on device number in A -; -prtdev: - ld e,a ; stash incoming device num in E - ld a,(unamod) ; get UNA mode flag - or a ; set flags - ld a,e ; put device num back - jr nz,prtdevu ; print device in UNA mode - ld b,$17 ; hbios func: diodevice - ld c,a ; unit to C - rst 08 ; call hbios, D := device, E := unit - push de ; save results - ld a,d ; device to A - and $0F ; mask out undesired bits - push hl ; save HL - add a,a ; multiple A by two for word table - ld hl,devtbl ; point to start of device name table - call addhl ; add A to hl to point to table entry - ld a,(hl) ; dereference hl to loc of device name string - inc hl ; ... - ld d,(hl) ; ... - ld e,a ; ... - call prtstr ; print the device nmemonic - pop hl ; restore HL - pop de ; get device/unit data back - ld a,e ; device id to a - call prtdecb ; print it - ret ; done -; -prtdevu: - push bc - push de - push hl -; - ; UNA mode version of print device - ld b,a ; B := unit num - push bc ; save for later - ld c,$48 ; UNA func: get disk type - rst 08 ; call UNA - ld a,d ; disk type to A - pop bc ; get unit num back in C -; - ; pick string based on disk type - cp $40 ; RAM/ROM? - jr z,prtdevu1 ; if so, handle it - cp $41 ; IDE? - ld de,udevide ; load string - jr z,prtdevu2 ; if IDE, print and return - cp $42 ; PPIDE? - ld de,udevppide ; load string - jr z,prtdevu2 ; if PPIDE, print and return - cp $43 ; SD? - ld de,udevsd ; load string - jr z,prtdevu2 ; if SD, print and return - cp $44 ; DSD? - ld de,udevdsd ; load string - jr z,prtdevu2 ; if DSD, print and return - ld de,udevunk ; load string for unknown - jr prtdevu2 ; and print it -; -prtdevu1: - ; handle RAM/ROM - push bc ; save unit num - ld c,$45 ; UNA func: get disk info - ld de,$9000 ; 512 byte buffer *** FIX!!! *** - rst 08 ; call UNA - bit 7,b ; test RAM drive bit - pop bc ; restore unit num - ld de,udevrom ; load string - jr z,prtdevu2 ; print and return - ld de,udevram ; load string - jr prtdevu2 ; print and return -; -prtdevu2: - call prtstr ; print the device nmemonic - ld a,b ; get the unit num back - call prtdecb ; append it - pop hl - pop de - pop bc - ret -; -; Check that specified drive num is valid -; -chkdrv: - cp 16 ; max of 16 drive letters - jp nc,errdrv ; handle bad drive - cp a ; set Z to signal good - ret ; and return -; -; Check that the unit value in A is valid -; according to active BIOS support. -; -; -chkdev: ; HBIOS variant - push af ; save incoming unit - ld b,$F8 ; hbios func: sysget - ld c,$10 ; sysget subfunc: diocnt - rst 08 ; call hbios, E := device count - pop af ; restore incoming unit - cp e ; compare to unit count - jp nc,errdev ; if too high, error -; - ; get device/unit info - ld b,$17 ; hbios func: diodevice - ld c,a ; unit to C - rst 08 ; call hbios, C := device attributes -; - ; check slice support - bit 5,c ; high capacity device? - jr z,chkdev1 ; if not high cap, check slice val - xor a ; otherwise, signal OK - ret -; -chkdev1: ; not a hard disk, make sure slice == 0 - ld a,(slice) ; get specified slice - or a ; set flags - jp nz,errslc ; invalid slice error - xor a ; signal OK - ret -; -chkdevu: ; UNA variant - ld b,a ; put in b - ld d,0 ; preset type to 0 - ld c,$48 ; una func: get disk type - rst 08 ; call una - ld a,d ; resultant device type to a - or a ; set flags - jp z,errdev ; invalid if 0 -; - ; check for slice support, if required - cp $40 ; ram/rom? - jr z,chkdevu1 ; yes, check for slice -; cp $?? ; floppy? -; jr z,chkdevu1 ; yes, check for slice - xor a ; otherwise signal success - ret ; and return -; -chkdevu1: - ld a,(slice) ; get specified slice - or a ; set flags - jp nz,errslc ; invalid slice error - xor a ; otherwise, signal OK - ret ; and return -; -; Print character in A without destroying any registers -; -prtchr: - push bc ; save registers - push de - push hl - ld e,a ; character to print in E - ld c,$02 ; BDOS function to output a character - call bdos ; do it - pop hl ; restore registers - pop de - pop bc - ret -; -prtdot: -; - ; shortcut to print a dot preserving all regs - push af ; save af - ld a,'.' ; load dot char - call prtchr ; print it - pop af ; restore af - ret ; done -; -; Print a zero terminated string at (HL) without destroying any registers -; -prtstr: - push de -; -prtstr1: - ld a,(de) ; get next char - or a - jr z,prtstr2 - call prtchr - inc de - jr prtstr1 -; -prtstr2: - pop de ; restore registers - ret -; -; Print the value in A in hex without destroying any registers -; -prthex: - push af ; save AF - push de ; save DE - call hexascii ; convert value in A to hex chars in DE - ld a,d ; get the high order hex char - call prtchr ; print it - ld a,e ; get the low order hex char - call prtchr ; print it - pop de ; restore DE - pop af ; restore AF - ret ; done -; -; print the hex word value in bc -; -prthexword: - push af - ld a,b - call prthex - ld a,c - call prthex - pop af - ret -; -; Convert binary value in A to ascii hex characters in DE -; -hexascii: - ld d,a ; save A in D - call hexconv ; convert low nibble of A to hex - ld e,a ; save it in E - ld a,d ; get original value back - rlca ; rotate high order nibble to low bits - rlca - rlca - rlca - call hexconv ; convert nibble - ld d,a ; save it in D - ret ; done -; -; Convert low nibble of A to ascii hex -; -hexconv: - and $0F ; low nibble only - add a,$90 - daa - adc a,$40 - daa - ret -; -; Print value of A or HL in decimal with leading zero suppression -; Use prtdecb for A or prtdecw for HL -; -prtdecb: - push hl - ld h,0 - ld l,a - call prtdecw ; print it - pop hl - ret -; -prtdecw: - push af - push bc - push de - push hl - call prtdec0 - pop hl - pop de - pop bc - pop af - ret -; -prtdec0: - ld e,'0' - ld bc,-10000 - call prtdec1 - ld bc,-1000 - call prtdec1 - ld bc,-100 - call prtdec1 - ld c,-10 - call prtdec1 - ld e,0 - ld c,-1 -prtdec1: - ld a,'0' - 1 -prtdec2: - inc a - add hl,bc - jr c,prtdec2 - sbc hl,bc - cp e - ret z - ld e,0 - call prtchr - ret -; -; Print a byte buffer in hex pointed to by DE -; Register A has size of buffer -; -prthexbuf: - or a - ret z ; empty buffer -; - ld b,a -prthexbuf1: - ld a,' ' - call prtchr - ld a,(de) - call prthex - inc de - djnz prthexbuf1 - ret -; -; Start a new line -; -crlf2: - call crlf ; two of them -crlf: - push af ; preserve AF - ld a,13 ; - call prtchr ; print it - ld a,10 ; - call prtchr ; print it - pop af ; restore AF - ret -; -; Get the next non-blank character from (HL). -; -nonblank: - ld a,(hl) ; load next character - or a ; string ends with a null - ret z ; if null, return pointing to null - cp ' ' ; check for blank - ret nz ; return if not blank - inc hl ; if blank, increment character pointer - jr nonblank ; and loop -; -; Check character at (DE) for delimiter. -; -delim: or a - ret z - cp ' ' ; blank - ret z - jr c,delim1 ; handle control characters - cp '=' ; equal - ret z - cp '_' ; underscore - ret z - cp '.' ; period - ret z - cp ':' ; colon - ret z - cp $3B ; semicolon - ret z - cp '<' ; less than - ret z - cp '>' ; greater than - ret -delim1: - ; treat control chars as delimiters - xor a ; set Z - ret ; return -; -; Get alpha chars and save in tmpstr -; return with terminating char in A and flags set -; return with num chars in B -; -getalpha: -; - ld de,tmpstr ; location to save chars - ld b,0 ; length counter -; -getalpha1: - ld a,(hl) ; get active char - cp 'A' ; check for start of alpha range - jr c,getalpha2 ; not alpha, get out - cp 'Z' + 1 ; check for end of alpha range - jr nc,getalpha2 ; not alpha, get out - ; handle alpha char - inc hl ; increment buffer ptr - ld (de),a ; save it - inc de ; inc string pointer - inc b ; inc string length - ld a,b ; put length in A - cp 8 ; max length? - jr z,getalpha2 ; if max, get out - jr getalpha1 ; and loop -; -getalpha2: ; non-alpha, clean up and return - xor a ; clear accum - ld (de),a ; terminate string - ld a,(hl) ; recover terminating char - or a ; set flags - ret ; and done -; -; Get numeric chars and convert to number returned in A -; Carry flag set on overflow -; -getnum: - ld c,0 ; C is working register -getnum1: - ld a,(hl) ; get the active char - cp '0' ; compare to ascii '0' - jr c,getnum2 ; abort if below - cp '9' + 1 ; compare to ascii '9' - jr nc,getnum2 ; abort if above\ -; - ; valid digit, add new digit to C - ld a,c ; get working value to A - rlca ; multiply by 10 - ret c ; overflow, return with carry set - rlca ; ... - ret c ; overflow, return with carry set - add a,c ; ... - ret c ; overflow, return with carry set - rlca ; ... - ret c ; overflow, return with carry set - ld c,a ; back to C - ld a,(hl) ; get new digit - sub '0' ; make binary - add a,c ; add in working value - ret c ; overflow, return with carry set - ld c,a ; back to C -; - inc hl ; bump to next char - jr getnum1 ; loop -; -getnum2: ; return result - ld a,c ; return result in A - or a ; with flags set, CF is cleared - ret -; -; Compare null terminated strings at HL & DE -; If equal return with Z set, else NZ -; -strcmp: -; - ld a,(de) ; get current source char - cp (hl) ; compare to current dest char - ret nz ; compare failed, return with NZ - or a ; set flags - ret z ; end of string, match, return with Z set - inc de ; point to next char in source - inc hl ; point to next char in dest - jr strcmp ; loop till done -; -; Invoke CBIOS function -; The CBIOS function offset must be stored in the byte -; following the call instruction. ex: -; call cbios -; .db $0C ; offset of CONOUT CBIOS function -; -cbios: - ex (sp),hl - ld a,(hl) ; get the function offset - inc hl ; point past value following call instruction - ex (sp),hl ; put address back at top of stack and recover HL - ld hl,(bioloc) ; address of CBIOS function table to HL - call addhl ; determine specific function address - jp (hl) ; invoke CBIOS -; -; Routine to call CPM3 BIOS routines via BDOS -; function 50. -; -xbios: - ld (biofnc),a ; set BIOS function - ld c,50 ; direct BIOS call function - ld (dereg),de ; set DE parm - ld de,biospb ; BIOS parameter block - jp bdos ; invoke BDOS -; -biospb: -biofnc .db 0 ; BIOS function -areg .db 0 ; A register -bcreg .dw 0 ; BC register -dereg .dw 0 ; DE register -hlreg .dw 0 ; HL register -; -; Add the value in A to HL (HL := HL + A) -; -addhl: - add a,l ; A := A + L - ld l,a ; Put result back in L - ret nc ; if no carry, we are done - inc h ; if carry, increment H - ret ; and return -; -; Jump indirect to address in HL -; -jphl: - jp (hl) -; -; Errors -; -erruse: ; command usage error (syntax) - ld de,msguse - jr err -; -errprm: ; command parameter error (syntax) - ld de,msgprm - jr err -; -errinv: ; invalid CBIOS, zp signature not found - ld de,msginv - jr err -; -errver: ; CBIOS version is not as expected - ld de,msgver - jr err -; -errdrv: ; Invalid drive letter specified - push af - call crlf - ld de,msgdrv1 - call prtstr - pop af - add a,'A' - call prtchr - ld de,msgdrv2 - jr err1 -; -errswp: ; invalid drive swap request - ld de,msgswp - jr err -; -errdev: ; invalid device name - ld de,msgdev - jr err -; -errslc: ; invalid slice - ld de,msgslc - jr err -; -errtyp: ; invalid device assignment request (not a hard disk device type) - ld de,msgtyp - jr err -; -errnum: ; invalid number parsed, overflow - ld de,msgnum - jr err -; -errint: ; DPH table integrity error (multiple drives ref one filesystem) - ld de,msgint - jr err -; -errnoa: ; No A: drive assignment - ld de,msgnoa - jr err -; -errovf: ; CBIOS disk buffer overflow - ld de,msgovf - jr err -; -errdos: ; handle BDOS errors - push af ; save return code - call crlf ; newline - ld de,msgdos ; load - call prtstr ; and print error string - pop af ; recover return code - call prthex ; print error code - jr err2 -; -err: ; print error string and return error signal - call crlf2 ; print double newline -; -err1: ; without the leading crlf - call prtstr ; print error string -; -err2: ; without the string -; call crlf ; print newline - or $FF ; signal error - ret ; done -; -;=============================================================================== -; Storage Section -;=============================================================================== -; -; -bioloc .dw 0 ; CBIOS starting address -bioend .dw 0 ; CBIOS ending address -biosiz .dw 0 ; CBIOS size (in bytes) -maploc .dw 0 ; location of CBIOS drive map table -dpbloc .dw 0 ; location of CBIOS DPB map table -cpmver .dw 0 ; CP/M version -drvtbl .dw 0 ; CP/M 3 drive table address -dphadr .dw 0 ; CP/M 3 working value for DPH -; -drives: -dstdrv .db 0 ; destination drive -srcdrv .db 0 ; source drive -device .db 0 ; source device -unit .db 0 ; source unit -slice .db 0 ; source slice -; -unamod .db 0 ; $FF indicates UNA UBIOS active -modcnt .db 0 ; count of drive map modifications -; -srcptr .dw 0 ; source pointer for copy -dstptr .dw 0 ; destination pointer for copy -tmpent .fill 4,0 ; space to save a table entry -tmpstr .fill 9,0 ; temporary string of up to 8 chars, zero term -; -heaptop .dw 0 ; current address of top of heap memory -heaplim .dw 0 ; heap limit address -; -dirbuf .dw 0 ; directory buffer location -; -scbpb: ; BDOS SCB get/set parm block -scboff .db $54 ; media open door flag -scbop .db $FF ; set a byte -scbval .dw $FF ; value to set -; -mapwrk .fill (4 * 16),$FF ; working copy of drive map -; -devtbl: ; device table - .dw dev00, dev01, dev02, dev03 - .dw dev04, dev05, dev06, dev07 - .dw dev08, dev09, dev10, dev11 - .dw dev12, dev13, dev14, dev15 -; -devunk .db "?",0 -dev00 .db "MD",0 -dev01 .db "FD",0 -dev02 .db "RAMF",0 -dev03 .db "IDE",0 -dev04 .db "ATAPI",0 -dev05 .db "PPIDE",0 -dev06 .db "SD",0 -dev07 .db "PRPSD",0 -dev08 .db "PPPSD",0 -dev09 .db "HDSK",0 -dev10 .db "PPA",0 -dev11 .db "IMM",0 -dev12 .db "SYQ",0 -dev13 .db "CHUSB",0 -dev14 .db "CHSD",0 -dev15 .equ devunk -; -devcnt .equ 10 ; 10 devices defined -; -udevram .db "RAM",0 -udevrom .db "ROM",0 -udevide .db "IDE",0 -udevppide .db "PPIDE",0 -udevsd .db "SD",0 -udevdsd .db "DSD",0 -udevunk .db "UNK",0 -; -stksav .dw 0 ; stack pointer saved at start -xstksav .dw 0 ; temp stack save for error recovery - .fill stksiz,0 ; stack -stack .equ $ ; stack top -; -; Messages -; -indent .db " ",0 -msgban1 .db "ASSIGN v1.8 for RomWBW CP/M ",0 -msg22 .db "2.2",0 -msg3 .db "3",0 -msbban2 .db ", 13-Oct-2023",0 -msghb .db " (HBIOS Mode)",0 -msgub .db " (UBIOS Mode)",0 -msgban3 .db "Copyright 2023, Wayne Warthen, GNU GPL v3",0 -msguse .db "Usage: ASSIGN D:[=[{D:|[]:[]}]][,...]",13,10 - .db " ex. ASSIGN (display all active assignments)",13,10 - .db " ASSIGN /? (display version and usage)",13,10 - .db " ASSIGN /L (display all possible devices)",13,10 - .db " ASSIGN C:=D: (swaps C: and D:)",13,10 - .db " ASSIGN C:=FD0: (assign C: to floppy unit 0)",13,10 - .db " ASSIGN C:=IDE0:1 (assign C: to IDE unit0, slice 1)",13,10 - .db " ASSIGN C:= (unassign C:)",0 -msgprm .db "Parameter error (ASSIGN /? for usage)",0 -msginv .db "Unexpected CBIOS (signature missing)",0 -msgver .db "Unexpected CBIOS version",0 -msgdrv1 .db "Invalid drive letter (",0 -msgdrv2 .db ":)",0 -msgswp .db "Invalid drive swap request",0 -msgdev .db "Invalid device name (ASSIGN /L for device list)",0 -msgslc .db "Specified device does not support slices",0 -msgnum .db "Unit or slice number invalid",0 -msgovf .db "Disk buffer exceeded in CBIOS, aborted",0 -msgtyp .db "Only hard drive devices can be reassigned",0 -msgint .db "Multiple drive letters reference one filesystem, aborting!",0 -msgnoa .db "Drive A: is unassigned, aborting!",0 -msgdos .db "DOS error, return code=0x",0 -msgmem .db " Disk Buffer Bytes Free",0 -; -modsize .equ $ - start -; - .end diff --git a/Source/Apps/assign/Build.cmd b/Source/Apps/assign/Build.cmd new file mode 100644 index 00000000..25dd7385 --- /dev/null +++ b/Source/Apps/assign/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF assign.asm assign.com assign.lst || exit /b + +copy /Y assign.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/assign/Clean.cmd b/Source/Apps/assign/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/assign/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/assign/Makefile b/Source/Apps/assign/Makefile new file mode 100644 index 00000000..597d0cee --- /dev/null +++ b/Source/Apps/assign/Makefile @@ -0,0 +1,7 @@ +OBJECTS = assign.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/assign/assign.asm b/Source/Apps/assign/assign.asm new file mode 100644 index 00000000..8ba6f9f5 --- /dev/null +++ b/Source/Apps/assign/assign.asm @@ -0,0 +1,1972 @@ +;=============================================================================== +; ASSIGN - Display and/or modify drive letter assignments +; +;=============================================================================== +; +; Author: Wayne Warthen (wwarthen@gmail.com) +;_______________________________________________________________________________ +; +; Usage: +; ASSIGN D:[=[{D:|[]:[]}]][,...] +; ex: ASSIGN (display all active drive assignments) +; ASSIGN /? (display version and usage) +; ASSIGN /L (display all possible devices) +; ASSIGN C:=D: (swaps C: and D:) +; ASSIGN C:=FD0: (assign C: to floppy unit 0) +; ASSIGN C:=IDE0:1 (assign C: to IDE unit0, slice 1) +; ASSIGN C:= (unassign C:) +;_______________________________________________________________________________ +; +; Change Log: +; 2016-03-21 [WBW] Updated for HBIOS 2.8 +; 2016-04-08 [WBW] Determine key memory addresses dynamically +; 2019-08-07 [WBW] Fixed DPB selection error +; 2019-11-17 [WBW] Added preliminary CP/M 3 support +; 2019-12-24 [WBW] Fixed location of BIOS save area +; 2020-04-29 [WBW] Updated for larger DPH (16 -> 20 bytes) +; 2020-05-06 [WBW] Add patch level to version compare +; 2020-05-10 [WBW] Set media change flag in XDPH for CP/M 3 +; 2020-05-12 [WBW] Back out media change flag +; 2021-12-06 [WBW] Fix inverted ROM/RAM DPB mapping in buffer alloc +; 2022-02-28 [WBW] Use HBIOS to swap banks under CP/M 3 +; Use CPM3 BDOS direct BIOS call to get DRVTBL adr +; 2023-06-19 [WBW] Update for revised DIODEVICE API +; 2023-09-19 [WBW] Added CHUSB & CHSD device support +; 2023-10-13 [WBW] Fixed DPH creation to select correct DPB +;_______________________________________________________________________________ +; +; ToDo: +; 1) ASSIGN C: causes drive map to be reinstalled unnecessarily +;_______________________________________________________________________________ +; +;=============================================================================== +; Definitions +;=============================================================================== +; +stksiz .equ $40 ; Working stack size +; +restart .equ $0000 ; CP/M restart vector +bdos .equ $0005 ; BDOS invocation vector +bnksel .equ $FFF3 ; HBIOS bank select vector +; +stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp +; +#include "../../ver.inc" +; +;=============================================================================== +; Code Section +;=============================================================================== +; + .org $100 +; + ; relocate to high memory + ld hl,image + ld de,$8000 + ld bc,modsize + ldir + jp start +; +image .equ $ +; + .org $8000 +; +start: +; + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack +; + ; initialization + call init ; initialize + jr nz,exit ; abort if init fails +; + ; do the real work + call process ; parse and process command line + jr nz,exit ; done if error or no action +; + ; perform table integrity check + call valid + jr nz,exit +; + ; install the new drive map if changes were made + ld a,(modcnt) ; get the mod count + or a ; set flags + call nz,install ; install new drive map +; +exit: ; clean up and return to command processor + call crlf ; formatting + ld sp,(stksav) ; restore stack + jp restart ; return to CP/M via restart + ret ; return to CP/M w/o restart +; +; Initialization +; +init: +; + ; locate start of cbios (function jump table) + ld hl,(restart+1) ; load address of CP/M restart vector + ld de,-3 ; adjustment for start of table + add hl,de ; HL now has start of table + ld (bioloc),hl ; save it +; + ; get CP/M version and save it + ld c,$0C ; function number + call bdos ; do it, HL := version + ld (cpmver),hl ; save it + ;push hl ; *debug* + ;pop bc ; *debug* + ;call prthexword ; *debug* + ;ld a,l ; low byte + ;cp $30 ; CP/M 3.0? +; + ; get location of config data and verify integrity + ld hl,stamp ; HL := adr or RomWBW zero page stamp + ld a,(hl) ; get first byte of RomWBW marker + cp 'W' ; match? + jp nz,errinv ; abort with invalid config block + inc hl ; next byte (marker byte 2) + ld a,(hl) ; load it + cp ~'W' ; match? + jp nz,errinv ; abort with invalid config block + inc hl ; next byte (major/minor version) + ld a,(hl) ; load it + cp RMJ << 4 | RMN ; match? + jp nz,errver ; abort with invalid os version + inc hl ; next byte (update/patch) + ld a,(hl) ; load it + and $F0 ; eliminate patch num + cp RUP << 4 ; match? + jp nz,errver ; abort with invalid os version + inc hl ; bump past version info +; + ; dereference HL to point to CBIOS extension data + ld a,(hl) ; dereference HL + inc hl ; ... to point to + ld h,(hl) ; ... ROMWBW config data block + ld l,a ; ... in CBIOS +; + ; skip device map address + inc hl ; bump two bytes + inc hl ; ... past device map address entry +; + ; get location of drive map + ld e,(hl) ; dereference HL + inc hl ; ... into DE to get + ld d,(hl) ; ... drive map pointer + inc hl ; skip past drive map pointer + ld (maploc),de ; and save it +; + ; get location of dpbmap + ld e,(hl) ; dereference HL + inc hl ; ... into DE to get + ld d,(hl) ; ... DPB map pointer + ld (dpbloc),de ; and save it +; + ; test for CP/M 3 and branch if so + ld a,(cpmver) ; low byte of cpm version + cp $30 ; CP/M 3.0? + jp nc,initcpm3 ; handle CP/M 3.0 or greater +; + ; make a local working copy of the drive map + ld hl,(maploc) ; copy from CBIOS drive map + ld de,mapwrk ; copy to working drive map + dec hl ; point to entry count + ld a,(hl) ; get entry count + inc hl ; restore hl pointer to drive map start + add a,a ; multiple a by + add a,a ; ... size of entries (4 bytes each) + ld c,a ; set BC := 0A + ld b,0 ; ... so BC is length to copy + ldir ; do the copy +; + ; determine end of CBIOS (assume HBIOS for now) + ld hl,($FFFE) ; get proxy start address + ld (bioend),hl ; save as CBIOS end address +; + ; check for UNA (UBIOS) + ld a,($FFFD) ; fixed location of UNA API vector + cp $C3 ; jp instruction? + jr nz,initx ; if not, not UNA + ld hl,($FFFE) ; get jp address + ld a,(hl) ; get byte at target address + cp $FD ; first byte of UNA push ix instruction + jr nz,initx ; if not, not UNA + inc hl ; point to next byte + ld a,(hl) ; get next byte + cp $E5 ; second byte of UNA push ix instruction + jr nz,initx ; if not, not UNA + ld hl,unamod ; point to UNA mode flag + ld (hl),$FF ; set UNA mode flag + ld c,$F1 ; UNA func: Get HMA + rst 08 ; call UNA, HL := UNA proxy start address + ld (bioend),hl ; save as CBIOS end address +; +initx: + ; compute size of CBIOS + ld hl,(bioend) ; HL := end address + ld de,(bioloc) ; DE := starting address + xor a ; clear carry + sbc hl,de ; subtract to get size in HL + ld (biosiz),hl ; and save it +; + ; establish heap limit + ld hl,(bioend) ; HL := end of CBIOS address + ld de,-$40 ; allow 40 bytes for CBIOS stack + add hl,de ; adjust + ld (heaplim),hl ; save it +; +#if 0 + ld a,' ' + call crlf + ld bc,(bioloc) + call prthexword + call prtchr + ld bc,(bioend) + call prthexword + call prtchr + ld bc,(maploc) + call prthexword + call prtchr + ld bc,(heaplim) + call prthexword + +#endif +; + ; return success + xor a ; signal success + ret ; return +; +; CP/M 3 initialization +; +initcpm3: + ld a,22 ; XBIOS DRVTBL function + call xbios ; Invoke XBIOS + ld (drvtbl),hl ; save DRVTBL address +; +; The CP/M 3 drvtbl is in common memory, but the XDPHs are not. +; So, here we temporarily swap the bank to the CP/M 3 system +; bank. We cannot use the CP/M Direct BIOS call because it +; explicitly blocks use of SELMEM, so we are forced to use +; HBIOS call. The CP/M 3 system bank is always the HBIOS +; user bank. +; + ; switch to sysbnk + ld a,($FFE0) ; get current bank + push af ; save it + ld bc,$F8F2 ; HBIOS Get Bank Info + rst 08 ; call HBIOS, E=User Bank + ld a,e ; HBIOS User Bank + call bnksel ; HBIOS BNKSEL +; + ; copy CP/M 3 drvtbl to drvmap working copy + ld hl,(drvtbl) ; get drive table in HL + ld de,mapwrk ; DE := working drive map + ld b,16 +initc2: + push hl ; save drvtbl entry adr + ld a,(hl) ; deref HL to get DPH adr + inc hl ; ... + ld h,(hl) ; ... + ld l,a ; ... + ld a,l ; check for + or h ; ... zero + jr nz,initc3 ; if not zero, copy entry + inc de ; ... else bump past unit field + jr initc4 ; ... and continue without copying +initc3: + dec hl ; back up to + dec hl ; ... unit + ld a,(hl) ; get unit from drvtbl + ld (de),a ; save unit to drvmap + inc hl ; bump to slice + inc de ; bump to slice + ld a,(hl) ; get slice from drvtbl + ld (de),a ; save slice to drvmap +initc4: + inc de ; bump past slice + inc de ; skip + inc de ; ... dph + pop hl ; back to drvtbl entry + inc hl ; bump to + inc hl ; ... next drvtbl entry + djnz initc2 +; + ; switch back to tpabnk + pop af ; recover prev bank + call bnksel ; HBIOS BNKSEL +; + ; return success + xor a ; signal success + ret ; return +; +; Process command line +; +process: +; + ; look for start of parms + ld hl,$81 ; point to start of parm area (past len byte) + call nonblank ; skip to next non-blank char + jp z,showall ; no parms, show all active assignments +; + ; check for special option, introduced by a "/" + cp '/' ; start of usage request? + jp z,option ; yes, handle option +; +process0: +; + sub 'A' ; make it binary + ld (dstdrv),a ; save it as destination drive + inc hl ; next char + ld a,(hl) ; get it + cp ':' ; is it ':' as expected? + jp nz,errprm ; error if not + inc hl ; skip ':' + call nonblank ; skip possible blanks + cp '=' ; proper delimiter? + jr z,process1 ; yes, continue + + ld de,drvshow ; show the drive + ld a,(dstdrv) ; load the drive + jr process4 ; do it +; +process1: ; handle other side of '=' +; + inc hl ; skip '=' + call nonblank ; skip blanks as needed + ld de,drvdel ; assume a drive delete + jp z,process4 ; continue to processing + cp ',' ; comma? + jp z,process4 ; continue to processing + call getalpha ; gobble all alpha characters + dec b ; decrement num chars parsed + jr nz,process2 ; more than 1 char, handle as device name +; + ; handle as drive swap + cp ':' ; check for mandatory trailing colon + jp nz,errprm ; handle unexpected character + inc hl ; skip ':' + ld a,(tmpstr) ; get the drive letter + sub 'A' ; make it binary + ld (srcdrv),a ; assume it is a src drv and save it + ld de,drvswap ; put routine to call in DE + jr process4 ; and continue +; +process2: ; handle a device/slice assignment +; + call getnum ; get number from buffer + jp c,errnum ; abort on overflow + cp 16 ; compare to max + jp nc,errnum ; abort if too high + ld (unit),a ; save it as unit num + ld a,(hl) ; get terminating char + cp ':' ; check for mandatory colon + jp nz,errprm ; handle unexpected character + inc hl ; skip past colon + call getnum ; get number from buffer + jp c,errnum ; abort on overflow + ld (slice),a ; save it as slice num + ld de,drvmap ; put routine to call in DE + jr process4 ; and continue +; +process4: ; check for terminating null or comma +; + call nonblank ; skip possible blanks + jr z,process5 ; null terminator OK + cp ',' ; check for comma + jr z,process5 ; also OK + jp errprm ; otherwise parm error +; +process5: ; do the processing +; + ex de,hl ; move routine to call to HL + push de ; save command string pointer + call jphl ; do the work + pop hl ; recover command string pointer + ret nz ; abort on error + ld a,(hl) ; get the current cmd string char + or a ; set flags + ret z ; if null, we are done + inc hl ; otherwise, skip comma + call nonblank ; and possible blanks after comma + ret z ; get out if nothing more + jp process0 ; we have more work, loop +; +; Handle special options +; +option: +; + inc hl ; next char + ld a,(hl) ; get it + cp '?' ; is it a '?' as expected? + jp z,usage ; yes, display usage + cp 'L' ; is it a 'L', display device list? + jp z,devlist ; yes, display device list + jp errprm ; anything else is an error +; +usage: +; + call crlf ; formatting + ld de,msgban1 ; point to version message part 1 + call prtstr ; print it + ld de,msg22 ; assume CP/M 2.2 + ld a,(cpmver) ; low byte of ver + cp $30 ; CP/M 3.0? + jp c,usage1 ; if not, jump ahead + ld de,msg3 ; CP/M 3 +usage1: + call prtstr + ld de,msbban2 ; next portion of banner + call prtstr + ld a,(unamod) ; get UNA flag + or a ; set flags + ld de,msghb ; point to HBIOS mode message + call z,prtstr ; if not UNA, say so + ld de,msgub ; point to UBIOS mode message + call nz,prtstr ; if UNA, say so + call crlf ; formatting + ld de,msgban3 ; point to version message part 2 + call prtstr ; print it + call crlf2 ; blank line + ld de,msguse ; point to usage message + call prtstr ; print it + or $FF ; signal no action performed + ret ; and return +; +devlist: +; + ld a,(unamod) ; get UNA mode flag + or a ; set flags + jr nz,devlstu ; do UNA mode dev list +; + ld b,$F8 ; hbios func: sysget + ld c,$10 ; sysget subfunc: diocnt + rst 08 ; call hbios, E := device count + ld b,e ; use device count for loop count + ld c,0 ; use C for device index +devlist1: + call crlf ; formatting + ld de,indent ; indent + call prtstr ; ... to look nice + push bc ; preserve loop control + ld a,c ; device to A + call prtdev ; print device mnemonic + ld a,':' ; colon for device/unit format + call prtchr ; print it + pop bc ; restore loop control + inc c ; next device index + djnz devlist1 ; loop as needed + or $FF ; signal no action taken + ret ; done +; +devlstu: + ; UNA mode device list + ld b,0 ; use unit 0 to get count + ld c,$48 ; una func: get disk type + ld l,0 ; preset unit count to zero + rst 08 ; call una, b is assumed to be untouched!!! + ld a,l ; unit count to a + or a ; set flags + ret z ; no units, return + ld b,l ; unit count to b + ld c,0 ; init unit index +devlstu1: + call crlf ; formatting + ld de,indent ; indent + call prtstr ; ... to look nice + push bc ; save loop control vars + ld a,c ; put unit num in A + push af ; save it + call prtdevu ; print the device name + pop af ; restore unit num + call prtdecb ; print unit num + ld a,':' ; colon delimiter + call prtchr ; print it + pop bc ; restore loop control + inc c ; next drive + djnz devlstu1 ; loop as needed + ret ; return +; +; Install the new drive map into CBIOS +; +install: + ld a,(cpmver) ; low byte of CP/M version + cp $30 ; CP/M 3.0? + jp nc,instcpm3 ; handle CP/M 3.0 or greater +; + ; capture CBIOS snapshot and stack frame for error recovery + ld hl,(bioloc) ; start of CBIOS + ld de,$1000 ; save it here + ld bc,(biosiz) ; size of CBIOS + ldir ; save it + ld (xstksav),sp ; save stack frame + ; clear CBIOS buffer area + ld hl,(maploc) ; start fill at drive map + ld a,(bioend + 1) ; msb of CBIOS end address to A +install1: + ld e,0 ; fill with null + ld (hl),e ; fill next byte + inc hl ; point to next byte + cp h ; is H == msb of CBIOS end address? + jr nz,install1 ; if not, loop +; + ; determine the drive map entry count + ld hl,mapwrk + ld c,0 + ld b,16 +install2: + ld a,$FF + cp (hl) + jr z,install3 + ld e,c ; remember high water mark +install3: + inc hl + inc hl + inc hl + inc hl + inc c + djnz install2 + inc e ; convert from max value to count +; + ; record entry count in CBIOS + ld hl,(maploc) ; start of map + dec hl ; backup to entry count + ld (hl),e ; record count +; + ; copy map + ld a,e ; A := entry count + add a,a ; multiply by size + add a,a ; ... of entry (4 bytes) + ld c,a ; put in C for count + ld b,0 ; msb of count is always zero + ld hl,mapwrk ; source of copy is work map + ld de,(maploc) ; target is CBIOS map loc + ldir ; do it +; + ; set start of memory allocation heap + ld (heaptop),de ; DE has next byte available +; + ; allocate directory buffer + ld hl,128 ; size of directory buffer + call alloc ; allocate the space + jp c,instovf ; handle overflow error + ld (dirbuf),hl ; ... and save in dirbuf +; +dph_init: +; +; iterate through drive map to build dph entries dynamically +; + ; setup for dph build loop + ld hl,(maploc) ; point to drive map + dec hl ; backup to entry count + ld b,(hl) ; loop drvcnt times + ld c,0 ; drive index + inc hl ; bump to start of drive map +; +dph_init1: + ; no DPH if drive not assigned + ld a,(hl) + cp $FF + jr nz,dph_init2 + ld de,0 ; not assigned, use DPH pointer of zero + jr dph_init3 +; +dph_init2: + ld a,(hl) ; unit to A + push bc ; save loop control + push hl ; save drive map pointer + ;ld hl,16 ; size of a DPH structure + ld hl,20 ; size of a DPH structure + call alloc ; allocate space for dph + jp c,instovf ; handle overflow error + push hl ; save DPH location + push hl ; move DPH location + pop de ; ... to DE + call makdph ; make the DPH, unit in A from above + pop de ; restore DPH pointer to DE + pop hl ; restore drive map pointer to HL + pop bc ; restore loop control +; +dph_init3: + inc hl ; bump to slice loc + inc hl ; bump to DPH pointer lsb + ld (hl),e ; save lsb + inc hl ; bump to DPH pointer msb + ld (hl),d ; save msb + inc hl ; bump to start of next drive map entry + inc c ; next drive index + djnz dph_init1 ; loop as needed +; + ; display free memory + call crlf2 + ld de,indent + call prtstr + ld hl,(heaplim) ; subtract high water + ld de,(heaptop) ; ... from top of cbios + or a ; ... with cf clear + sbc hl,de ; ... so hl gets bytes free + call prtdecw ; print it + ld de,msgmem ; add description + call prtstr ; and print it +; + call drvrst ; perform BDOS drive reset +; + xor a ; signal success + ret ; done +; +makdph: +; +; make a dph at address in de for dev/unit in a +; + push de ; save incoming dph address +; + ld c,a ; save incoming dev/unit + ld a,(unamod) ; get UNA mode flag + or a ; set flags + ld a,c ; restore incoming dev/unit + jr nz,makdphuna ; do UNA mode + jr makdphwbw ; do WBW mode +; +makdphuna: ; determine appropriate dpb (WBW mode) + ld b,a ; unit num to b + ld c,$48 ; una func: get disk type + rst 08 ; call una + ld a,d ; move disk type to a +; + ; derive dpb address based on disk type + cp $40 ; ram/rom drive? + jr z,makdphuna1 ; handle ram/rom drive if so +; cp $?? ; floppy drive? +; jr z,xxxxx ; handle floppy + ld e,4 ; assume hard disk + jr makdph0 ; continue +; +makdphuna1: ; handle ram/rom + ld c,$45 ; una func: get disk info + ld de,$9000 ; 512 byte buffer *** fix!!! *** + rst 08 ; call una + bit 7,b ; test ram drive bit + ld e,1 ; assume rom + jr z,makdph0 ; not set, rom drive, continue + ld e,2 ; otherwise, must be ram drive + jr makdph0 ; continue +; +makdphwbw: ; determine appropriate dpb (WBW mode, unit number in A) +; + ld c,a ; unit number to C + ld b,$17 ; HBIOS: Report Device Info + rst 08 ; call HBIOS, return w/ device type in D, physical unit in E + ld a,d ; device type to A + cp $00 ; ram/rom? + jr nz,makdph00 ; if not, skip ahead to other types + ld a,e ; physical unit number to A + ld e,1 ; assume rom + cp $01 ; rom? + jr z,makdph0 ; yes, jump ahead + ld e,2 ; otherwise ram + jr makdph0 ; jump ahead +makdph00: + ld e,6 ; assume floppy + cp $01 ; floppy? + jr z,makdph0 ; yes, jump ahead + ld e,3 ; assume ram floppy + cp $02 ; ram floppy? + jr z,makdph0 ; yes, jump ahead + ld e,4 ; everything else is assumed to be hard disk + jr makdph0 ; yes, jump ahead +; +makdph0: + ld hl,(dpbloc) ; point to start of dpb table in CBIOS + ld a,e ; get index of target DPB to A + add a,a ; each entry is two bytes + call addhl ; add offset for desired DPB address + ld e,(hl) ; dereference HL + inc hl ; into DE, so DE + ld d,(hl) ; has address of target DPB +; +makdph1: +; + ; build the dph + pop hl ; hl := start of dph + ld a,8 ; size of dph reserved area + call addhl ; leave it alone (zero filled) +; + ld bc,(dirbuf) ; address of dirbuf + ld (hl),c ; plug dirbuf + inc hl ; ... into dph + ld (hl),b ; ... and bump + inc hl ; ... to next dph entry +; + ld (hl),e ; plug dpb address + inc hl ; ... into dph + ld (hl),d ; ... and bump + inc hl ; ... to next entry + dec de ; point + dec de ; ... to start + dec de ; ... of + dec de ; ... dpb + dec de ; ... prefix data (cks & als buf sizes) + call makdph2 ; handle cks buf, then fall thru for als buf + ret nz ; bail out on error +; +makdph2: + ; DE = address of CKS or ALS buf to allocate + ; HL = address of field in DPH to get allocated address + push hl ; save DPH field ptr + pop bc ; into BC +; + ; HL := alloc size, DE bumped + ex de,hl + ld e,(hl) ; get size to allocate + inc hl ; ... + ld d,(hl) ; ... into HL + inc hl ; and bump DE + ex de,hl +; + ; check for size of zero, special case + ld a,h ; check to see + or l ; ... if hl is zero + jr z,makdph3 ; if so, jump ahead using hl as address +; + ; allocate memory + call alloc ; do the allocation + jp c,instovf ; bail out on overflow + +makdph3: + ; swap hl and bc + push bc ; bc -> (sp) + ex (sp),hl ; (sp) -> hl, hl -> (sp) + pop bc ; (sp) -> bc +; + ; save allocated address + ld (hl),c ; save cks/als buf + inc hl ; ... address in + ld (hl),b ; ... dph and bump + inc hl ; ... to next dph entry + xor a ; signal success + ret +; +; +; +instcpm3: + ; swicth to sysbnk + ld a,($FFE0) ; get current bank + push af ; save it + ld bc,$F8F2 ; HBIOS Get Bank Info + rst 08 ; call HBIOS, E=User Bank + ld a,e ; HBIOS User Bank + call $FFF3 ; HBIOS BNKSEL +; + ; copy drvmap working copy to CP/M 3 drvtbl + ld hl,(drvtbl) ; get drvtbl address + ld a,(hl) ; deref HL to get DPH0 adr + inc hl ; ... + ld h,(hl) ; ... + ld l,a ; ... + ld (dphadr),hl ; save starting dphadr + + + ld hl,(drvtbl) ; get drive table in HL + ld de,mapwrk ; DE := working drive map + ld b,16 +instc1: + ld a,(de) ; get unit field of mapwrk + inc a ; test for $FF + jr nz,instc2 ; if used, do copy + xor a ; zero accum + ld (hl),a ; zero lsb of drvtbl entry adr + inc hl ; move to msb + ld (hl),a ; zero msb of drvtbl entry adr + inc hl ; bump to start of next drvtbl entry + inc de ; bump to next mapwrk entry + inc de ; ... + inc de ; ... + inc de ; ... + jr instc3 ; resume loop without copy +; +instc2: + push hl ; save drvtbl entry adr + push de ; save mapwrk entry adr + ld de,(dphadr) ; get cur dph adr + ld (hl),e ; save dph adr to drvtbl + inc hl ; ... + ld (hl),d ; ... + ex de,hl ; dph adr to HL + pop de ; restore mapwrk entry adr + dec hl ; backup to unit + dec hl ; ... + ld a,(de) ; get unit from mapwrk + ld (hl),a ; put unit into DPH field + inc de ; bump to slice field of mapwrk + inc hl ; bump to slice field of DPH field + ld a,(de) ; get slice from mapwrk + ld (hl),a ; put slice into DPH field +; ld a,11 ; media byte is 11 bytes ahead +; call addhl ; bump HL to media byte adr +; or $FF ; use $FF to signify media change +; ld (hl),a ; set media flag byte + inc de ; bump to next mapwrk entry + inc de ; ... + inc de ; ... + pop hl ; back to drvtbl entry + inc hl ; bump to + inc hl ; ... next drvtbl entry +instc3: + push hl ; save drvtbl entry adr + push de ; save mapwrk entry adr + ld hl,(dphadr) ; get cur dph address + ld de,$27 ; size of xdph + add hl,de ; bump to next dph + ld (dphadr),hl ; save it + pop de ; recover mapwrk entry adr + pop hl ; recover drvtbl entry adr + djnz instc1 +; + ; switch back to tpabnk + pop af ; recover prev bank + call $FFF3 ; HBIOS BNKSEL +; + ; set SCB drive door open flag + ld a,$54 ; SCB drive door opened flag + ld (scboff),a ; set offset parm + or $FF ; SCB operation, $FF = set + ld (scbop),a ; set operation parm + ld (scbval),a ; set value parm to $FF + ld c,$31 ; get/set system control block + ld de,scbpb ; scb parameter block adr + call bdos +; + call drvrst ; perform BDOS drive reset +; + xor a ; signal success + ret +; +; Handle overflow error in installation +; +instovf: + ; restore stack frame and CBIOS image + ld sp,(xstksav) ; restore stack frame + ld hl,$1000 ; start of CBIOS image buffer + ld de,(bioloc) ; start of CBIOS + ld bc,(biosiz) ; size of CBIOS + ldir ; restore it + jp errovf +; +; Allocate HL bytes from heap +; Return pointer to allocated memory in HL +; On overflow error, C set +; +alloc: + push de ; save de so we can use it for work reg + ld de,(heaptop) ; get current heap top + push de ; and save for return value + add hl,de ; add requested space, hl := new heap top + jr c,allocx ; test for cpu memory space overflow + ld de,(heaplim) ; load de with heap limit + ex de,hl ; de=new heaptop, hl=heaplim + sbc hl,de ; heaplim - heaptop + jr c,allocx ; c set on overflow error + ; allocation succeeded, commit new heaptop + ld (heaptop),de ; save new heaptop +allocx: + pop hl ; return value to hl + pop de ; recover de + ret +; +; Scan drive map table for integrity +; Currently just checks for multiple drive +; letters referencing a single file system +; +valid: + ld hl,mapwrk ; point to working drive map table + ld b,16 - 1 ; loop one less times than num entries +; + ; check that drive A: is assigned + ld a,$FF ; value that indicates unassigned + cp (hl) ; compare to A: value + jp z,errnoa ; handle failure +; +valid1: ; outer loop +; call crlf + push hl ; save pointer + push bc ; save loop control + call valid2 ; do the inner loop + pop bc ; restore loop control + pop hl ; restore pointer + jp z,errint ; validation error + ld a,4 ; 4 bytes per entry + call addhl ; bump to next entry + djnz valid1 ; loop until done + xor a ; signal OK + ret ; done +; +valid2: ; setup for inner loop + push hl ; save HL + ld a,4 ; 4 bytes per entry + call addhl ; point to entry following + pop de ; de points to comparison entry +; +valid3: ; inner loop + ; bypass unassigned drives (only need to test 1) + ld a,(hl) ; get first drive unit in A + cp $FF ; unassigned? + jr z,valid4 ; yes, skip +; + ; compare unit/slice values + ld a,(de) ; first byte to A + cp (hl) ; compare + jr nz,valid4 ; if not equal, continue loop + inc de ; bump DE to next byte + inc hl ; bump HL to next byte + ld a,(de) ; first byte to A + cp (hl) ; compare + ret z ; both bytes equal, return signalling problem + dec de ; point DE back to first byte of comparison entry + dec hl ; point HL back +; +valid4: ; no match, loop + inc hl + inc hl ; bump HL + inc hl ; ... to + inc hl ; ... next entry + or $FF ; no match + djnz valid3 ; loop as appropriate + ret +; +; Show a specific drive assignment +; +drvshow: + ld a,(dstdrv) ; get the drive num + call chkdrv ; valid drive letter? + ret nz ; abort if not + call showone ; show it + xor a ; signal success + ret ; done +; +; Delete (unassign) drive +; +drvdel: + ld a,(dstdrv) ; get the dest drive (to be unassigned) + call chkdrv ; valid drive letter? + ret nz ; abort if not + ; point to correct entry in drive map + ld hl,mapwrk ; point to working drive map + ld a,(dstdrv) ; get drive letter to remove + rlca ; calc table offset + rlca ; ... as drive num * 4 + call addhl ; get final table offset + ; wipe out the drive letter + ld a,$FF ; dev/unit := $FF (unassigned) + ld (hl),a ; do it + xor a ; zero accum + inc hl ; slice := 0 + ld (hl),a ; do it + inc hl ; DPH pointer lsb := 0 + ld (hl),a ; do it + inc hl ; DPH pointer msb := 0 + ld (hl),a ; do it + ; done + ld a,(dstdrv) ; get the destination + call showone ; show it + ld hl,modcnt ; point to mod count + inc (hl) ; increment it + xor a ; signal success + ret +; +; Swap the source and destination drive letters +; +drvswap: + ld a,(dstdrv) ; get the destination drive + call chkdrv ; valid drive? + ret nz ; abort if not + ld a,(srcdrv) ; get the source drive + call chkdrv ; valid drive? + ret nz ; abort if not + ld hl,(drives) ; load source/dest in DE + ld a,h ; put source drive num in a + cp l ; compare to the dest drive num + jp z,errswp ; Invalid swap request, src == dest +; + ; Get pointer to source drive table entry + ld hl,mapwrk + ld a,(srcdrv) + rlca + rlca + call addhl + ld (srcptr),hl +; + ; Get pointer to destination drive table entry + ld hl,mapwrk + ld a,(dstdrv) + rlca + rlca + call addhl + ld (dstptr),hl +; + ; 1) dest -> temp + ld hl,(dstptr) + ld de,tmpent + ld bc,4 + ldir +; + ; 2) source -> dest + ld hl,(srcptr) + ld de,(dstptr) + ld bc,4 + ldir +; + ; 3) temp -> source + ld hl,tmpent + ld de,(srcptr) + ld bc,4 + ldir +; + ; print the results + ld a,(dstdrv) ; get the destination + call showone ; show it + ld a,(srcdrv) ; get the source drive + call showone ; show it +; + ld hl,modcnt ; point to mod count + inc (hl) ; increment it + xor a ; signal success + ret ; exit +; +; Assign drive to specified unit/slice +; +drvmap: + ; check for UNA mode + ld a,(unamod) ; get UNA mode flag + or a ; set flags + jr nz,drvmapu ; do UNA mode drvmap +; + ; determine device code by scanning for string + ld b,16 ; device table always has 16 entries + ld c,0 ; c is used to track table entry num + ld de,tmpstr ; de points to specified device name + ld hl,devtbl ; hl points to first entry of devtbl +; +drvmap1: ; loop through device table looking for a match + push hl ; save device table entry pointer + ld a,(hl) ; dereference HL + inc hl ; ... to point to + ld h,(hl) ; ... string + ld l,a ; ... in device table + push de ; save string pointer + push bc ; save loop control stuff + call strcmp ; compare strings + pop bc ; restore loop control stuff + pop de ; restore de + pop hl ; restore table entry pointer + jr z,drvmap2 ; match, continue + inc hl ; bump to next + inc hl ; device table pointer + inc c ; keep track of table entry num + djnz drvmap1 ; and loop + jp errdev +; +drvmap2: + ; convert index to device type id + ld a,c ; index to accum + ld (device),a ; save as device id +; + ; loop thru hbios units looking for device type/unit match + ld b,$F8 ; hbios func: sysget + ld c,$10 ; sysget subfunc: diocnt + rst 08 ; call hbios, E := device count + ld b,e ; use device count for loop count + ld c,0 ; use C for device index +drvmap3: + push bc ; preserve loop control + ld b,$17 ; hbios func: diodevice + rst 08 ; call hbios, D := device, E := unit + pop bc ; restore loop control + ld a,(device) + cp d + jr nz,drvmap4 + ld a,(unit) + cp e + jr z,drvmap5 ; match, continue, C = BIOS unit +drvmap4: + ; continue looping + inc c + djnz drvmap3 + jp errdev ; invalid device specified +; +drvmap5: + ; check for valid unit (supported by BIOS) + push bc ; save unit + ld a,c ; unit to A + call chkdev ; check validity + pop bc ; restore unit + ret nz ; bail out on error + + ; resolve the CBIOS DPH table entry + ld a,(dstdrv) ; dest drv num to A + call chkdrv ; valid drive? + ret nz ; abort if invalid + ld hl,mapwrk ; point to start of drive map + rlca ; multiply by + rlca ; ... entry size of 4 + call addhl ; adjust HL to point to entry + ld (dstptr),hl ; save it +; + ; shove updated unit/slice into the entry + ld (hl),c ; save unit byte + inc hl ; bump to next byte + ld a,(slice) + ld (hl),a ; save slice +; + ; finish up + ld a,(dstdrv) ; get the destination drive + call showone ; show it's new value + ld hl,modcnt ; point to mod count + inc (hl) ; increment it + xor a ; signal success + ret ; exit +; +; UNA mode drive mapping +; +drvmapu: +; + ; verify the device nmeumonic + ld a,(unit) ; get unit specified + ld b,a ; put in b + ld d,0 ; preset type to 0 + ld c,$48 ; una func: get disk type + rst 08 ; call una, b is assumed to be untouched!!! + ld a,d ; resultant device type to a + cp $40 ; RAM/ROM + jr z,drvmapu0 ; special case for RAM/ROM + ld de,udevide ; assume IDE + cp $41 ; IDE? + jr z,drvmapu1 ; do compare + ld de,udevppide ; assume PPIDE + cp $42 ; PPIDE? + jr z,drvmapu1 ; do compare + ld de,udevsd ; assume SD + cp $43 ; SD? + jr z,drvmapu1 ; do compare + ld de,udevdsd ; assume DSD + cp $44 ; DSD? + jr z,drvmapu1 ; do compare + jp errdev ; error, invalid device name +; +drvmapu0: + ; handle RAM/ROM + ld a,(unit) ; get unit specified + ld b,a ; unit num to B + ld c,$45 ; UNA func: get disk info + ld de,$9000 ; 512 byte buffer *** FIX!!! *** + rst 08 ; call UNA + bit 7,b ; test RAM drive bit + ld de,udevrom ; assume ROM + jr z,drvmapu1 ; do compare + ld de,udevram ; assume RAM + jr drvmapu1 ; do compare + jp errdev ; error, invalid device name +; +drvmapu1: + ld hl,tmpstr ; point HL to specified device name + call strcmp ; compare + jp nz,errdev ; no match, invalid device name +; + ; check for valid unit (supported by BIOS) + ld a,(unit) ; get specified unit + call chkdevu ; check validity + jp nz,errdev ; invalid device specified +; + ; resolve the CBIOS DPH table entry + ld a,(dstdrv) ; dest drv num to A + call chkdrv ; valid drive? + ret nz ; abort if invalid + ld hl,mapwrk ; point to start of drive map + rlca ; multiply by + rlca ; ... entry size of 4 + call addhl ; adjust HL to point to entry + ld (dstptr),hl ; save it +; + ; shove updated unit/slice into the entry + ld a,(unit) ; get specified unit + ld (hl),a ; save it + inc hl ; next byte is slice + ld a,(slice) ; get specified slice + ld (hl),a ; save it +; + ; finish up + ld a,(dstdrv) ; get the destination drive + call showone ; show it's new value + ld hl,modcnt ; point to mod count + inc (hl) ; increment it + xor a ; signal success + ret +; +; Display all active drive letter assignments +; +showall: + ld b,16 ; 16 drives possible + ld c,0 ; map index (drive letter) +; + ld a,b ; load count + or $FF ; signal no action + ret z ; bail out if zero +; +showall1: ; loop + ld a,c ; + push bc ; save loop control + call showass + pop bc ; restore loop control + inc c + djnz showall1 + or $FF + ret +; +; Display drive letter assignment IF it is assigned +; Drive num in A +; +showass: +; + ; setup HL to point to desired entry in table + ld c,a ; save incoming drive in C + ld hl,mapwrk ; HL = address of drive map + rlca + rlca + call addhl ; HL = address of drive map table entry + ld a,(hl) ; get unit value + cp $FF ; compare to unassigned value + ld a,c ; recover original drive num + ret z ; bail out if unassigned drive + ; fall thru to display drive +; +; Display drive letter assignment for the drive num in A +; +showone: +; + push af ; save the incoming drive num +; + call crlf ; formatting +; + ld de,indent ; indent + call prtstr ; ... to look nice +; + ; setup HL to point to desired entry in table + pop af + push af + ld hl,mapwrk ; HL = address of drive map + rlca + rlca + call addhl ; HL = address of drive map table entry + pop af +; + ; render the drive letter based on table index + add a,'A' ; convert to alpha + call prtchr ; print it + ld a,':' ; conventional color after drive letter + call prtchr ; print it + ld a,'=' ; use '=' to represent assignment + call prtchr ; print it +; + ; render the map entry + ld a,(hl) ; load unit + cp $FF ; empty? + ret z ; yes, bypass + push hl ; preserve HL + call prtdev ; print device mnemonic + ld a,':' ; colon for device/unit format + call prtchr ; print it + pop hl ; recover HL + inc hl ; point to slice num + ld a,(hl) ; load slice num + call prtdecb ; print it +; + ret +; +; Force BDOS to reset (logout) all drives +; +drvrst: + ld c,$0D ; BDOS Reset Disk function + call bdos ; do it +; + ld c,$25 ; BDOS Reset Multiple Drives + ld de,$FFFF ; all drives + call bdos ; do it +; + xor a ; signal success + ret +; +; Print device mnemonic based on device number in A +; +prtdev: + ld e,a ; stash incoming device num in E + ld a,(unamod) ; get UNA mode flag + or a ; set flags + ld a,e ; put device num back + jr nz,prtdevu ; print device in UNA mode + ld b,$17 ; hbios func: diodevice + ld c,a ; unit to C + rst 08 ; call hbios, D := device, E := unit + push de ; save results + ld a,d ; device to A + and $0F ; mask out undesired bits + push hl ; save HL + add a,a ; multiple A by two for word table + ld hl,devtbl ; point to start of device name table + call addhl ; add A to hl to point to table entry + ld a,(hl) ; dereference hl to loc of device name string + inc hl ; ... + ld d,(hl) ; ... + ld e,a ; ... + call prtstr ; print the device nmemonic + pop hl ; restore HL + pop de ; get device/unit data back + ld a,e ; device id to a + call prtdecb ; print it + ret ; done +; +prtdevu: + push bc + push de + push hl +; + ; UNA mode version of print device + ld b,a ; B := unit num + push bc ; save for later + ld c,$48 ; UNA func: get disk type + rst 08 ; call UNA + ld a,d ; disk type to A + pop bc ; get unit num back in C +; + ; pick string based on disk type + cp $40 ; RAM/ROM? + jr z,prtdevu1 ; if so, handle it + cp $41 ; IDE? + ld de,udevide ; load string + jr z,prtdevu2 ; if IDE, print and return + cp $42 ; PPIDE? + ld de,udevppide ; load string + jr z,prtdevu2 ; if PPIDE, print and return + cp $43 ; SD? + ld de,udevsd ; load string + jr z,prtdevu2 ; if SD, print and return + cp $44 ; DSD? + ld de,udevdsd ; load string + jr z,prtdevu2 ; if DSD, print and return + ld de,udevunk ; load string for unknown + jr prtdevu2 ; and print it +; +prtdevu1: + ; handle RAM/ROM + push bc ; save unit num + ld c,$45 ; UNA func: get disk info + ld de,$9000 ; 512 byte buffer *** FIX!!! *** + rst 08 ; call UNA + bit 7,b ; test RAM drive bit + pop bc ; restore unit num + ld de,udevrom ; load string + jr z,prtdevu2 ; print and return + ld de,udevram ; load string + jr prtdevu2 ; print and return +; +prtdevu2: + call prtstr ; print the device nmemonic + ld a,b ; get the unit num back + call prtdecb ; append it + pop hl + pop de + pop bc + ret +; +; Check that specified drive num is valid +; +chkdrv: + cp 16 ; max of 16 drive letters + jp nc,errdrv ; handle bad drive + cp a ; set Z to signal good + ret ; and return +; +; Check that the unit value in A is valid +; according to active BIOS support. +; +; +chkdev: ; HBIOS variant + push af ; save incoming unit + ld b,$F8 ; hbios func: sysget + ld c,$10 ; sysget subfunc: diocnt + rst 08 ; call hbios, E := device count + pop af ; restore incoming unit + cp e ; compare to unit count + jp nc,errdev ; if too high, error +; + ; get device/unit info + ld b,$17 ; hbios func: diodevice + ld c,a ; unit to C + rst 08 ; call hbios, C := device attributes +; + ; check slice support + bit 5,c ; high capacity device? + jr z,chkdev1 ; if not high cap, check slice val + xor a ; otherwise, signal OK + ret +; +chkdev1: ; not a hard disk, make sure slice == 0 + ld a,(slice) ; get specified slice + or a ; set flags + jp nz,errslc ; invalid slice error + xor a ; signal OK + ret +; +chkdevu: ; UNA variant + ld b,a ; put in b + ld d,0 ; preset type to 0 + ld c,$48 ; una func: get disk type + rst 08 ; call una + ld a,d ; resultant device type to a + or a ; set flags + jp z,errdev ; invalid if 0 +; + ; check for slice support, if required + cp $40 ; ram/rom? + jr z,chkdevu1 ; yes, check for slice +; cp $?? ; floppy? +; jr z,chkdevu1 ; yes, check for slice + xor a ; otherwise signal success + ret ; and return +; +chkdevu1: + ld a,(slice) ; get specified slice + or a ; set flags + jp nz,errslc ; invalid slice error + xor a ; otherwise, signal OK + ret ; and return +; +; Print character in A without destroying any registers +; +prtchr: + push bc ; save registers + push de + push hl + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it + pop hl ; restore registers + pop de + pop bc + ret +; +prtdot: +; + ; shortcut to print a dot preserving all regs + push af ; save af + ld a,'.' ; load dot char + call prtchr ; print it + pop af ; restore af + ret ; done +; +; Print a zero terminated string at (HL) without destroying any registers +; +prtstr: + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + ret +; +; Print the value in A in hex without destroying any registers +; +prthex: + push af ; save AF + push de ; save DE + call hexascii ; convert value in A to hex chars in DE + ld a,d ; get the high order hex char + call prtchr ; print it + ld a,e ; get the low order hex char + call prtchr ; print it + pop de ; restore DE + pop af ; restore AF + ret ; done +; +; print the hex word value in bc +; +prthexword: + push af + ld a,b + call prthex + ld a,c + call prthex + pop af + ret +; +; Convert binary value in A to ascii hex characters in DE +; +hexascii: + ld d,a ; save A in D + call hexconv ; convert low nibble of A to hex + ld e,a ; save it in E + ld a,d ; get original value back + rlca ; rotate high order nibble to low bits + rlca + rlca + rlca + call hexconv ; convert nibble + ld d,a ; save it in D + ret ; done +; +; Convert low nibble of A to ascii hex +; +hexconv: + and $0F ; low nibble only + add a,$90 + daa + adc a,$40 + daa + ret +; +; Print value of A or HL in decimal with leading zero suppression +; Use prtdecb for A or prtdecw for HL +; +prtdecb: + push hl + ld h,0 + ld l,a + call prtdecw ; print it + pop hl + ret +; +prtdecw: + push af + push bc + push de + push hl + call prtdec0 + pop hl + pop de + pop bc + pop af + ret +; +prtdec0: + ld e,'0' + ld bc,-10000 + call prtdec1 + ld bc,-1000 + call prtdec1 + ld bc,-100 + call prtdec1 + ld c,-10 + call prtdec1 + ld e,0 + ld c,-1 +prtdec1: + ld a,'0' - 1 +prtdec2: + inc a + add hl,bc + jr c,prtdec2 + sbc hl,bc + cp e + ret z + ld e,0 + call prtchr + ret +; +; Print a byte buffer in hex pointed to by DE +; Register A has size of buffer +; +prthexbuf: + or a + ret z ; empty buffer +; + ld b,a +prthexbuf1: + ld a,' ' + call prtchr + ld a,(de) + call prthex + inc de + djnz prthexbuf1 + ret +; +; Start a new line +; +crlf2: + call crlf ; two of them +crlf: + push af ; preserve AF + ld a,13 ; + call prtchr ; print it + ld a,10 ; + call prtchr ; print it + pop af ; restore AF + ret +; +; Get the next non-blank character from (HL). +; +nonblank: + ld a,(hl) ; load next character + or a ; string ends with a null + ret z ; if null, return pointing to null + cp ' ' ; check for blank + ret nz ; return if not blank + inc hl ; if blank, increment character pointer + jr nonblank ; and loop +; +; Check character at (DE) for delimiter. +; +delim: or a + ret z + cp ' ' ; blank + ret z + jr c,delim1 ; handle control characters + cp '=' ; equal + ret z + cp '_' ; underscore + ret z + cp '.' ; period + ret z + cp ':' ; colon + ret z + cp $3B ; semicolon + ret z + cp '<' ; less than + ret z + cp '>' ; greater than + ret +delim1: + ; treat control chars as delimiters + xor a ; set Z + ret ; return +; +; Get alpha chars and save in tmpstr +; return with terminating char in A and flags set +; return with num chars in B +; +getalpha: +; + ld de,tmpstr ; location to save chars + ld b,0 ; length counter +; +getalpha1: + ld a,(hl) ; get active char + cp 'A' ; check for start of alpha range + jr c,getalpha2 ; not alpha, get out + cp 'Z' + 1 ; check for end of alpha range + jr nc,getalpha2 ; not alpha, get out + ; handle alpha char + inc hl ; increment buffer ptr + ld (de),a ; save it + inc de ; inc string pointer + inc b ; inc string length + ld a,b ; put length in A + cp 8 ; max length? + jr z,getalpha2 ; if max, get out + jr getalpha1 ; and loop +; +getalpha2: ; non-alpha, clean up and return + xor a ; clear accum + ld (de),a ; terminate string + ld a,(hl) ; recover terminating char + or a ; set flags + ret ; and done +; +; Get numeric chars and convert to number returned in A +; Carry flag set on overflow +; +getnum: + ld c,0 ; C is working register +getnum1: + ld a,(hl) ; get the active char + cp '0' ; compare to ascii '0' + jr c,getnum2 ; abort if below + cp '9' + 1 ; compare to ascii '9' + jr nc,getnum2 ; abort if above\ +; + ; valid digit, add new digit to C + ld a,c ; get working value to A + rlca ; multiply by 10 + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + add a,c ; ... + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + ld c,a ; back to C + ld a,(hl) ; get new digit + sub '0' ; make binary + add a,c ; add in working value + ret c ; overflow, return with carry set + ld c,a ; back to C +; + inc hl ; bump to next char + jr getnum1 ; loop +; +getnum2: ; return result + ld a,c ; return result in A + or a ; with flags set, CF is cleared + ret +; +; Compare null terminated strings at HL & DE +; If equal return with Z set, else NZ +; +strcmp: +; + ld a,(de) ; get current source char + cp (hl) ; compare to current dest char + ret nz ; compare failed, return with NZ + or a ; set flags + ret z ; end of string, match, return with Z set + inc de ; point to next char in source + inc hl ; point to next char in dest + jr strcmp ; loop till done +; +; Invoke CBIOS function +; The CBIOS function offset must be stored in the byte +; following the call instruction. ex: +; call cbios +; .db $0C ; offset of CONOUT CBIOS function +; +cbios: + ex (sp),hl + ld a,(hl) ; get the function offset + inc hl ; point past value following call instruction + ex (sp),hl ; put address back at top of stack and recover HL + ld hl,(bioloc) ; address of CBIOS function table to HL + call addhl ; determine specific function address + jp (hl) ; invoke CBIOS +; +; Routine to call CPM3 BIOS routines via BDOS +; function 50. +; +xbios: + ld (biofnc),a ; set BIOS function + ld c,50 ; direct BIOS call function + ld (dereg),de ; set DE parm + ld de,biospb ; BIOS parameter block + jp bdos ; invoke BDOS +; +biospb: +biofnc .db 0 ; BIOS function +areg .db 0 ; A register +bcreg .dw 0 ; BC register +dereg .dw 0 ; DE register +hlreg .dw 0 ; HL register +; +; Add the value in A to HL (HL := HL + A) +; +addhl: + add a,l ; A := A + L + ld l,a ; Put result back in L + ret nc ; if no carry, we are done + inc h ; if carry, increment H + ret ; and return +; +; Jump indirect to address in HL +; +jphl: + jp (hl) +; +; Errors +; +erruse: ; command usage error (syntax) + ld de,msguse + jr err +; +errprm: ; command parameter error (syntax) + ld de,msgprm + jr err +; +errinv: ; invalid CBIOS, zp signature not found + ld de,msginv + jr err +; +errver: ; CBIOS version is not as expected + ld de,msgver + jr err +; +errdrv: ; Invalid drive letter specified + push af + call crlf + ld de,msgdrv1 + call prtstr + pop af + add a,'A' + call prtchr + ld de,msgdrv2 + jr err1 +; +errswp: ; invalid drive swap request + ld de,msgswp + jr err +; +errdev: ; invalid device name + ld de,msgdev + jr err +; +errslc: ; invalid slice + ld de,msgslc + jr err +; +errtyp: ; invalid device assignment request (not a hard disk device type) + ld de,msgtyp + jr err +; +errnum: ; invalid number parsed, overflow + ld de,msgnum + jr err +; +errint: ; DPH table integrity error (multiple drives ref one filesystem) + ld de,msgint + jr err +; +errnoa: ; No A: drive assignment + ld de,msgnoa + jr err +; +errovf: ; CBIOS disk buffer overflow + ld de,msgovf + jr err +; +errdos: ; handle BDOS errors + push af ; save return code + call crlf ; newline + ld de,msgdos ; load + call prtstr ; and print error string + pop af ; recover return code + call prthex ; print error code + jr err2 +; +err: ; print error string and return error signal + call crlf2 ; print double newline +; +err1: ; without the leading crlf + call prtstr ; print error string +; +err2: ; without the string +; call crlf ; print newline + or $FF ; signal error + ret ; done +; +;=============================================================================== +; Storage Section +;=============================================================================== +; +; +bioloc .dw 0 ; CBIOS starting address +bioend .dw 0 ; CBIOS ending address +biosiz .dw 0 ; CBIOS size (in bytes) +maploc .dw 0 ; location of CBIOS drive map table +dpbloc .dw 0 ; location of CBIOS DPB map table +cpmver .dw 0 ; CP/M version +drvtbl .dw 0 ; CP/M 3 drive table address +dphadr .dw 0 ; CP/M 3 working value for DPH +; +drives: +dstdrv .db 0 ; destination drive +srcdrv .db 0 ; source drive +device .db 0 ; source device +unit .db 0 ; source unit +slice .db 0 ; source slice +; +unamod .db 0 ; $FF indicates UNA UBIOS active +modcnt .db 0 ; count of drive map modifications +; +srcptr .dw 0 ; source pointer for copy +dstptr .dw 0 ; destination pointer for copy +tmpent .fill 4,0 ; space to save a table entry +tmpstr .fill 9,0 ; temporary string of up to 8 chars, zero term +; +heaptop .dw 0 ; current address of top of heap memory +heaplim .dw 0 ; heap limit address +; +dirbuf .dw 0 ; directory buffer location +; +scbpb: ; BDOS SCB get/set parm block +scboff .db $54 ; media open door flag +scbop .db $FF ; set a byte +scbval .dw $FF ; value to set +; +mapwrk .fill (4 * 16),$FF ; working copy of drive map +; +devtbl: ; device table + .dw dev00, dev01, dev02, dev03 + .dw dev04, dev05, dev06, dev07 + .dw dev08, dev09, dev10, dev11 + .dw dev12, dev13, dev14, dev15 +; +devunk .db "?",0 +dev00 .db "MD",0 +dev01 .db "FD",0 +dev02 .db "RAMF",0 +dev03 .db "IDE",0 +dev04 .db "ATAPI",0 +dev05 .db "PPIDE",0 +dev06 .db "SD",0 +dev07 .db "PRPSD",0 +dev08 .db "PPPSD",0 +dev09 .db "HDSK",0 +dev10 .db "PPA",0 +dev11 .db "IMM",0 +dev12 .db "SYQ",0 +dev13 .db "CHUSB",0 +dev14 .db "CHSD",0 +dev15 .equ devunk +; +devcnt .equ 10 ; 10 devices defined +; +udevram .db "RAM",0 +udevrom .db "ROM",0 +udevide .db "IDE",0 +udevppide .db "PPIDE",0 +udevsd .db "SD",0 +udevdsd .db "DSD",0 +udevunk .db "UNK",0 +; +stksav .dw 0 ; stack pointer saved at start +xstksav .dw 0 ; temp stack save for error recovery + .fill stksiz,0 ; stack +stack .equ $ ; stack top +; +; Messages +; +indent .db " ",0 +msgban1 .db "ASSIGN v1.8 for RomWBW CP/M ",0 +msg22 .db "2.2",0 +msg3 .db "3",0 +msbban2 .db ", 13-Oct-2023",0 +msghb .db " (HBIOS Mode)",0 +msgub .db " (UBIOS Mode)",0 +msgban3 .db "Copyright 2023, Wayne Warthen, GNU GPL v3",0 +msguse .db "Usage: ASSIGN D:[=[{D:|[]:[]}]][,...]",13,10 + .db " ex. ASSIGN (display all active assignments)",13,10 + .db " ASSIGN /? (display version and usage)",13,10 + .db " ASSIGN /L (display all possible devices)",13,10 + .db " ASSIGN C:=D: (swaps C: and D:)",13,10 + .db " ASSIGN C:=FD0: (assign C: to floppy unit 0)",13,10 + .db " ASSIGN C:=IDE0:1 (assign C: to IDE unit0, slice 1)",13,10 + .db " ASSIGN C:= (unassign C:)",0 +msgprm .db "Parameter error (ASSIGN /? for usage)",0 +msginv .db "Unexpected CBIOS (signature missing)",0 +msgver .db "Unexpected CBIOS version",0 +msgdrv1 .db "Invalid drive letter (",0 +msgdrv2 .db ":)",0 +msgswp .db "Invalid drive swap request",0 +msgdev .db "Invalid device name (ASSIGN /L for device list)",0 +msgslc .db "Specified device does not support slices",0 +msgnum .db "Unit or slice number invalid",0 +msgovf .db "Disk buffer exceeded in CBIOS, aborted",0 +msgtyp .db "Only hard drive devices can be reassigned",0 +msgint .db "Multiple drive letters reference one filesystem, aborting!",0 +msgnoa .db "Drive A: is unassigned, aborting!",0 +msgdos .db "DOS error, return code=0x",0 +msgmem .db " Disk Buffer Bytes Free",0 +; +modsize .equ $ - start +; + .end diff --git a/Source/Apps/copysl/Build.cmd b/Source/Apps/copysl/Build.cmd new file mode 100644 index 00000000..22be44e8 --- /dev/null +++ b/Source/Apps/copysl/Build.cmd @@ -0,0 +1,8 @@ +@echo off +setlocal + +:: copysl.com is currently distributed as a binary application, so +:: it is not built here. + +copy /Y copysl.com ..\..\..\Binary\Apps\ || exit /b +copy /Y copysl.doc ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/copysl/Clean.cmd b/Source/Apps/copysl/Clean.cmd new file mode 100644 index 00000000..2b4cb29c --- /dev/null +++ b/Source/Apps/copysl/Clean.cmd @@ -0,0 +1,5 @@ +@echo off +setlocal + +:: copysl.com is currently distributed as a binary application, so +:: we do not delete the .COM file. \ No newline at end of file diff --git a/Source/Apps/copysl/Makefile b/Source/Apps/copysl/Makefile new file mode 100644 index 00000000..1024dc14 --- /dev/null +++ b/Source/Apps/copysl/Makefile @@ -0,0 +1,7 @@ +OBJECTS = copysl.com +NODELETE = $(OBJECTS) +DOCS = copysl.doc +DEST = ../../../Binary/Apps +DOCDEST = ../../../Binary/Apps +TOOLS=../../../Tools +include $(TOOLS)/Makefile.inc diff --git a/Source/Apps/copysl/copysl.com b/Source/Apps/copysl/copysl.com new file mode 100644 index 00000000..269abbbb Binary files /dev/null and b/Source/Apps/copysl/copysl.com differ diff --git a/Source/Apps/copysl/copysl.doc b/Source/Apps/copysl/copysl.doc new file mode 100644 index 00000000..57fc09ac --- /dev/null +++ b/Source/Apps/copysl/copysl.doc @@ -0,0 +1,98 @@ +========================================================================== + CopySlice Utility v0.2 for RomWbW computers + written by Mark Pruden (Sept 2024) +========================================================================== + +Purpose: +-------- + +The purpose of this utility is to allow the copying of whole disk slices +from one disk slice to another slice + +Background +---------- + +This tool is only supported by RomWBW HBIOS, it uses HDIOS for all its +disk IO. UNA UBIOS is not supported by this tool. + +This tool is running on CP/M 2.2 or 3.0 and has access to full 64kb of +RAM, with a minimum of 48kb TPA + +This tool only works with hard disk devices, other media types like +floppy, are not supported at this time. This tool works across different +hard disk device types, even of different physical type + +Both hd1k and hd512 are fully supported, however copying from one layout +type to the other is not supported. + +During operation data is copied in a single read/write pass, data is not +verified by default. If there is a write error, it will be reported, and +operation will stop. + +General Usage +------------- +This tool operates at the disk level via RomWBW, thus all disk identifiers +are in the RomWBW . format + +The syntax (similar to copy) for the command is: + + COPYSL [.]=[.] [/options] + +E.g. + + COPYSL 3.3=2.10 /U + +Means copy from slice 10 on disk 2, onto disk 3 slice 3. This is in +unattended mode, so you will not be asked to confirm the copy operation. + +Options +------- +F - Full disk copy. Copies the complete disk slice, all sectors. +U - Unattended. Will complete copy without confirmation from the user. +V - Verify. Does an additional read and verify after write. + +Description +----------- + +When run COPYSL will perform command line argument validation and display +an error if they are illegal. Also any disk IO errors will cause COPYSL +to exit. + +When specifying slice number(s) a check is made that the slice number is +valid, i.e. not too large that it would extend past the end of the +partition (hd1k), or the end of the media (hd512). For hd512 a check is +also performed to ensure that the slice would not extend into the first +defined partition. + +The copy operation will be faster if the source disk has been formatted +with the CP/M file system, since during copy the CP/M directory is scanned, +and unused blocks are not copied. + +If a filesystem is not found, (or the /F option is chosen) all data is +copied. + +Verification (if option chosen) will do an aditional read (after write) +and compare the data read matches what was written. This compare is only +on every 32'nd byte. This is done for efficiency. + +During copy dots "." will be displayed to indicate progress of the copy. +Each "." represents 16 kBytes of data. Each line of "." 's is 1 mBytes. + +Testing +------- +This tool has been writen and tested on a SC126 computer. Testing been on both +SD and CF media types, and with both hd1k and hd512 formats + +History +------- +* v 0.1 Initial Release +* v 0.2 Added the /v command option to read and verify after write + +Future +------ +* support ability to read and write from image files stored in CP/M filesystem +* maybe the verify options could allow more complete verification. + This would be at the cost of performance +* ability to abort once the copy has started + + \ No newline at end of file diff --git a/Source/Apps/cpuspd/Build.cmd b/Source/Apps/cpuspd/Build.cmd index 1e3fe0a5..cf0a2a5b 100644 --- a/Source/Apps/cpuspd/Build.cmd +++ b/Source/Apps/cpuspd/Build.cmd @@ -5,6 +5,6 @@ set TOOLS=../../../Tools set PATH=%TOOLS%\tasm32;%PATH% set TASMTABS=%TOOLS%\tasm32 -tasm -t180 -g3 -fFF cpuspd.asm cpuspd.com cpuspd.lst || exit /b +tasm -t80 -g3 -fFF cpuspd.asm cpuspd.com cpuspd.lst || exit /b copy /Y cpuspd.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/cpuspd/cpuspd.asm b/Source/Apps/cpuspd/cpuspd.asm index 86f63e0a..4fef256c 100644 --- a/Source/Apps/cpuspd/cpuspd.asm +++ b/Source/Apps/cpuspd/cpuspd.asm @@ -23,6 +23,12 @@ rtc_port .equ $70 ; RTC latch port adr restart .equ $0000 ; CP/M restart vector bdos .equ $0005 ; BDOS invocation vector ; +bf_sysreset .equ $F0 ; restart system +; +bf_sysres_int .equ $00 ; reset hbios internal +bf_sysres_warm .equ $01 ; warm start (restart boot loader) +bf_sysres_cold .equ $02 ; cold start +; ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr ; ;======================================================================= @@ -113,6 +119,10 @@ main1: ; main2: ret z ; if end, nothing to do + cp 'W' ; warm boot? + jp z,wboot ; if so, do it + cp 'C' ; cold boot? + jp z,cboot ; if so, do it cp ',' ; no new speed? jr z,main2a ; go to wait states ; parse speed string (half, full, double) @@ -161,6 +171,9 @@ parse_spd: ld c,2 ; assume double speed cp 'D' ; check it jr z,parse_spd1 ; if equal, done + ld c,3 ; assume quad speed + cp 'Q' ; check it + jr z,parse_spd1 ; if equal, done or a ; clear CF ccf ; set CF to indicate error ret @@ -222,6 +235,9 @@ show_spd: ld de,str_dbl cp 2 jr z,show_spd1 + ld de,str_quad + cp 3 + jr z,show_spd1 jp err_invalid show_spd1: call prtstr @@ -267,6 +283,24 @@ usage: or $FF ret ; +; Handle Warm Boot +; +wboot: + ld de,str_warmboot ; message + call prtstr ; display it + ld b,bf_sysreset ; system restart + ld c,bf_sysres_warm ; warm start + call $fff0 ; call hbios +; +; Handle Cold Boot +; +cboot: + ld de,str_coldboot ; message + call prtstr ; display it + ld b,bf_sysreset ; system restart + ld c,bf_sysres_cold ; cold start + call $fff0 ; call hbios +; ; Error Handlers ; err_una: @@ -510,9 +544,6 @@ prtd3m2: call prtchr prtd3m3: ret - - - ; ; Get the next non-blank character from (HL). ; @@ -665,7 +696,7 @@ delay1: ; Constants ;======================================================================= ; -str_banner .db "RomWBW CPU Speed Selector v0.6, 29-Dec-2023",0 +str_banner .db "RomWBW CPU Speed Selector v1.0, 11-Sep-2024",0 str_spacer .db " ",0 str_oscspd .db " MHz Oscillator",0 str_cpuspd .db " CPU speed is ",0 @@ -674,8 +705,11 @@ str_mhz .db " MHz",0 str_slow .db " (Half)",0 str_full .db " (Full)",0 str_dbl .db " (Double)",0 +str_quad .db " (Quad)",0 str_memws .db " Memory Wait State(s)",0 str_iows .db " I/O Wait State(s)",0 +str_warmboot .db "\r\n\r\nWarm booting...",0 +str_coldboot .db "\r\n\r\nCold booting...",0 str_err_una .db " ERROR: UNA not supported by application",0 str_err_inv .db " ERROR: Invalid BIOS (signature missing)",0 str_err_ver .db " ERROR: Unexpected HBIOS version",0 @@ -684,8 +718,10 @@ str_err_not_sup .db " ERROR: Platform or configuration does not support CPU sp str_err_invalid .db " ERROR: Invalid configuration!",0 str_err_api .db " ERROR: HBIOS API error!",0 str_usage .db " Usage: CPUSPD ,,\r\n" + .db " CPUSPD (W)armBoot\r\n" + .db " CPUSPD (C)oldBoot\r\n" .db "\r\n" - .db " : \"Half\", \"Full\", or \"Double\"\r\n" + .db " : (H)alf | (F)ull | (D)ouble | (Q)uad\r\n" .db " : Memory wait states\r\n" .db " : I/O wait states\r\n" .db "\r\n" diff --git a/Source/Apps/format.asm b/Source/Apps/format.asm deleted file mode 100644 index 3021b958..00000000 --- a/Source/Apps/format.asm +++ /dev/null @@ -1,213 +0,0 @@ -;=============================================================================== -; FORMAT - DISK FORMAT UTILITY FOR ROMWBW ADAPTATION OF CP/M 2.2 -;=============================================================================== -; -; AUTHOR: WAYNE WARTHEN (wwarthen@gmail.com) -;_______________________________________________________________________________ -; -; Usage: -; FORMAT D: -; ex: FORMAT (display version and usage) -; FORMAT /? (display version and usage) -; FORMAT C: (format drive C:) -;_______________________________________________________________________________ -; -; Change Log: -;_______________________________________________________________________________ -; -; ToDo: -; 1) Actually implement this -;_______________________________________________________________________________ -; -#include "../ver.inc" -; -;=============================================================================== -; Definitions -;=============================================================================== -; -stksiz .equ $40 ; Working stack size -; -restart .equ $0000 ; CP/M restart vector -bdos .equ $0005 ; BDOS invocation vector -;; -;stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp -; -;=============================================================================== -; Code Section -;=============================================================================== -; -; - .org $100 -; - ; setup stack (save old value) - ld (stksav),sp ; save stack - ld sp,stack ; set new stack -; - ; initialization - call init ; initialize - jr nz,exit ; abort if init fails -; - ; do the real work - call process ; parse and process command line - jr nz,exit ; done if error or no action -; -exit: ; clean up and return to command processor - call crlf ; formatting - ld sp,(stksav) ; restore stack - jp restart ; return to CP/M via restart - ret ; return to CP/M w/o restart -; -; Initialization -; -init: -; - ; locate start of cbios (function jump table) - ld hl,(restart+1) ; load address of CP/M restart vector - ld de,-3 ; adjustment for start of table - add hl,de ; HL now has start of table - ld (bioloc),hl ; save it -; - ; check for UNA (UBIOS) - ld a,($FFFD) ; fixed location of UNA API vector - cp $C3 ; jp instruction? - jr nz,initx ; if not, not UNA - ld hl,($FFFE) ; get jp address - ld a,(hl) ; get byte at target address - cp $FD ; first byte of UNA push ix instruction - jr nz,initx ; if not, not UNA - inc hl ; point to next byte - ld a,(hl) ; get next byte - cp $E5 ; second byte of UNA push ix instruction - jr nz,initx ; if not, not UNA - ld hl,unamod ; point to UNA mode flag - ld (hl),$FF ; set UNA mode flag -; -initx: -; - xor a - ret -; -; Process command line -; -process: - jr usage -; - xor a - ret -; -usage: -; - call crlf ; formatting - ld de,msgban1 ; point to version message part 1 - call prtstr ; print it - ld a,(unamod) ; get UNA flag - or a ; set flags - ld de,msghb ; point to HBIOS mode message - call z,prtstr ; if not UNA, say so - ld de,msgub ; point to UBIOS mode message - call nz,prtstr ; if UNA, say so - call crlf ; formatting - ld de,msgban2 ; point to version message part 2 - call prtstr ; print it - call crlf2 ; blank line - ld de,msguse ; point to usage message - call prtstr ; print it - xor a ; signal success - ret ; and return -; -; Print character in A without destroying any registers -; -prtchr: - push bc ; save registers - push de - push hl - ld e,a ; character to print in E - ld c,$02 ; BDOS function to output a character - call bdos ; do it - pop hl ; restore registers - pop de - pop bc - ret -; -; Print a zero terminated string at (HL) without destroying any registers -; -prtstr: - push de -; -prtstr1: - ld a,(de) ; get next char - or a - jr z,prtstr2 - call prtchr - inc de - jr prtstr1 -; -prtstr2: - pop de ; restore registers - ret -; -; Start a new line -; -crlf2: - call crlf ; two of them -crlf: - push af ; preserve AF - ld a,13 ; - call prtchr ; print it - ld a,10 ; - call prtchr ; print it - pop af ; restore AF - ret -; -; Invoke CBIOS function -; The CBIOS function offset must be stored in the byte -; following the call instruction. ex: -; call cbios -; .db $0C ; offset of CONOUT CBIOS function -; -cbios: - ex (sp),hl - ld a,(hl) ; get the function offset - inc hl ; point past value following call instruction - ex (sp),hl ; put address back at top of stack and recover HL - ld hl,(bioloc) ; address of CBIOS function table to HL - call addhl ; determine specific function address - jp (hl) ; invoke CBIOS -; -; Add the value in A to HL (HL := HL + A) -; -addhl: - add a,l ; A := A + L - ld l,a ; Put result back in L - ret nc ; if no carry, we are done - inc h ; if carry, increment H - ret ; and return -; -; Jump indirect to address in HL -; -jphl: - jp (hl) -; -;=============================================================================== -; Storage Section -;=============================================================================== -; -bioloc .dw 0 ; CBIOS starting address -; -unamod .db 0 ; $FF indicates UNA UBIOS active -; -stksav .dw 0 ; stack pointer saved at start - .fill stksiz,0 ; stack -stack .equ $ ; stack top -; -msgban1 .db "FORMAT v0.1a for RomWBW CP/M 2.2, 02-Sep-2017",0 -msghb .db " (HBIOS Mode)",0 -msgub .db " (UBIOS Mode)",0 -msgban2 .db "Copyright (C) 2017, Wayne Warthen, GNU GPL v3",0 -msguse .db "FORMAT command is not yet implemented!",13,10,13,10 - .db "Use FDU command to physically format floppy diskettes",13,10 - .db "Use CLRDIR command to (re)initialize directories",13,10 - .db "Use SYSCOPY command to make disks bootable",13,10 - .db "Use FDISK80 command to partition mass storage media",0 -; - .end diff --git a/Source/Apps/format/Build.cmd b/Source/Apps/format/Build.cmd new file mode 100644 index 00000000..29301f5a --- /dev/null +++ b/Source/Apps/format/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF format.asm format.com format.lst || exit /b + +copy /Y format.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/format/Clean.cmd b/Source/Apps/format/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/format/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/format/Makefile b/Source/Apps/format/Makefile new file mode 100644 index 00000000..fd1dea62 --- /dev/null +++ b/Source/Apps/format/Makefile @@ -0,0 +1,7 @@ +OBJECTS = format.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/format/format.asm b/Source/Apps/format/format.asm new file mode 100644 index 00000000..150cfd10 --- /dev/null +++ b/Source/Apps/format/format.asm @@ -0,0 +1,213 @@ +;=============================================================================== +; FORMAT - DISK FORMAT UTILITY FOR ROMWBW ADAPTATION OF CP/M 2.2 +;=============================================================================== +; +; AUTHOR: WAYNE WARTHEN (wwarthen@gmail.com) +;_______________________________________________________________________________ +; +; Usage: +; FORMAT D: +; ex: FORMAT (display version and usage) +; FORMAT /? (display version and usage) +; FORMAT C: (format drive C:) +;_______________________________________________________________________________ +; +; Change Log: +;_______________________________________________________________________________ +; +; ToDo: +; 1) Actually implement this +;_______________________________________________________________________________ +; +#include "../../ver.inc" +; +;=============================================================================== +; Definitions +;=============================================================================== +; +stksiz .equ $40 ; Working stack size +; +restart .equ $0000 ; CP/M restart vector +bdos .equ $0005 ; BDOS invocation vector +;; +;stamp .equ $40 ; loc of RomWBW CBIOS zero page stamp +; +;=============================================================================== +; Code Section +;=============================================================================== +; +; + .org $100 +; + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack +; + ; initialization + call init ; initialize + jr nz,exit ; abort if init fails +; + ; do the real work + call process ; parse and process command line + jr nz,exit ; done if error or no action +; +exit: ; clean up and return to command processor + call crlf ; formatting + ld sp,(stksav) ; restore stack + jp restart ; return to CP/M via restart + ret ; return to CP/M w/o restart +; +; Initialization +; +init: +; + ; locate start of cbios (function jump table) + ld hl,(restart+1) ; load address of CP/M restart vector + ld de,-3 ; adjustment for start of table + add hl,de ; HL now has start of table + ld (bioloc),hl ; save it +; + ; check for UNA (UBIOS) + ld a,($FFFD) ; fixed location of UNA API vector + cp $C3 ; jp instruction? + jr nz,initx ; if not, not UNA + ld hl,($FFFE) ; get jp address + ld a,(hl) ; get byte at target address + cp $FD ; first byte of UNA push ix instruction + jr nz,initx ; if not, not UNA + inc hl ; point to next byte + ld a,(hl) ; get next byte + cp $E5 ; second byte of UNA push ix instruction + jr nz,initx ; if not, not UNA + ld hl,unamod ; point to UNA mode flag + ld (hl),$FF ; set UNA mode flag +; +initx: +; + xor a + ret +; +; Process command line +; +process: + jr usage +; + xor a + ret +; +usage: +; + call crlf ; formatting + ld de,msgban1 ; point to version message part 1 + call prtstr ; print it + ld a,(unamod) ; get UNA flag + or a ; set flags + ld de,msghb ; point to HBIOS mode message + call z,prtstr ; if not UNA, say so + ld de,msgub ; point to UBIOS mode message + call nz,prtstr ; if UNA, say so + call crlf ; formatting + ld de,msgban2 ; point to version message part 2 + call prtstr ; print it + call crlf2 ; blank line + ld de,msguse ; point to usage message + call prtstr ; print it + xor a ; signal success + ret ; and return +; +; Print character in A without destroying any registers +; +prtchr: + push bc ; save registers + push de + push hl + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it + pop hl ; restore registers + pop de + pop bc + ret +; +; Print a zero terminated string at (HL) without destroying any registers +; +prtstr: + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + ret +; +; Start a new line +; +crlf2: + call crlf ; two of them +crlf: + push af ; preserve AF + ld a,13 ; + call prtchr ; print it + ld a,10 ; + call prtchr ; print it + pop af ; restore AF + ret +; +; Invoke CBIOS function +; The CBIOS function offset must be stored in the byte +; following the call instruction. ex: +; call cbios +; .db $0C ; offset of CONOUT CBIOS function +; +cbios: + ex (sp),hl + ld a,(hl) ; get the function offset + inc hl ; point past value following call instruction + ex (sp),hl ; put address back at top of stack and recover HL + ld hl,(bioloc) ; address of CBIOS function table to HL + call addhl ; determine specific function address + jp (hl) ; invoke CBIOS +; +; Add the value in A to HL (HL := HL + A) +; +addhl: + add a,l ; A := A + L + ld l,a ; Put result back in L + ret nc ; if no carry, we are done + inc h ; if carry, increment H + ret ; and return +; +; Jump indirect to address in HL +; +jphl: + jp (hl) +; +;=============================================================================== +; Storage Section +;=============================================================================== +; +bioloc .dw 0 ; CBIOS starting address +; +unamod .db 0 ; $FF indicates UNA UBIOS active +; +stksav .dw 0 ; stack pointer saved at start + .fill stksiz,0 ; stack +stack .equ $ ; stack top +; +msgban1 .db "FORMAT v0.1a for RomWBW CP/M 2.2, 02-Sep-2017",0 +msghb .db " (HBIOS Mode)",0 +msgub .db " (UBIOS Mode)",0 +msgban2 .db "Copyright (C) 2017, Wayne Warthen, GNU GPL v3",0 +msguse .db "FORMAT command is not yet implemented!",13,10,13,10 + .db "Use FDU command to physically format floppy diskettes",13,10 + .db "Use CLRDIR command to (re)initialize directories",13,10 + .db "Use SYSCOPY command to make disks bootable",13,10 + .db "Use FDISK80 command to partition mass storage media",0 +; + .end diff --git a/Source/Apps/mode.asm b/Source/Apps/mode.asm deleted file mode 100644 index 0a52ee69..00000000 --- a/Source/Apps/mode.asm +++ /dev/null @@ -1,1039 +0,0 @@ -;=============================================================================== -; MODE - Display and/or modify device configuration -; -;=============================================================================== -; -; Author: Wayne Warthen (wwarthen@gmail.com) -;_______________________________________________________________________________ -; -; Usage: -; MODE /? -; MODE COM: [[,[,[,]]]] [/P] -; -; is numerical baudrate -; is (N)one, (O)dd, (E)ven, (M)ark, or (S)pace -; is number of data bits, typically 7 or 8 -; is number of stop bits, typically 1 or 2 -; /P prompts user prior to setting new configuration -; -; Examples: -; MODE /? (display command usage) -; MODE (display configuration of all serial ports) -; MODE COM0: (display configuration of serial unit 0) -; MODE COM1: 9600,N,8,1 (set serial unit 1 configuration) -; -; Notes: -; - Parameters not provided will remain unchanged -; - Device must support specified configuration -;_______________________________________________________________________________ -; -; Change Log: -; 2017-08-16 [WBW] Initial release -; 2017-08-28 [WBW] Handle UNACPM -; 2018-07-24 [WBW] Fixed bug in getnum23 routine (credit Phil Summers) -;_______________________________________________________________________________ -; -; ToDo: -; 1) Implement flow control settings -;_______________________________________________________________________________ -; -#include "../ver.inc" -; -;=============================================================================== -; Definitions -;=============================================================================== -; -stksiz .equ $40 ; Working stack size -; -restart .equ $0000 ; CP/M restart vector -bdos .equ $0005 ; BDOS invocation vector -; -ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr -; -bf_cioinit .equ $04 ; HBIOS: CIOINIT function -bf_cioquery .equ $05 ; HBIOS: CIOQUERY function -bf_ciodevice .equ $06 ; HBIOS: CIODEVICE function -bf_sysget .equ $F8 ; HBIOS: SYSGET function -; -;=============================================================================== -; Code Section -;=============================================================================== -; - .org $100 -; - ; setup stack (save old value) - ld (stksav),sp ; save stack - ld sp,stack ; set new stack -; - ; initialization - call init ; initialize - jr nz,exit ; abort if init fails -; - ; get the target device - call getdev ; parse device/id from command line - jr nz,exit ; abort on error -; - ; process the configuration request - call process ; parse device/id from command line - jr nz,exit ; abort on error -; -exit: ; clean up and return to command processor - call crlf ; formatting - ld sp,(stksav) ; restore stack - jp restart ; return to CP/M via restart - ret ; return to CP/M w/o restart -; -; Initialization -; -init: - ; locate start of cbios (function jump table) - ld hl,(restart+1) ; load address of CP/M restart vector - ld de,-3 ; adjustment for start of table - add hl,de ; HL now has start of table - ld (bioloc),hl ; save it -; - ; check for UNA (UBIOS) - ld a,($FFFD) ; fixed location of UNA API vector - cp $C3 ; jp instruction? - jr nz,initwbw ; if not, not UNA - ld hl,($FFFE) ; get jp address - ld a,(hl) ; get byte at target address - cp $FD ; first byte of UNA push ix instruction - jr nz,initwbw ; if not, not UNA - inc hl ; point to next byte - ld a,(hl) ; get next byte - cp $E5 ; second byte of UNA push ix instruction - jr nz,initwbw ; if not, not UNA -; - ; UNA initialization - ld hl,unamod ; point to UNA mode flag - ld (hl),$FF ; set UNA mode flag - ld a,$FF ; assume max units for UNA - ld (comcnt),a ; ... and save it - jr initx ; UNA init done -; -initwbw: - ; get location of config data and verify integrity - ld hl,(ident) ; HL := adr or RomWBW HBIOS ident - ld a,(hl) ; get first byte of RomWBW marker - cp 'W' ; match? - jp nz,errinv ; abort with invalid config block - inc hl ; next byte (marker byte 2) - ld a,(hl) ; load it - cp ~'W' ; match? - jp nz,errinv ; abort with invalid config block - inc hl ; next byte (major/minor version) - ld a,(hl) ; load it - cp rmj << 4 | rmn ; match? - jp nz,errver ; abort with invalid os version -; - ; RomWBW initialization - ld b,bf_sysget ; BIOS SYSGET function - ld c,$00 ; CIOCNT subfunction - rst 08 ; E := serial device unit count - ld a,e ; count to A - ld (comcnt),a ; save it -; -initx - ; initialization complete - xor a ; signal success - ret ; return -; -; Get target device specification (e.g., "COM1:") and save -; as devicetype/id. -; -getdev: - ; skip to start of first parm - ld ix,$81 ; point to start of parm area (past len byte) - call nonblank ; skip to next non-blank char - jp z,prtcomall ; no parms, show all active ports -; -getdev1: - ; process options (if any) - cp '/' ; option prefix? - jr nz,getdev2 ; not an option, continue - call option ; process option - ret nz ; some options mean we are done (e.g., "/?") - inc ix ; skip option character - call nonblank ; skip whitespace - jr getdev1 ; continue option checking -; -getdev2: - ; parse device mnemonic (e.g., "COM1") into tmpstr - call getalpha ; extract alpha portion (e.g., "COM") - call getnum ; extract numeric portion - jp c,errunt ; handle overflow as invalid unit - ld (unit),a ; save as unit number -; - ; skip terminating ':' in device spec - ld a,(ix) ; get current char - cp ':' ; colon? - jr nz,getdev3 ; done if no colon - inc ix ; otherwise, skip the colon -; -getdev3: - call nonblank ; gobble any remaining whitespace - xor a ; indicate success - ret ; and return -; -; Process device -; -process: - ; match and branch according to device mnemonic - ld hl,tmpstr ; point to start of extracted string - ld de,strcom ; point to "COM" string - call strcmp ; and compare - jp z,comset ; handle COM port configuration - jp errdev ; abort if bad device name -; -; Display or change serial port configuration -; -comset: - ; check for valid unit number - ld hl,comcnt ; point to com device unit count - ld a,(unit) ; get com device unit count - cp (hl) ; compare to count (still in E) - jr c,comset1 ; unit < count, continue - jp errunt ; handle unit number error -; -comset1: - call ldcom ; load config for port -; - ld a,(comatr) ; get attributes - bit 7,a ; terminal? - jp nz,prtcom ; terminal not configurable -; - ld a,(ix) ; get current char - cp 0 ; nothing more? - jp z,prtcom ; no config parms, print current device config -; - ; parse and update baudrate - ld a,(ix) ; get current byte - cp '0' ; check for - jr c,comset1a ; ... valid digit - cp '9'+1 ; ... else jump ahead - jr nc,comset1a ; ... to handle empty -; - call getnum32 ; get baud rate into DE:HL - jp c,errcfg ; Handle overflow error - ld c,75 ; Constant for baud rate encode - call encode ; encode into C:4-0 - jp nz,errcfg ; Error if encode fails - ld a,(comcfg+1) ; Get high byte of config - and %11100000 ; strip out old baud rate bits - or c ; insert new baud rate bits - ld (comcfg+1),a ; save it -; -comset1a: - ; parse and update parity - call nonblank ; skip blanks - jp z,comset9 ; end of parms - cp ',' ; comma, as expected? - jp nz,comset8 ; check for trailing options - inc ix ; skip comma - call nonblank ; skip possible blanks - call ucase - ; lookup parity value - ld c,0 - cp 'N' - jr z,comset2 - ld c,1 - cp 'O' - jr z,comset2 - ld c,3 - cp 'E' - jr z,comset2 - ld c,5 - cp 'M' - jr z,comset2 - ld c,7 - cp 'S' - jr z,comset2 - jr comset3 ; unexpected parity char, possibly empty -; -comset2: - ; update parity value - ld a,c ; new parity value to A - rlca ; rotate to bits 5-3 - rlca ; - rlca ; - ld c,a ; and back to C - ld a,(comcfg) ; parity is in comcfg:5-3 - and %11000111 ; strip old value - or c ; apply new value - ld (comcfg),a ; and save it - inc ix ; bump past parity char -; -comset3: - ; parse & update data bits - call nonblank ; skip blanks - jr z,comset9 ; end of parms - cp ',' ; comma, as expected? - jr nz,comset8 ; check for trailing options - inc ix ; skip comma - call nonblank ; skip possible blanks - sub '5' ; normalize value - cp 4 ; value should now be 0-3 - jr nc,comset4 ; unexpected, possibly empty - ld c,a ; move new value to C - ld a,(comcfg) ; data bits is in comcfg:1-0 - and %11111100 ; strip old value - or c ; apply new value - ld (comcfg),a ; and save it - inc ix ; bump past data bits char -; -comset4: - ; parse & update stop bits - call nonblank ; skip blanks - jr z,comset9 ; end of parms - cp ',' ; comma, as expected? - jr nz,comset8 ; check for trailing options - inc ix ; skip comma - call nonblank ; skip possible blanks - sub '1' ; normalize value - cp 2 ; value should now be 0-1 - jr nc,comset8 ; unexpected, possibly empty - rlca ; rotate to bit 2 - rlca - ld c,a ; move new value to C - ld a,(comcfg) ; stop bit is in comcfg:2 - and %11111011 ; strip old value - or c ; apply new value - ld (comcfg),a ; and save it - inc ix ; bump past stop bits char -; -comset8: - ; trailing options - call nonblank ; skip blanks - jr z,comset9 ; end of parms - cp '/' ; option introducer? - jp nz,errprm ; parameter error - inc ix ; bump part '/' - ld a,(ix) ; get character - call ucase ; make upper case - cp 'P' ; only valid option - jp nz,errprm ; parameter error - ld a,$FF ; set prompt value on - ld (pflag),a ; save it - inc ix ; bump past character - jr comset8 ; process more parms -; -comset9: - ; display new config - ld de,(comcfg) ; get new config - call prtcom ; print it - ld a,(pflag) ; get prompt flag - or a ; set flags - jr z,comset9b ; bypass if not requested - call crlf2 ; spacing - ld de,indent ; indent - call prtstr ; do it - ld de,msgpmt ; point to prmopt message - call prtstr ; print it -; - ld b,64 -comset9a: - xor a - call prtchr - djnz comset9a -; -comset9b: - ; check for UNA - ld a,(unamod) ; get UNA flag - or a ; set flags - jr nz,comsetu ; go to UNA variant -; - ; implement new config - ld de,(comcfg) ; get new config value to DE - ld b,bf_cioinit ; BIOS serial init - ld a,(unit) ; get serial device unit - ld c,a ; ... into C - rst 08 ; call HBIOS - jp nz,errcfg ; handle error - jr comsetx ; common exit -; -comsetu: - ; implement new config under UNA - ld de,(comcfg) ; get new config value to DE - ld c,$10 ; UNA INIT function - ld a,(unit) ; get serial device unit - ld b,a ; ... into B - rst 08 ; call HBIOS - jp nz,errcfg ; handle error - jr comsetx ; common exit -; -comsetx: - ld a,(pflag) ; get prompt flag - or a ; set flags - jr z,comsetx2 ; bypass if not requested -comsetx1: - ld c,$01 ; console read - call bdos ; do it - cp $0D ; CR? - jr nz,comsetx1 ; loop as needed -; -comsetx2: - xor a - ret -; -; Print configuration of all serial ports -; -prtcomall: - ld a,(comcnt) ; get com device unit count - ld b,a ; init B as loop counter - ld c,0 ; init C as unit index -; -prtcomall1: - push bc ; save loop control -; - ; get port info - ld a,c ; put unit number - ld (unit),a ; ... into unit - call ldcom ; get config - jr z,prtcomall2 ; no error, continue - pop bc ; unwind stack - ret ; and return with NZ -; -prtcomall2: - ; print config for port - call prtcom ; print line for this port -; - ; loop as needed - pop bc ; restore loop control - inc c ; next unit index - djnz prtcomall1 ; loop till done -; - or $FF ; indicate nothing more to do - ret ; finished -; -; Print configuration of serial port -; -prtcom: - ; print leader (e.g., "COM0: ") - call crlf - ld de,indent - call prtstr - ld de,strcom - call prtstr - ld a,(unit) - call prtdecb - ld a,':' - call prtchr - ld a,' ' - call prtchr -; - ld a,(comatr) ; get attribute byte - bit 7,a ; 0=RS232, 1=terminal - jr z,prtcom1 ; handle serial port configuration -; - ; this is a terminal, just say so - ld de,strterm ; point to string - call prtstr ; print it - ret ; and return -; -prtcom1: - ld de,(comcfg) ; load config to DE -; - ; print baud rate - push de ; save it - ld a,d ; baud rate is in D - and $1F ; ... bits 4-0 - ld l,a ; move to L - ld h,0 ; setup H for decode routine - ld de,75 ; set DE to baud rate decode constant - call decode ; decode baud rate, DE:HL := baud rate - ld bc,bcdtmp ; point to temp bcd buffer - call bin2bcd ; convert baud to BCD - call prtbcd ; and print in decimal - pop de ; restore line characteristics -; - ; print parity - ld a,',' ; A := comma - call prtchr ; ... print it - ld a,e ; E has parity config - rrca ; isolate bits 5-3 - rrca ; ... - rrca ; ... - and $07 ; ... - ld hl,parmap ; HL := start of parity char table - call addhl ; index into table - ld a,(hl) ; get resulting parity char - call prtchr ; and print -; - ; print data bits - ld a,',' ; A := comma - call prtchr ; ... print it - ld a,e ; E has data bits config - and $03 ; isloate bits 1-0 - add A,'5' ; convert to printable char - call prtchr ; and print it -; - ; print stop bits - ld a,',' ; A := comma - call prtchr ; ... print it - ld a,e ; E has stop bits config - rrca ; isolate bit 2 - rrca ; ... - and $01 ; ... - add A,'1' ; convert to printable char - call prtchr ; and print it -; - ret -; -; Load serial device info for specific unit -; -ldcom: - ld a,(unamod) ; get UNA flag - or a ; set flags - jr nz,ldcomu ; go to UNA variant -; - ; get device type info - ld a,(unit) ; get unit - ld b,bf_ciodevice ; BIOS device call - ld c,a ; ... and put in C - rst 08 ; call HBIOS, C := attributes - ret nz ; return on error - ld a,c ; attributes to A - ld (comatr),a ; save it -; - ; get serial port config - ld b,bf_cioquery ; BIOS serial device query - ld a,(unit) ; get device unit num - ld c,a ; ... and put in C - rst 08 ; call H/UBIOS, DE := line characteristics - ret nz ; abort on error - ld (comcfg),de ; save config -; - xor a ; success - ret -; -ldcomu: ; UNA variant - xor a ; assume attribtues zero - ld (comatr),a ; save it - ; get device info - ld a,(unit) ; get unit - ld b,a ; put unit in B - ld c,$18 ; UNA Get line/driver info func - rst 08 ; call H/UBIOS, DE := line characteristics - ld a,c - or a - jr z,ldcomu1 - cp $43 ; $43 is OK for now (tell John about this) - jr z,ldcomu1 - ret ; return w/ NZ indicating error -; -ldcomu1: - ld (comcfg),de ; save config -; - xor a ; success - ret - -; -; Handle special options -; -option: -; - inc ix ; next char - ld a,(ix) ; get it - cp '?' ; is it a '?' as expected? - jp z,usage ; yes, display usage -; cp 'L' ; is it a 'L', display device list? -; jp z,devlist ; yes, display device list - jp errprm ; anything else is an error -; -; Display usage -; -usage: -; - call crlf ; formatting - ld de,msgban1 ; point to version message part 1 - call prtstr ; print it - ld a,(unamod) ; get UNA flag - or a ; set flags - ld de,msghb ; point to HBIOS mode message - call z,prtstr ; if not UNA, say so - ld de,msgub ; point to UBIOS mode message - call nz,prtstr ; if UNA, say so - call crlf ; formatting - ld de,msgban2 ; point to version message part 2 - call prtstr ; print it - call crlf2 ; blank line - ld de,msguse ; point to usage message - call prtstr ; print it - or $FF ; signal no action performed - ret ; and return -; -; Print character in A without destroying any registers -; -prtchr: - push bc ; save registers - push de - push hl - ld e,a ; character to print in E - ld c,$02 ; BDOS function to output a character - call bdos ; do it - pop hl ; restore registers - pop de - pop bc - ret -; -prtdot: -; - ; shortcut to print a dot preserving all regs - push af ; save af - ld a,'.' ; load dot char - call prtchr ; print it - pop af ; restore af - ret ; done -; -; Print a zero terminated string at (DE) without destroying any registers -; -prtstr: - push de -; -prtstr1: - ld a,(de) ; get next char - or a - jr z,prtstr2 - call prtchr - inc de - jr prtstr1 -; -prtstr2: - pop de ; restore registers - ret -; -; Print the value in A in hex without destroying any registers -; -prthex: - push af ; save AF - push de ; save DE - call hexascii ; convert value in A to hex chars in DE - ld a,d ; get the high order hex char - call prtchr ; print it - ld a,e ; get the low order hex char - call prtchr ; print it - pop de ; restore DE - pop af ; restore AF - ret ; done -; -; print the hex word value in bc -; -prthexword: - push af - ld a,b - call prthex - ld a,c - call prthex - pop af - ret -; -; print the hex dword value in de:hl -; -prthex32: - push bc - push de - pop bc - call prthexword - push hl - pop bc - call prthexword - pop bc - ret -; -; Convert binary value in A to ascii hex characters in DE -; -hexascii: - ld d,a ; save A in D - call hexconv ; convert low nibble of A to hex - ld e,a ; save it in E - ld a,d ; get original value back - rlca ; rotate high order nibble to low bits - rlca - rlca - rlca - call hexconv ; convert nibble - ld d,a ; save it in D - ret ; done -; -; Convert low nibble of A to ascii hex -; -hexconv: - and $0F ; low nibble only - add a,$90 - daa - adc a,$40 - daa - ret -; -; Print value of A or HL in decimal with leading zero suppression -; Use prtdecb for A or prtdecw for HL -; -prtdecb: - push hl - ld h,0 - ld l,a - call prtdecw ; print it - pop hl - ret -; -prtdecw: - push af - push bc - push de - push hl - call prtdec0 - pop hl - pop de - pop bc - pop af - ret -; -prtdec0: - ld e,'0' - ld bc,-10000 - call prtdec1 - ld bc,-1000 - call prtdec1 - ld bc,-100 - call prtdec1 - ld c,-10 - call prtdec1 - ld e,0 - ld c,-1 -prtdec1: - ld a,'0' - 1 -prtdec2: - inc a - add hl,bc - jr c,prtdec2 - sbc hl,bc - cp e - ret z - ld e,0 - call prtchr - ret -; -; Start a new line -; -crlf2: - call crlf ; two of them -crlf: - push af ; preserve AF - ld a,13 ; - call prtchr ; print it - ld a,10 ; - call prtchr ; print it - pop af ; restore AF - ret -; -; Get the next non-blank character from (HL). -; -nonblank: - ld a,(ix) ; load next character - or a ; string ends with a null - ret z ; if null, return pointing to null - cp ' ' ; check for blank - ret nz ; return if not blank - inc ix ; if blank, increment character pointer - jr nonblank ; and loop -; -; Get alpha chars and save in tmpstr -; Length of string returned in A -; -getalpha: -; - ld hl,tmpstr ; location to save chars - ld b,8 ; length counter (tmpstr max chars) - ld c,0 ; init character counter -; -getalpha1: - ld a,(ix) ; get active char - call ucase ; lower case -> uppper case, if needed - cp 'A' ; check for start of alpha range - jr c,getalpha2 ; not alpha, get out - cp 'Z' + 1 ; check for end of alpha range - jr nc,getalpha2 ; not alpha, get out - ; handle alpha char - ld (hl),a ; save it - inc c ; bump char count - inc hl ; inc string pointer - inc ix ; increment buffer ptr - djnz getalpha1 ; if space, loop for more chars -; -getalpha2: ; non-alpha, clean up and return - ld (hl),0 ; terminate string - ld a,c ; string length to A - or a ; set flags - ret ; and return -; -; Get numeric chars and convert to number returned in A -; Carry flag set on overflow -; -getnum: - ld c,0 ; C is working register -getnum1: - ld a,(ix) ; get the active char - cp '0' ; compare to ascii '0' - jr c,getnum2 ; abort if below - cp '9' + 1 ; compare to ascii '9' - jr nc,getnum2 ; abort if above -; - ; valid digit, add new digit to C - ld a,c ; get working value to A - rlca ; multiply by 10 - ret c ; overflow, return with carry set - rlca ; ... - ret c ; overflow, return with carry set - add a,c ; ... - ret c ; overflow, return with carry set - rlca ; ... - ret c ; overflow, return with carry set - ld c,a ; back to C - ld a,(ix) ; get new digit - sub '0' ; make binary - add a,c ; add in working value - ret c ; overflow, return with carry set - ld c,a ; back to C -; - inc ix ; bump to next char - jr getnum1 ; loop -; -getnum2: ; return result - ld a,c ; return result in A - or a ; with flags set, CF is cleared - ret -; -; Get numeric chars and convert to 32-bit number returned in DE:HL -; Carry flag set on overflow -; -getnum32: - ld de,0 ; Initialize DE:HL - ld hl,0 ; ... to zero -getnum32a: - ld a,(ix) ; get the active char - cp '0' ; compare to ascii '0' - jr c,getnum32c ; abort if below - cp '9' + 1 ; compare to ascii '9' - jr nc,getnum32c ; abort if above -; - ; valid digit, multiply DE:HL by 10 - ; X * 10 = (((x * 2 * 2) + x)) * 2 - push de - push hl -; - call getnum32e ; DE:HL *= 2 - jr c,getnum32d ; if overflow, ret w/ CF & stack pop -; - call getnum32e ; DE:HL *= 2 - jr c,getnum32d ; if overflow, ret w/ CF & stack pop -; - pop bc ; DE:HL += X - add hl,bc - ex de,hl - pop bc - adc hl,bc - ex de,hl - ret c ; if overflow, ret w/ CF -; - call getnum32e ; DE:HL *= 2 - ret c ; if overflow, ret w/ CF -; - ; now add in new digit - ld a,(ix) ; get the active char - sub '0' ; make it binary - add a,l ; add to L, CF updated - ld l,a ; back to L - jr nc,getnum32b ; if no carry, done - inc h ; otherwise, bump H - jr nz,getnum32b ; if no overflow, done - inc e ; otherwise, bump E - jr nz,getnum32b ; if no overflow, done - inc d ; otherwise, bump D - jr nz,getnum32b ; if no overflow, done - scf ; set carry flag to indicate overflow - ret ; and return -; -getnum32b: - inc ix ; bump to next char - jr getnum32a ; loop -; -getnum32c: - ; successful completion - xor a ; clear flags - ret ; and return -; -getnum32d: - ; special overflow exit with stack fixup - pop hl ; burn 2 - pop hl ; ... stack entries - ret ; and return -; -getnum32e: - ; DE:HL := DE:HL * 2 - sla l - rl h - rl e - rl d - ret -; -; Compare null terminated strings at HL & DE -; If equal return with Z set, else NZ -; -strcmp: - ld a,(de) ; get current source char - cp (hl) ; compare to current dest char - ret nz ; compare failed, return with NZ - or a ; set flags - ret z ; end of string, match, return with Z set - inc de ; point to next char in source - inc hl ; point to next char in dest - jr strcmp ; loop till done -; -; Convert character in A to uppercase -; -ucase: - cp 'a' ; if below 'a' - ret c ; ... do nothing and return - cp 'z' + 1 ; if above 'z' - ret nc ; ... do nothing and return - res 5,a ; clear bit 5 to make lower case -> upper case - ret ; and return -; -; Add the value in A to HL (HL := HL + A) -; -addhl: - add a,l ; A := A + L - ld l,a ; Put result back in L - ret nc ; if no carry, we are done - inc h ; if carry, increment H - ret ; and return -; -; Integer divide DE:HL by C -; result in DE:HL, remainder in A -; clobbers F, B -; -div32x8: - xor a - ld b,32 -div32x8a: - add hl,hl - rl e - rl d - rla - cp c - jr c,div32x8b - sub c - inc l -div32x8b: - djnz div32x8a - ret -; -; Jump indirect to address in HL -; -jphl: - jp (hl) -; -; Errors -; -erruse: ; command usage error (syntax) - ld de,msguse - jr err -; -errprm: ; command parameter error (syntax) - ld de,msgprm - jr err -; -errinv: ; invalid HBIOS, signature not found - ld de,msginv - jr err -; -errver: ; unsupported HBIOS version - ld de,msgver - jr err -; -errdev: ; invalid device name - ld de,msgdev - jr err -; -errnum: ; invalid number parsed, overflow - ld de,msgnum - jr err -; -errunt: ; Invalid device unit specified - ld de,msgunt - jr err -; -errcfg: ; Invalid device configuration specified - ld de,msgcfg - jr err -; -err: ; print error string and return error signal - call crlf2 ; print newline -; -err1: ; without the leading crlf - call prtstr ; print error string -; -err2: ; without the string -; call crlf ; print newline - or $FF ; signal error - ret ; done -; -;=============================================================================== -; Utility modules -;=============================================================================== -; -#include "encode.asm" -#include "decode.asm" -#include "bcd.asm" -; -;=============================================================================== -; Storage Section -;=============================================================================== -; -; -bioloc .dw 0 ; CBIOS starting address -unit .db 0 ; source unit -; -unamod .db 0 ; $FF indicates UNA UBIOS active -; -tmpstr .fill 9,0 ; temporary string of up to 8 chars, zero term -bcdtmp .fill 5,0 ; temporary bcd number storage -; -comcnt .db 0 ; count of com ports -comatr .db 0 ; com port attributes -comcfg .dw 0 ; com port configuration -; -parmap .db "NONENMNS" ; parity character lookup table -; -pflag .db 0 ; $FF indicates prompt option set -; -strcom .db "COM",0 ; serial device name string -strterm .db "VDU",0 ; terminal device string -; -stksav .dw 0 ; stack pointer saved at start - .fill stksiz,0 ; stack -stack .equ $ ; stack top -; -; Messages -; -indent .db " ",0 -msgban1 .db "MODE v1.2, 24-Jul-2018",0 -msghb .db " [HBIOS]",0 -msgub .db " [UBIOS]",0 -msgban2 .db "Copyright (C) 2017, Wayne Warthen, GNU GPL v3",0 -msguse .db "Usage: MODE COM: [[,[,[,]]]] [/P]",13,10 - .db " ex. MODE /? (display version and usage)",13,10 - .db " MODE (display config of all serial ports)",13,10 - .db " MODE COM0: (display serial unit 0 config)",13,10 - .db " MODE COM1: 9600,N,8,1 (set serial unit 1 config)",0 -msgprm .db "Parameter error (MODE /? for usage)",0 -msginv .db "Invalid BIOS (signature missing)",0 -msgver .db "Unexpected HBIOS version",0 -msgdev .db "Invalid device name",0 -msgnum .db "Unit or slice number invalid",0 -msgunt .db "Invalid device unit number specified",0 -msgcfg .db "Invalid device configuration specified",0 -msgpmt .db "Prepare line then press ",0 -; - .end diff --git a/Source/Apps/mode/Build.cmd b/Source/Apps/mode/Build.cmd new file mode 100644 index 00000000..2829ee8c --- /dev/null +++ b/Source/Apps/mode/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF mode.asm mode.com mode.lst || exit /b + +copy /Y mode.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/mode/Clean.cmd b/Source/Apps/mode/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/mode/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/mode/Makefile b/Source/Apps/mode/Makefile new file mode 100644 index 00000000..ba868101 --- /dev/null +++ b/Source/Apps/mode/Makefile @@ -0,0 +1,7 @@ +OBJECTS = mode.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/bcd.asm b/Source/Apps/mode/bcd.asm similarity index 100% rename from Source/Apps/bcd.asm rename to Source/Apps/mode/bcd.asm diff --git a/Source/Apps/decode.asm b/Source/Apps/mode/decode.asm similarity index 100% rename from Source/Apps/decode.asm rename to Source/Apps/mode/decode.asm diff --git a/Source/Apps/encode.asm b/Source/Apps/mode/encode.asm similarity index 100% rename from Source/Apps/encode.asm rename to Source/Apps/mode/encode.asm diff --git a/Source/Apps/mode/mode.asm b/Source/Apps/mode/mode.asm new file mode 100644 index 00000000..45f3a91f --- /dev/null +++ b/Source/Apps/mode/mode.asm @@ -0,0 +1,1039 @@ +;=============================================================================== +; MODE - Display and/or modify device configuration +; +;=============================================================================== +; +; Author: Wayne Warthen (wwarthen@gmail.com) +;_______________________________________________________________________________ +; +; Usage: +; MODE /? +; MODE COM: [[,[,[,]]]] [/P] +; +; is numerical baudrate +; is (N)one, (O)dd, (E)ven, (M)ark, or (S)pace +; is number of data bits, typically 7 or 8 +; is number of stop bits, typically 1 or 2 +; /P prompts user prior to setting new configuration +; +; Examples: +; MODE /? (display command usage) +; MODE (display configuration of all serial ports) +; MODE COM0: (display configuration of serial unit 0) +; MODE COM1: 9600,N,8,1 (set serial unit 1 configuration) +; +; Notes: +; - Parameters not provided will remain unchanged +; - Device must support specified configuration +;_______________________________________________________________________________ +; +; Change Log: +; 2017-08-16 [WBW] Initial release +; 2017-08-28 [WBW] Handle UNACPM +; 2018-07-24 [WBW] Fixed bug in getnum23 routine (credit Phil Summers) +;_______________________________________________________________________________ +; +; ToDo: +; 1) Implement flow control settings +;_______________________________________________________________________________ +; +#include "../../ver.inc" +; +;=============================================================================== +; Definitions +;=============================================================================== +; +stksiz .equ $40 ; Working stack size +; +restart .equ $0000 ; CP/M restart vector +bdos .equ $0005 ; BDOS invocation vector +; +ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr +; +bf_cioinit .equ $04 ; HBIOS: CIOINIT function +bf_cioquery .equ $05 ; HBIOS: CIOQUERY function +bf_ciodevice .equ $06 ; HBIOS: CIODEVICE function +bf_sysget .equ $F8 ; HBIOS: SYSGET function +; +;=============================================================================== +; Code Section +;=============================================================================== +; + .org $100 +; + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack +; + ; initialization + call init ; initialize + jr nz,exit ; abort if init fails +; + ; get the target device + call getdev ; parse device/id from command line + jr nz,exit ; abort on error +; + ; process the configuration request + call process ; parse device/id from command line + jr nz,exit ; abort on error +; +exit: ; clean up and return to command processor + call crlf ; formatting + ld sp,(stksav) ; restore stack + jp restart ; return to CP/M via restart + ret ; return to CP/M w/o restart +; +; Initialization +; +init: + ; locate start of cbios (function jump table) + ld hl,(restart+1) ; load address of CP/M restart vector + ld de,-3 ; adjustment for start of table + add hl,de ; HL now has start of table + ld (bioloc),hl ; save it +; + ; check for UNA (UBIOS) + ld a,($FFFD) ; fixed location of UNA API vector + cp $C3 ; jp instruction? + jr nz,initwbw ; if not, not UNA + ld hl,($FFFE) ; get jp address + ld a,(hl) ; get byte at target address + cp $FD ; first byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA + inc hl ; point to next byte + ld a,(hl) ; get next byte + cp $E5 ; second byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA +; + ; UNA initialization + ld hl,unamod ; point to UNA mode flag + ld (hl),$FF ; set UNA mode flag + ld a,$FF ; assume max units for UNA + ld (comcnt),a ; ... and save it + jr initx ; UNA init done +; +initwbw: + ; get location of config data and verify integrity + ld hl,(ident) ; HL := adr or RomWBW HBIOS ident + ld a,(hl) ; get first byte of RomWBW marker + cp 'W' ; match? + jp nz,errinv ; abort with invalid config block + inc hl ; next byte (marker byte 2) + ld a,(hl) ; load it + cp ~'W' ; match? + jp nz,errinv ; abort with invalid config block + inc hl ; next byte (major/minor version) + ld a,(hl) ; load it + cp rmj << 4 | rmn ; match? + jp nz,errver ; abort with invalid os version +; + ; RomWBW initialization + ld b,bf_sysget ; BIOS SYSGET function + ld c,$00 ; CIOCNT subfunction + rst 08 ; E := serial device unit count + ld a,e ; count to A + ld (comcnt),a ; save it +; +initx + ; initialization complete + xor a ; signal success + ret ; return +; +; Get target device specification (e.g., "COM1:") and save +; as devicetype/id. +; +getdev: + ; skip to start of first parm + ld ix,$81 ; point to start of parm area (past len byte) + call nonblank ; skip to next non-blank char + jp z,prtcomall ; no parms, show all active ports +; +getdev1: + ; process options (if any) + cp '/' ; option prefix? + jr nz,getdev2 ; not an option, continue + call option ; process option + ret nz ; some options mean we are done (e.g., "/?") + inc ix ; skip option character + call nonblank ; skip whitespace + jr getdev1 ; continue option checking +; +getdev2: + ; parse device mnemonic (e.g., "COM1") into tmpstr + call getalpha ; extract alpha portion (e.g., "COM") + call getnum ; extract numeric portion + jp c,errunt ; handle overflow as invalid unit + ld (unit),a ; save as unit number +; + ; skip terminating ':' in device spec + ld a,(ix) ; get current char + cp ':' ; colon? + jr nz,getdev3 ; done if no colon + inc ix ; otherwise, skip the colon +; +getdev3: + call nonblank ; gobble any remaining whitespace + xor a ; indicate success + ret ; and return +; +; Process device +; +process: + ; match and branch according to device mnemonic + ld hl,tmpstr ; point to start of extracted string + ld de,strcom ; point to "COM" string + call strcmp ; and compare + jp z,comset ; handle COM port configuration + jp errdev ; abort if bad device name +; +; Display or change serial port configuration +; +comset: + ; check for valid unit number + ld hl,comcnt ; point to com device unit count + ld a,(unit) ; get com device unit count + cp (hl) ; compare to count (still in E) + jr c,comset1 ; unit < count, continue + jp errunt ; handle unit number error +; +comset1: + call ldcom ; load config for port +; + ld a,(comatr) ; get attributes + bit 7,a ; terminal? + jp nz,prtcom ; terminal not configurable +; + ld a,(ix) ; get current char + cp 0 ; nothing more? + jp z,prtcom ; no config parms, print current device config +; + ; parse and update baudrate + ld a,(ix) ; get current byte + cp '0' ; check for + jr c,comset1a ; ... valid digit + cp '9'+1 ; ... else jump ahead + jr nc,comset1a ; ... to handle empty +; + call getnum32 ; get baud rate into DE:HL + jp c,errcfg ; Handle overflow error + ld c,75 ; Constant for baud rate encode + call encode ; encode into C:4-0 + jp nz,errcfg ; Error if encode fails + ld a,(comcfg+1) ; Get high byte of config + and %11100000 ; strip out old baud rate bits + or c ; insert new baud rate bits + ld (comcfg+1),a ; save it +; +comset1a: + ; parse and update parity + call nonblank ; skip blanks + jp z,comset9 ; end of parms + cp ',' ; comma, as expected? + jp nz,comset8 ; check for trailing options + inc ix ; skip comma + call nonblank ; skip possible blanks + call ucase + ; lookup parity value + ld c,0 + cp 'N' + jr z,comset2 + ld c,1 + cp 'O' + jr z,comset2 + ld c,3 + cp 'E' + jr z,comset2 + ld c,5 + cp 'M' + jr z,comset2 + ld c,7 + cp 'S' + jr z,comset2 + jr comset3 ; unexpected parity char, possibly empty +; +comset2: + ; update parity value + ld a,c ; new parity value to A + rlca ; rotate to bits 5-3 + rlca ; + rlca ; + ld c,a ; and back to C + ld a,(comcfg) ; parity is in comcfg:5-3 + and %11000111 ; strip old value + or c ; apply new value + ld (comcfg),a ; and save it + inc ix ; bump past parity char +; +comset3: + ; parse & update data bits + call nonblank ; skip blanks + jr z,comset9 ; end of parms + cp ',' ; comma, as expected? + jr nz,comset8 ; check for trailing options + inc ix ; skip comma + call nonblank ; skip possible blanks + sub '5' ; normalize value + cp 4 ; value should now be 0-3 + jr nc,comset4 ; unexpected, possibly empty + ld c,a ; move new value to C + ld a,(comcfg) ; data bits is in comcfg:1-0 + and %11111100 ; strip old value + or c ; apply new value + ld (comcfg),a ; and save it + inc ix ; bump past data bits char +; +comset4: + ; parse & update stop bits + call nonblank ; skip blanks + jr z,comset9 ; end of parms + cp ',' ; comma, as expected? + jr nz,comset8 ; check for trailing options + inc ix ; skip comma + call nonblank ; skip possible blanks + sub '1' ; normalize value + cp 2 ; value should now be 0-1 + jr nc,comset8 ; unexpected, possibly empty + rlca ; rotate to bit 2 + rlca + ld c,a ; move new value to C + ld a,(comcfg) ; stop bit is in comcfg:2 + and %11111011 ; strip old value + or c ; apply new value + ld (comcfg),a ; and save it + inc ix ; bump past stop bits char +; +comset8: + ; trailing options + call nonblank ; skip blanks + jr z,comset9 ; end of parms + cp '/' ; option introducer? + jp nz,errprm ; parameter error + inc ix ; bump part '/' + ld a,(ix) ; get character + call ucase ; make upper case + cp 'P' ; only valid option + jp nz,errprm ; parameter error + ld a,$FF ; set prompt value on + ld (pflag),a ; save it + inc ix ; bump past character + jr comset8 ; process more parms +; +comset9: + ; display new config + ld de,(comcfg) ; get new config + call prtcom ; print it + ld a,(pflag) ; get prompt flag + or a ; set flags + jr z,comset9b ; bypass if not requested + call crlf2 ; spacing + ld de,indent ; indent + call prtstr ; do it + ld de,msgpmt ; point to prmopt message + call prtstr ; print it +; + ld b,64 +comset9a: + xor a + call prtchr + djnz comset9a +; +comset9b: + ; check for UNA + ld a,(unamod) ; get UNA flag + or a ; set flags + jr nz,comsetu ; go to UNA variant +; + ; implement new config + ld de,(comcfg) ; get new config value to DE + ld b,bf_cioinit ; BIOS serial init + ld a,(unit) ; get serial device unit + ld c,a ; ... into C + rst 08 ; call HBIOS + jp nz,errcfg ; handle error + jr comsetx ; common exit +; +comsetu: + ; implement new config under UNA + ld de,(comcfg) ; get new config value to DE + ld c,$10 ; UNA INIT function + ld a,(unit) ; get serial device unit + ld b,a ; ... into B + rst 08 ; call HBIOS + jp nz,errcfg ; handle error + jr comsetx ; common exit +; +comsetx: + ld a,(pflag) ; get prompt flag + or a ; set flags + jr z,comsetx2 ; bypass if not requested +comsetx1: + ld c,$01 ; console read + call bdos ; do it + cp $0D ; CR? + jr nz,comsetx1 ; loop as needed +; +comsetx2: + xor a + ret +; +; Print configuration of all serial ports +; +prtcomall: + ld a,(comcnt) ; get com device unit count + ld b,a ; init B as loop counter + ld c,0 ; init C as unit index +; +prtcomall1: + push bc ; save loop control +; + ; get port info + ld a,c ; put unit number + ld (unit),a ; ... into unit + call ldcom ; get config + jr z,prtcomall2 ; no error, continue + pop bc ; unwind stack + ret ; and return with NZ +; +prtcomall2: + ; print config for port + call prtcom ; print line for this port +; + ; loop as needed + pop bc ; restore loop control + inc c ; next unit index + djnz prtcomall1 ; loop till done +; + or $FF ; indicate nothing more to do + ret ; finished +; +; Print configuration of serial port +; +prtcom: + ; print leader (e.g., "COM0: ") + call crlf + ld de,indent + call prtstr + ld de,strcom + call prtstr + ld a,(unit) + call prtdecb + ld a,':' + call prtchr + ld a,' ' + call prtchr +; + ld a,(comatr) ; get attribute byte + bit 7,a ; 0=RS232, 1=terminal + jr z,prtcom1 ; handle serial port configuration +; + ; this is a terminal, just say so + ld de,strterm ; point to string + call prtstr ; print it + ret ; and return +; +prtcom1: + ld de,(comcfg) ; load config to DE +; + ; print baud rate + push de ; save it + ld a,d ; baud rate is in D + and $1F ; ... bits 4-0 + ld l,a ; move to L + ld h,0 ; setup H for decode routine + ld de,75 ; set DE to baud rate decode constant + call decode ; decode baud rate, DE:HL := baud rate + ld bc,bcdtmp ; point to temp bcd buffer + call bin2bcd ; convert baud to BCD + call prtbcd ; and print in decimal + pop de ; restore line characteristics +; + ; print parity + ld a,',' ; A := comma + call prtchr ; ... print it + ld a,e ; E has parity config + rrca ; isolate bits 5-3 + rrca ; ... + rrca ; ... + and $07 ; ... + ld hl,parmap ; HL := start of parity char table + call addhl ; index into table + ld a,(hl) ; get resulting parity char + call prtchr ; and print +; + ; print data bits + ld a,',' ; A := comma + call prtchr ; ... print it + ld a,e ; E has data bits config + and $03 ; isloate bits 1-0 + add A,'5' ; convert to printable char + call prtchr ; and print it +; + ; print stop bits + ld a,',' ; A := comma + call prtchr ; ... print it + ld a,e ; E has stop bits config + rrca ; isolate bit 2 + rrca ; ... + and $01 ; ... + add A,'1' ; convert to printable char + call prtchr ; and print it +; + ret +; +; Load serial device info for specific unit +; +ldcom: + ld a,(unamod) ; get UNA flag + or a ; set flags + jr nz,ldcomu ; go to UNA variant +; + ; get device type info + ld a,(unit) ; get unit + ld b,bf_ciodevice ; BIOS device call + ld c,a ; ... and put in C + rst 08 ; call HBIOS, C := attributes + ret nz ; return on error + ld a,c ; attributes to A + ld (comatr),a ; save it +; + ; get serial port config + ld b,bf_cioquery ; BIOS serial device query + ld a,(unit) ; get device unit num + ld c,a ; ... and put in C + rst 08 ; call H/UBIOS, DE := line characteristics + ret nz ; abort on error + ld (comcfg),de ; save config +; + xor a ; success + ret +; +ldcomu: ; UNA variant + xor a ; assume attribtues zero + ld (comatr),a ; save it + ; get device info + ld a,(unit) ; get unit + ld b,a ; put unit in B + ld c,$18 ; UNA Get line/driver info func + rst 08 ; call H/UBIOS, DE := line characteristics + ld a,c + or a + jr z,ldcomu1 + cp $43 ; $43 is OK for now (tell John about this) + jr z,ldcomu1 + ret ; return w/ NZ indicating error +; +ldcomu1: + ld (comcfg),de ; save config +; + xor a ; success + ret + +; +; Handle special options +; +option: +; + inc ix ; next char + ld a,(ix) ; get it + cp '?' ; is it a '?' as expected? + jp z,usage ; yes, display usage +; cp 'L' ; is it a 'L', display device list? +; jp z,devlist ; yes, display device list + jp errprm ; anything else is an error +; +; Display usage +; +usage: +; + call crlf ; formatting + ld de,msgban1 ; point to version message part 1 + call prtstr ; print it + ld a,(unamod) ; get UNA flag + or a ; set flags + ld de,msghb ; point to HBIOS mode message + call z,prtstr ; if not UNA, say so + ld de,msgub ; point to UBIOS mode message + call nz,prtstr ; if UNA, say so + call crlf ; formatting + ld de,msgban2 ; point to version message part 2 + call prtstr ; print it + call crlf2 ; blank line + ld de,msguse ; point to usage message + call prtstr ; print it + or $FF ; signal no action performed + ret ; and return +; +; Print character in A without destroying any registers +; +prtchr: + push bc ; save registers + push de + push hl + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it + pop hl ; restore registers + pop de + pop bc + ret +; +prtdot: +; + ; shortcut to print a dot preserving all regs + push af ; save af + ld a,'.' ; load dot char + call prtchr ; print it + pop af ; restore af + ret ; done +; +; Print a zero terminated string at (DE) without destroying any registers +; +prtstr: + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + ret +; +; Print the value in A in hex without destroying any registers +; +prthex: + push af ; save AF + push de ; save DE + call hexascii ; convert value in A to hex chars in DE + ld a,d ; get the high order hex char + call prtchr ; print it + ld a,e ; get the low order hex char + call prtchr ; print it + pop de ; restore DE + pop af ; restore AF + ret ; done +; +; print the hex word value in bc +; +prthexword: + push af + ld a,b + call prthex + ld a,c + call prthex + pop af + ret +; +; print the hex dword value in de:hl +; +prthex32: + push bc + push de + pop bc + call prthexword + push hl + pop bc + call prthexword + pop bc + ret +; +; Convert binary value in A to ascii hex characters in DE +; +hexascii: + ld d,a ; save A in D + call hexconv ; convert low nibble of A to hex + ld e,a ; save it in E + ld a,d ; get original value back + rlca ; rotate high order nibble to low bits + rlca + rlca + rlca + call hexconv ; convert nibble + ld d,a ; save it in D + ret ; done +; +; Convert low nibble of A to ascii hex +; +hexconv: + and $0F ; low nibble only + add a,$90 + daa + adc a,$40 + daa + ret +; +; Print value of A or HL in decimal with leading zero suppression +; Use prtdecb for A or prtdecw for HL +; +prtdecb: + push hl + ld h,0 + ld l,a + call prtdecw ; print it + pop hl + ret +; +prtdecw: + push af + push bc + push de + push hl + call prtdec0 + pop hl + pop de + pop bc + pop af + ret +; +prtdec0: + ld e,'0' + ld bc,-10000 + call prtdec1 + ld bc,-1000 + call prtdec1 + ld bc,-100 + call prtdec1 + ld c,-10 + call prtdec1 + ld e,0 + ld c,-1 +prtdec1: + ld a,'0' - 1 +prtdec2: + inc a + add hl,bc + jr c,prtdec2 + sbc hl,bc + cp e + ret z + ld e,0 + call prtchr + ret +; +; Start a new line +; +crlf2: + call crlf ; two of them +crlf: + push af ; preserve AF + ld a,13 ; + call prtchr ; print it + ld a,10 ; + call prtchr ; print it + pop af ; restore AF + ret +; +; Get the next non-blank character from (HL). +; +nonblank: + ld a,(ix) ; load next character + or a ; string ends with a null + ret z ; if null, return pointing to null + cp ' ' ; check for blank + ret nz ; return if not blank + inc ix ; if blank, increment character pointer + jr nonblank ; and loop +; +; Get alpha chars and save in tmpstr +; Length of string returned in A +; +getalpha: +; + ld hl,tmpstr ; location to save chars + ld b,8 ; length counter (tmpstr max chars) + ld c,0 ; init character counter +; +getalpha1: + ld a,(ix) ; get active char + call ucase ; lower case -> uppper case, if needed + cp 'A' ; check for start of alpha range + jr c,getalpha2 ; not alpha, get out + cp 'Z' + 1 ; check for end of alpha range + jr nc,getalpha2 ; not alpha, get out + ; handle alpha char + ld (hl),a ; save it + inc c ; bump char count + inc hl ; inc string pointer + inc ix ; increment buffer ptr + djnz getalpha1 ; if space, loop for more chars +; +getalpha2: ; non-alpha, clean up and return + ld (hl),0 ; terminate string + ld a,c ; string length to A + or a ; set flags + ret ; and return +; +; Get numeric chars and convert to number returned in A +; Carry flag set on overflow +; +getnum: + ld c,0 ; C is working register +getnum1: + ld a,(ix) ; get the active char + cp '0' ; compare to ascii '0' + jr c,getnum2 ; abort if below + cp '9' + 1 ; compare to ascii '9' + jr nc,getnum2 ; abort if above +; + ; valid digit, add new digit to C + ld a,c ; get working value to A + rlca ; multiply by 10 + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + add a,c ; ... + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + ld c,a ; back to C + ld a,(ix) ; get new digit + sub '0' ; make binary + add a,c ; add in working value + ret c ; overflow, return with carry set + ld c,a ; back to C +; + inc ix ; bump to next char + jr getnum1 ; loop +; +getnum2: ; return result + ld a,c ; return result in A + or a ; with flags set, CF is cleared + ret +; +; Get numeric chars and convert to 32-bit number returned in DE:HL +; Carry flag set on overflow +; +getnum32: + ld de,0 ; Initialize DE:HL + ld hl,0 ; ... to zero +getnum32a: + ld a,(ix) ; get the active char + cp '0' ; compare to ascii '0' + jr c,getnum32c ; abort if below + cp '9' + 1 ; compare to ascii '9' + jr nc,getnum32c ; abort if above +; + ; valid digit, multiply DE:HL by 10 + ; X * 10 = (((x * 2 * 2) + x)) * 2 + push de + push hl +; + call getnum32e ; DE:HL *= 2 + jr c,getnum32d ; if overflow, ret w/ CF & stack pop +; + call getnum32e ; DE:HL *= 2 + jr c,getnum32d ; if overflow, ret w/ CF & stack pop +; + pop bc ; DE:HL += X + add hl,bc + ex de,hl + pop bc + adc hl,bc + ex de,hl + ret c ; if overflow, ret w/ CF +; + call getnum32e ; DE:HL *= 2 + ret c ; if overflow, ret w/ CF +; + ; now add in new digit + ld a,(ix) ; get the active char + sub '0' ; make it binary + add a,l ; add to L, CF updated + ld l,a ; back to L + jr nc,getnum32b ; if no carry, done + inc h ; otherwise, bump H + jr nz,getnum32b ; if no overflow, done + inc e ; otherwise, bump E + jr nz,getnum32b ; if no overflow, done + inc d ; otherwise, bump D + jr nz,getnum32b ; if no overflow, done + scf ; set carry flag to indicate overflow + ret ; and return +; +getnum32b: + inc ix ; bump to next char + jr getnum32a ; loop +; +getnum32c: + ; successful completion + xor a ; clear flags + ret ; and return +; +getnum32d: + ; special overflow exit with stack fixup + pop hl ; burn 2 + pop hl ; ... stack entries + ret ; and return +; +getnum32e: + ; DE:HL := DE:HL * 2 + sla l + rl h + rl e + rl d + ret +; +; Compare null terminated strings at HL & DE +; If equal return with Z set, else NZ +; +strcmp: + ld a,(de) ; get current source char + cp (hl) ; compare to current dest char + ret nz ; compare failed, return with NZ + or a ; set flags + ret z ; end of string, match, return with Z set + inc de ; point to next char in source + inc hl ; point to next char in dest + jr strcmp ; loop till done +; +; Convert character in A to uppercase +; +ucase: + cp 'a' ; if below 'a' + ret c ; ... do nothing and return + cp 'z' + 1 ; if above 'z' + ret nc ; ... do nothing and return + res 5,a ; clear bit 5 to make lower case -> upper case + ret ; and return +; +; Add the value in A to HL (HL := HL + A) +; +addhl: + add a,l ; A := A + L + ld l,a ; Put result back in L + ret nc ; if no carry, we are done + inc h ; if carry, increment H + ret ; and return +; +; Integer divide DE:HL by C +; result in DE:HL, remainder in A +; clobbers F, B +; +div32x8: + xor a + ld b,32 +div32x8a: + add hl,hl + rl e + rl d + rla + cp c + jr c,div32x8b + sub c + inc l +div32x8b: + djnz div32x8a + ret +; +; Jump indirect to address in HL +; +jphl: + jp (hl) +; +; Errors +; +erruse: ; command usage error (syntax) + ld de,msguse + jr err +; +errprm: ; command parameter error (syntax) + ld de,msgprm + jr err +; +errinv: ; invalid HBIOS, signature not found + ld de,msginv + jr err +; +errver: ; unsupported HBIOS version + ld de,msgver + jr err +; +errdev: ; invalid device name + ld de,msgdev + jr err +; +errnum: ; invalid number parsed, overflow + ld de,msgnum + jr err +; +errunt: ; Invalid device unit specified + ld de,msgunt + jr err +; +errcfg: ; Invalid device configuration specified + ld de,msgcfg + jr err +; +err: ; print error string and return error signal + call crlf2 ; print newline +; +err1: ; without the leading crlf + call prtstr ; print error string +; +err2: ; without the string +; call crlf ; print newline + or $FF ; signal error + ret ; done +; +;=============================================================================== +; Utility modules +;=============================================================================== +; +#include "encode.asm" +#include "decode.asm" +#include "bcd.asm" +; +;=============================================================================== +; Storage Section +;=============================================================================== +; +; +bioloc .dw 0 ; CBIOS starting address +unit .db 0 ; source unit +; +unamod .db 0 ; $FF indicates UNA UBIOS active +; +tmpstr .fill 9,0 ; temporary string of up to 8 chars, zero term +bcdtmp .fill 5,0 ; temporary bcd number storage +; +comcnt .db 0 ; count of com ports +comatr .db 0 ; com port attributes +comcfg .dw 0 ; com port configuration +; +parmap .db "NONENMNS" ; parity character lookup table +; +pflag .db 0 ; $FF indicates prompt option set +; +strcom .db "COM",0 ; serial device name string +strterm .db "VDU",0 ; terminal device string +; +stksav .dw 0 ; stack pointer saved at start + .fill stksiz,0 ; stack +stack .equ $ ; stack top +; +; Messages +; +indent .db " ",0 +msgban1 .db "MODE v1.2, 24-Jul-2018",0 +msghb .db " [HBIOS]",0 +msgub .db " [UBIOS]",0 +msgban2 .db "Copyright (C) 2017, Wayne Warthen, GNU GPL v3",0 +msguse .db "Usage: MODE COM: [[,[,[,]]]] [/P]",13,10 + .db " ex. MODE /? (display version and usage)",13,10 + .db " MODE (display config of all serial ports)",13,10 + .db " MODE COM0: (display serial unit 0 config)",13,10 + .db " MODE COM1: 9600,N,8,1 (set serial unit 1 config)",0 +msgprm .db "Parameter error (MODE /? for usage)",0 +msginv .db "Invalid BIOS (signature missing)",0 +msgver .db "Unexpected HBIOS version",0 +msgdev .db "Invalid device name",0 +msgnum .db "Unit or slice number invalid",0 +msgunt .db "Invalid device unit number specified",0 +msgcfg .db "Invalid device configuration specified",0 +msgpmt .db "Prepare line then press ",0 +; + .end diff --git a/Source/Apps/reboot/Build.cmd b/Source/Apps/reboot/Build.cmd new file mode 100644 index 00000000..ec727ea5 --- /dev/null +++ b/Source/Apps/reboot/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF reboot.asm reboot.com reboot.lst || exit /b + +copy /Y reboot.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/reboot/Clean.cmd b/Source/Apps/reboot/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/reboot/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/reboot/Makefile b/Source/Apps/reboot/Makefile new file mode 100644 index 00000000..b3b30efc --- /dev/null +++ b/Source/Apps/reboot/Makefile @@ -0,0 +1,7 @@ +OBJECTS = reboot.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/reboot/reboot.asm b/Source/Apps/reboot/reboot.asm new file mode 100644 index 00000000..e8dd8e79 --- /dev/null +++ b/Source/Apps/reboot/reboot.asm @@ -0,0 +1,299 @@ +;============================================================================== +; REBOOT - Allows the user to Cold or Warm Boot the RomWBW System +; Version 1.0 12-October-2024 +;============================================================================== +; +; Author: MartinR (October 2024) +; Based **very heavily** on code by Wayne Warthen (wwarthen@gmail.com) +;______________________________________________________________________________ +; +; Usage: +; REBOOT [/C] [/W] [/?] +; ex: REBOOT Display version and usage +; REBOOT /? Display version and usage +; REBOOT /C Cold boot RomWBW system +; REBOOT /W Warm boot RomWBW system +; +; Operation: +; Cold or warm boots a RomWBW system depending on the user option selected. +; +; This code will only execute on a Z80 CPU (or derivitive) +; +; This source code assembles with TASM V3.2 under Windows-11 using the +; following command line: +; tasm -80 -g3 -l REBOOT.ASM REBOOT.COM +; ie: Z80 CPU; output format 'binary' named .COM (rather than .OBJ) +; and includes a symbol table as part of the listing file. +;______________________________________________________________________________ +; +; Change Log: +; 2024-09-11 [WBW] Release of RomWBW CPU Speed Selector v1.0 used as the basis +; 2024-10-12 [MR ] Initial release of version 1.0 +;______________________________________________________________________________ +; +; Include Files +; +#include "../../ver.inc" ; Used for building RomWBW +#include "../../HBIOS/hbios.inc" + +;#include "ver.inc" ; Used for testing purposes.... +;#include "hbios.inc" ; ....during code development +; +;=============================================================================== +; +; General operational equates (should not requre adjustment) +; +stksiz .equ $40 ; Working stack size +; +restart .equ $0000 ; CP/M restart vector +bdos .equ $0005 ; BDOS invocation vector +; +bf_sysreset .equ $F0 ; restart system +bf_sysres_int .equ $00 ; reset hbios internal +bf_sysres_warm .equ $01 ; warm start (restart boot loader) +bf_sysres_cold .equ $02 ; cold start +; +ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr +; +;=============================================================================== +; + .org $0100 ; standard CP/M TPA executable +; + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack +; + call crlf + ld de,str_banner ; banner + call prtstr +; + ; initialization + call init ; initialize + jr nz,exit ; abort if init fails +; + call main ; do the real work +; +exit: + ; clean up and return to command processor + call crlf ; formatting + ld sp,(stksav) ; restore stack + jp restart ; return to CP/M via restart +; +; +;=============================================================================== +; Main Program +;=============================================================================== +; +; Initialization +; +init: + ; check for UNA (UBIOS) + ld a,($FFFD) ; fixed location of UNA API vector + cp $C3 ; jp instruction? + jr nz,initwbw ; if not, not UNA + ld hl,($FFFE) ; get jp address + ld a,(hl) ; get byte at target address + cp $FD ; first byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA + inc hl ; point to next byte + ld a,(hl) ; get next byte + cp $E5 ; second byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA + jp err_una ; UNA not supported +; +initwbw: + ; get location of config data and verify integrity + ld hl,(ident) ; HL := adr or RomWBW HBIOS ident + ld a,(hl) ; get first byte of RomWBW marker + cp 'W' ; match? + jp nz,err_inv ; abort with invalid config block + inc hl ; next byte (marker byte 2) + ld a,(hl) ; load it + cp ~'W' ; match? + jp nz,err_inv ; abort with invalid config block + inc hl ; next byte (major/minor version) + ld a,(hl) ; load it + cp rmj << 4 | rmn ; match? + jp nz,err_ver ; abort with invalid os version +; +initz: + ; initialization complete + xor a ; signal success + ret ; return +; +; +; +main: + ; skip to start of first command line parameter + ld ix,$0081 ; point to start of parm area (past length byte) + call nonblank ; skip to next non-blank char + cp '/' ; option prefix? + jr nz,usage ; display help info & exit if nothing to do +; + ; process any options + inc ix ; fetch next character and process + ld a,(ix) + call upcase ; ensure it's an upper case character + cp 'C' ; if it's a 'C' then + jr z,cboot ; do a cold boot. + cp 'W' ; if it's a 'W' then + jr z,wboot ; do a warm boot. + cp '?' ; if it's a '?' then + jr z,usage ; display usage info and exit. + jr err_parm ; or not a recognised option, so report and exit. +; +; Handle Usage Information +; +usage: + call crlf2 ; display the options for this utility + ld de,str_usage + call prtstr + or $FF + ret ; exit back out to CP/M CCP +; +; Handle Warm Boot +; +wboot: + ld de,str_warmboot ; message + call prtstr ; display it + ld b,bf_sysreset ; system restart + ld c,bf_sysres_warm ; warm start + call $fff0 ; call hbios +; +; Handle Cold Boot +; +cboot: + ld de,str_coldboot ; message + call prtstr ; display it + ld b,bf_sysreset ; system restart + ld c,bf_sysres_cold ; cold start + call $fff0 ; call hbios +; +;=============================================================================== +; Error Handlers +;=============================================================================== +; +err_una: + ld de,str_err_una + jr err_ret +err_inv: + ld de,str_err_inv + jr err_ret +err_ver: + ld de,str_err_ver + jr err_ret +err_parm: + ld de,str_err_parm + jr err_ret + +; +err_ret: + call crlf2 + call prtstr + or $FF ; signal error + ret +; +;=============================================================================== +; Utility Routines +;=============================================================================== +; +; Print character in A without destroying any registers +; +prtchr: + push af + push bc ; save registers + push de + push hl + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it + pop hl ; restore registers + pop de + pop bc + pop af + ret +; +; Start a new line +; +crlf2: + call crlf ; two of them +crlf: + push af ; preserve AF + ld a,13 ; + call prtchr ; print it + ld a,10 ; + call prtchr ; print it + pop af ; restore AF + ret +; +; Print a zero terminated string at (de) without destroying any registers +; +prtstr: + push af + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + pop af + ret +; +; Get the next non-blank character from (ix) +; +nonblank: + ld a,(ix) ; load next character + or a ; string ends with a null + ret z ; if null, return pointing to null + cp ' ' ; check for blank + ret nz ; return if not blank + inc ix ; if blank, increment character pointer + jr nonblank ; and loop +; +; Convert character in A to uppercase +; +upcase: + cp 'a' ; if below 'a' + ret c ; ... do nothing and return + cp 'z' + 1 ; if above 'z' + ret nc ; ... do nothing and return + res 5,a ; clear bit 5 to make lower case -> upper case + ret ; and return +; +;=============================================================================== +; Constants +;=============================================================================== +; +str_banner .db "RomWBW Reboot Utility, Version 1.0, 12-Oct-2024\r\n" + .db " Wayne Warthen (wwarthen@gmail.com) & MartinR",0 +; +str_warmboot .db "\r\n\r\nWarm booting...\r\n",0 +str_coldboot .db "\r\n\r\nCold booting...\r\n",0 +; +str_err_una .db " ERROR: UNA not supported by application",0 +str_err_inv .db " ERROR: Invalid BIOS (signature missing)",0 +str_err_ver .db " ERROR: Unexpected HBIOS version",0 +str_err_parm .db " ERROR: Parameter error (REBOOT /? for usage)",0 +; +str_usage .db " Usage: REBOOT /? - Display this help info.\r\n" + .db " REBOOT /W - Warm boot system\r\n" + .db " REBOOT /C - Cold boot system\r\n" + .db " Options are case insensitive.\r\n",0 +; +;=============================================================================== +; Working data +;=============================================================================== +; +stksav .dw 0 ; stack pointer saved at start + .fill stksiz,0 ; stack +stack .equ $ ; stack top +; +;=============================================================================== +; + .end \ No newline at end of file diff --git a/Source/Apps/rtc.asm b/Source/Apps/rtc.asm deleted file mode 100644 index c49157f5..00000000 --- a/Source/Apps/rtc.asm +++ /dev/null @@ -1,1798 +0,0 @@ - .Title "RTC" -; -; Program: rtc.asm -; Author: Andrew Lynch -; Date: 22 Feb 2007 -; Enviroment: TASM MS-DOS Z80 Cross Assembler source for CP/M -; -;[2011/8/11] VK5DG modified for N8 -; Changed base address to $88 -; Changed trickle charger value to 2k+2 diodes for DS1210s -; -;[2012/2/7] WBW modified to build for either -; traditional N8VEM/Zeta or N8 via conditionals -; -;[2013/12/29] WBW modified to build for MK4 -; -;[2017/11/29] WBW modified to adjust to RTC in use dynamically -; using HBIOS platform detection -; -;[2018/11/8] v1.2 PMS Add boot option. Code optimization. -; -;[2019/06/21] v1.3 Finalized RCBus Z180 support. -; -;[2019/08/11] v1.4 Support SCZ180 platform. -; -;[2020/02/02] v1.5 PMS Basic command line support -; -;[2020/05/15] v1.6 Added Warm Start option -; -;[2021/07/10] v1.7 Support MBC (AJL) -; -;[2022/03/27] v1.8 Support RHYOPHYRE -; -;[2023/07/07] v1.9 Support DUODYNE -; -; Constants -; -mask_data .EQU %10000000 ; RTC data line -mask_clk .EQU %01000000 ; RTC Serial Clock line -mask_rd .EQU %00100000 ; Enable data read from RTC -mask_rst .EQU %00010000 ; De-activate RTC reset line - -PORT_SBC .EQU $70 ; RTC port for SBC/ZETA -PORT_N8 .EQU $88 ; RTC port for N8 -PORT_MK4 .EQU $8A ; RTC port for MK4 -PORT_RCZ80 .EQU $C0 ; RTC port for RCBus -PORT_RCZ180 .EQU $0C ; RTC port for RCBus -PORT_EZZ80 .EQU $C0 ; RTC port for EZZ80 (actually does not have one!!!) -PORT_SCZ180 .EQU $0C ; RTC port for SCZ180 -PORT_DYNO .EQU $0C ; RTC port for DYNO -PORT_RCZ280 .EQU $C0 ; RTC port for RCZ280 -PORT_MBC .EQU $70 ; RTC port for MBC -PORT_RPH .EQU $84 ; RTC port for RHYOPHYRE -PORT_DUO .EQU $94 ; RTC port for DUODYNE - - -BDOS .EQU 5 ; BDOS invocation vector -FCB .EQU 05CH ; Start of command line - -;BID_BOOT .EQU $00 -;HB_BNKCALL .EQU $FFF9 - -BF_SYSRESET .EQU $F0 ; RESTART SYSTEM - -BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL -BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER) -BF_SYSRES_COLD .EQU $02 ; COLD START - -; -; Program -; - .ORG 0100H - -LOOP: - LD DE,MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - -; program starts here - - CALL RTC_INIT ; Program initialization - - CALL RTC_TOP_LOOP - - LD C,00H ; CP/M system reset call - shut down - CALL 0005H - - HALT ; This code is never reached - - -; function HEXSTR -; input number in A -; output upper nibble of number in ASCII in H -; output lower nibble of number in ASCII in L -; uses BC -; -; based on following algorithm: -; -; const -; hextab : string = ('0','1','2','3','4','5','6','7','8', -; '9','A','B','C','D','E','F'); -; -; PROCEDURE hexstr(n: int): ^string; -; BEGIN -; n := n and 255; -; tmpstr[1] := hextab[n / 16]; -; tmpstr[2] := hextab[n and 15]; -; tmpstr[0] := #2; -; return @tmpstr; -; END; - - -HEXSTR: - PUSH BC ;SAVE BC - LD B,A - RLC A ;DO HIGH NIBBLE FIRST - RLC A - RLC A - RLC A - AND 0FH ;ONLY THIS NOW - ADD A,30H ;TRY A NUMBER - CP 3AH ;TEST IT - JR C,HEXSTR1 ;IF CY SET SAVE 'NUMBER' in H - ADD A,07H ;MAKE IT AN ALPHA -HEXSTR1: - LD H,A ;SAVE 'ALPHA' in H - LD A,B ;NEXT NIBBLE - AND 0FH ;JUST THIS - ADD A,30H ;TRY A NUMBER - CP 3AH ;TEST IT - JR C,HEXSTR2 ;IF CY SET SAVE 'NUMBER' in L - ADD A,07H ;MAKE IT ALPHA - -HEXSTR2: - LD L,A ;SAVE 'ALPHA' in L - POP BC ;RESTORE BC - RET - - -;***************************************************** -;* GET K.B. DATA & MAKE IT 'HEX' -;***************************************************** - -HEXIN: - PUSH BC ;SAVE BC REGS. - CALL NIBL ;DO A NIBBLE - RLC A ;MOVE FIRST BYTE UPPER NIBBLE - RLC A - RLC A - RLC A - LD B,A ;SAVE ROTATED BYTE - PUSH BC - - CALL NIBL ;DO NEXT NIBBLE - POP BC - ADD A,B ;COMBINE NIBBLES IN ACC. - POP BC ;RESTORE BC - RET ;DONE -NIBL: - LD C,01H ; CP/M console input call - CALL 0005H ;GET K.B. DATA - CP 40H ;TEST FOR ALPHA - JR NC,ALPH - AND 0FH ;GET THE BITS - RET -ALPH: - AND 0FH ;GET THE BITS - ADD A,09H ;MAKE IT HEX A-F - RET - -; function RTC_IN -; -; read a byte from RTC port, return in A -; NOTE: port address is dynamically set in RTC_INIT - -RTC_IN: -INP .EQU $ + 1 - IN A,($FF) - RET - -; function RTC_OUT -; -; write a byte to RTC port, value in A -; NOTE: port address is dynamically set in RTC_INIT - -RTC_OUT: -OUTP .EQU $ + 1 - OUT ($FF),A - RET - -; function RTC_BIT_DELAY -; -; based on following algorithm: -; -; { Make a short delay } -; PROCEDURE rtc_bit_delay; -; var -; x : int; -; BEGIN -; x := 3; -; END; - -RTC_BIT_DELAY: ; purpose is to delay ~36 uS or 144 t-states at 4MHz - PUSH AF ; 11 t-states - LD A,07H ; 7 t-states ADJUST THE TIME 13h IS FOR 4 MHZ -RTC_BIT_DELAY1: - DEC A ; 4 t-states DEC COUNTER. 4 T-states = 1 uS. - JP NZ,RTC_BIT_DELAY1 ; 10 t-states JUMP TO PAUSELOOP2 IF A <> 0. - - NOP ; 4 t-states - NOP ; 4 t-states - POP AF ; 10 t-states - RET ; 10 t-states (144 t-states total) - - -; function RTC_RESET -; -; based on following algorithm: -; -; { Output a RTC reset signal } -; PROCEDURE rtc_reset; -; BEGIN -; out(rtc_base,mask_data + mask_rd); -; rtc_bit_delay(); -; rtc_bit_delay(); -; out(rtc_base,mask_data + mask_rd + mask_rst); -; rtc_bit_delay(); -; rtc_bit_delay(); -; END; -; -RTC_RESET: - LD A,mask_data + mask_rd - ;OUT (RTC),A - CALL RTC_OUT - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - LD A,mask_data + mask_rd + mask_rst - ;OUT (RTC),A - CALL RTC_OUT - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - RET - - -; function RTC_RESET_ON -; -; based on following algorithm: -; -; { Assert RTC reset signal } -; PROCEDURE rtc_reset_on; -; BEGIN -; out(rtc_base,mask_data + mask_rd); -; rtc_bit_delay(); -; rtc_bit_delay(); -; END; - -RTC_RESET_ON: - LD A,mask_data + mask_rd - ;OUT (RTC),A - CALL RTC_OUT - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - RET - -; function RTC_RESET_OFF -; -; based on following algorithm: -; -; { De-assert RTC reset signal } -; PROCEDURE rtc_reset_off; -; BEGIN -; out(rtc_base,mask_data + mask_rd + mask_rst); -; rtc_bit_delay(); -; rtc_bit_delay(); -; END; - -RTC_RESET_OFF: - LD A,mask_data + mask_rd + mask_rst - ;OUT (RTC),A - CALL RTC_OUT - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - RET - -; function RTC_WR -; input value in C -; uses A -; -; PROCEDURE rtc_wr(n : int); -; var -; i : int; -; BEGIN -; for i := 0 while i < 8 do inc(i) loop -; if (n and 1) <> 0 then -; out(rtc_base,mask_rst + mask_data); -; rtc_bit_delay(); -; out(rtc_base,mask_rst + mask_clk + mask_data); -; else -; out(rtc_base,mask_rst); -; rtc_bit_delay(); -; out(rtc_base,mask_rst + mask_clk); -; end; -; rtc_bit_delay(); -; n := shr(n,1); -; end loop; -; END; - -RTC_WR: - XOR A ; set A=0 index counter of FOR loop - -RTC_WR1: - PUSH AF ; save accumulator as it is the index counter in FOR loop - LD A,C ; get the value to be written in A from C (passed value to write in C) - BIT 0,A ; is LSB a 0 or 1? - JP Z,RTC_WR2 ; if it's a 0, handle it at RTC_WR2. - ; LSB is a 1, handle it below - ; setup RTC latch with RST and DATA high, SCLK low - LD A,mask_rst + mask_data - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - CALL RTC_BIT_DELAY ; let it settle a while - ; setup RTC with RST, DATA, and SCLK high - LD A,mask_rst + mask_clk + mask_data - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - JP RTC_WR3 ; exit FOR loop - -RTC_WR2: - ; LSB is a 0, handle it below - LD A,mask_rst ; setup RTC latch with RST high, SCLK and DATA low - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - CALL RTC_BIT_DELAY ; let it settle a while - ; setup RTC with RST and SCLK high, DATA low - LD A,mask_rst + mask_clk - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - -RTC_WR3: - CALL RTC_BIT_DELAY ; let it settle a while - RRC C ; move next bit into LSB position for processing to RTC - POP AF ; recover accumulator as it is the index counter in FOR loop - INC A ; increment A in FOR loop (A=A+1) - CP $08 ; is A < $08 ? - JP NZ,RTC_WR1 ; No, do FOR loop again - RET ; Yes, end function and return - - -; function RTC_RD -; output value in C -; uses A -; -; function RTC_RD -; -; PROCEDURE rtc_rd(): int ; -; var -; i,n,mask : int; -; BEGIN -; n := 0; -; mask := 1; -; for i := 0 while i < 8 do inc(i) loop -; out(rtc_base,mask_rst + mask_rd); -; rtc_bit_delay(); -; if (in(rtc_base) and #1) <> #0 then -; { Data = 1 } -; n := n + mask; -; else -; { Data = 0 } -; end; -; mask := shl(mask,1); -; out(rtc_base,mask_rst + mask_clk + mask_rd); -; rtc_bit_delay(); -; end loop; -; return n; -; END; - -RTC_RD: - XOR A ; set A=0 index counter of FOR loop - LD C,$00 ; set C=0 output of RTC_RD is passed in C - LD B,$01 ; B is mask value - -RTC_RD1: - PUSH AF ; save accumulator as it is the index counter in FOR loop - ; setup RTC with RST and RD high, SCLK low - LD A,mask_rst + mask_rd - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - CALL RTC_BIT_DELAY ; let it settle a while - ;IN A,(RTC) ; input from RTC latch - CALL RTC_IN ; input from RTC latch - BIT 0,A ; is LSB a 0 or 1? - JP Z,RTC_RD2 ; if LSB is a 1, handle it below - LD A,C - ADD A,B - LD C,A -; INC C - ; if LSB is a 0, skip it (C=C+0) -RTC_RD2: - RLC B ; move input bit out of LSB position to save it in C - ; setup RTC with RST, SCLK high, and RD high - LD A,mask_rst + mask_clk + mask_rd - ;OUT (RTC),A ; output to RTC latch - CALL RTC_OUT - CALL RTC_BIT_DELAY ; let it settle - POP AF ; recover accumulator as it is the index counter in FOR loop - INC A ; increment A in FOR loop (A=A+1) - CP $08 ; is A < $08 ? - JP NZ,RTC_RD1 ; No, do FOR loop again - RET ; Yes, end function and return. Read RTC value is in C - -; function RTC_WRITE -; input address in D -; input value in E -; uses A -; -; based on following algorithm: -; -; PROCEDURE rtc_write(address, value: int); -; BEGIN -; lock(); -; rtc_reset_off(); -; { Write command } -; rtc_wr(128 + shl(address and $3f,1)); -; { Write data } -; rtc_wr(value and $ff); -; rtc_reset_on(); -; unlock(); -; END; - -RTC_WRITE: - DI ; disable interrupts during critical section - CALL RTC_RESET_OFF ; turn off RTC reset - LD A,D ; bring into A the address from D -; AND $3F ; keep only bits 6 LSBs, discard 2 MSBs - AND %00111111 ; keep only bits 6 LSBs, discard 2 MSBs - RLC A ; rotate address bits to the left -; ADD A,$80 ; set MSB to one for DS1302 COMMAND BYTE (WRITE) - ADD A,%10000000 ; set MSB to one for DS1302 COMMAND BYTE (WRITE) - LD C,A ; RTC_WR expects write data (address) in reg C - CALL RTC_WR ; write address to DS1302 - LD A,E ; start processing value - AND $FF ; seems unnecessary, probably delete since all values are 8-bit - LD C,A ; RTC_WR expects write data (value) in reg C - CALL RTC_WR ; write address to DS1302 - CALL RTC_RESET_ON ; turn on RTC reset - EI - RET - - -; function RTC_READ -; input address in D -; output value in C -; uses A -; -; based on following algorithm -; -; PROCEDURE rtc_read(address: int): int; -; var -; n : int; -; BEGIN -; lock(); -; rtc_reset_off(); -; { Write command } -; rtc_wr(128 + shl(address and $3f,1) + 1); -; { Read data } -; n := rtc_rd(); -; rtc_reset_on(); -; unlock(); -; return n; -; END; - -RTC_READ: - DI ; disable interrupts during critical section - CALL RTC_RESET_OFF ; turn off RTC reset - LD A,D ; bring into A the address from D - AND $3F ; keep only bits 6 LSBs, discard 2 MSBs - RLC A ; rotate address bits to the left - ADD A,$81 ; set MSB to one for DS1302 COMMAND BYTE (READ) - LD C,A ; RTC_WR expects write data (address) in reg C - CALL RTC_WR ; write address to DS1302 - CALL RTC_RD ; read value from DS1302 (value is in reg C) - CALL RTC_RESET_ON ; turn on RTC reset - EI - RET - - -; function RTC_WR_PROTECT -; input D (address) $07 -; input E (value) $80 -; uses A -; -; based on following algorithm -; -; PROCEDURE rtc_wr_protect; -; BEGIN -; rtc_write(7,128); -; END; - -RTC_WR_PROTECT: -; LD D,$07 - LD D,%00000111 -; LD E,$80 - LD E,%10000000 - CALL RTC_WRITE - RET - - -; function RTC_WR_UNPROTECT -; input D (address) $07 -; input E (value) $00 -; uses A -; -; based on following algorithm -; -; PROCEDURE rtc_wr_unprotect; -; BEGIN -; rtc_write(7,0); -; END; - -RTC_WR_UNPROTECT: -; LD D,$07 - LD D,%00000111 -; LD E,$00 - LD E,%00000000 - CALL RTC_WRITE - RET - - -; function RTC_GET_TIME -; input HL (memory address of buffer) -; uses A,C,D,E -; -; based on following algorithm -; -; PROCEDURE rtc_get_time(var buf: string); -; var -; n : int; -; BEGIN -; lock(); -; rtc_reset_off(); -; { Write command, burst read } -; rtc_wr(255 - 64); -; { Read seconds } -; n := rtc_rd(); 0 -; buf[16] := char(((n / 16) and $07)) + '0'; -; buf[17] := char((n and $0f)) + '0'; -; { Read minutes } -; n := rtc_rd(); 1 -; buf[13] := char(((n / 16) and $07)) + '0'; -; buf[14] := char((n and $0f)) + '0'; -; buf[15] := ':'; -; { Read hours } -; n := rtc_rd(); 2 -; buf[10] := char(((n / 16) and $03)) + '0'; -; buf[11] := char((n and $0f)) + '0'; -; buf[12] := ':'; -; { Read date } -; n := rtc_rd(); 3 -; buf[7] := char(((n / 16) and $03)) + '0'; -; buf[8] := char((n and $0f)) + '0'; -; buf[9] := ' '; -; { Read month } -; n := rtc_rd(); 4 -; buf[4] := char(((n / 16) and $03)) + '0'; -; buf[5] := char((n and $0f)) + '0'; -; buf[6] := '-'; -; { Read day } -; n := rtc_rd(); 5 -; { -; buf[4] := char(((n / 16) and $03)) + '0'; -; buf[4] := char((n and $0f)) + '0'; -; } -; { Read year } -; n := rtc_rd(); 6 -; buf[1] := char(((n / 16) and $0f)) + '0'; -; buf[2] := char((n and $0f)) + '0'; -; buf[3] := '-'; -; length(buf) := 17; -; rtc_reset_on(); -; unlock(); -; END rtc_get_time; - -RTC_GET_TIME: - DI ; disable interrupts during DS1302 read - CALL RTC_RESET_OFF ; turn of RTC reset - ; { Write command, burst read } - LD C,%10111111 ; (255 - 64) - CALL RTC_WR ; send COMMAND BYTE (BURST READ) to DS1302 - -; { Read seconds } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 16 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $07 - ADD A,'0' - LD (RTC_PRINT_BUFFER+15),A - - ; digit 17 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+16),A - -; { Read minutes } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 13 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $07 - ADD A,'0' - LD (RTC_PRINT_BUFFER+12),A - - ; digit 14 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+13),A - - ; digit 15 - LD A,':' - LD (RTC_PRINT_BUFFER+14),A - -; { Read hours } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 10 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $03 - ADD A,'0' - LD (RTC_PRINT_BUFFER+09),A - - ; digit 11 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+10),A - - ; digit 12 - LD A,':' - LD (RTC_PRINT_BUFFER+11),A - -; { Read date } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 07 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $03 - ADD A,'0' - LD (RTC_PRINT_BUFFER+06),A - - ; digit 08 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+07),A - - ; digit 09 - LD A,' ' - LD (RTC_PRINT_BUFFER+08),A - -; { Read month } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 04 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $03 - ADD A,'0' - LD (RTC_PRINT_BUFFER+03),A - - ; digit 05 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+04),A - - ; digit 06 - LD A,'-' - LD (RTC_PRINT_BUFFER+05),A - -; { Read day } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 04 -; LD A,C ; put value output in Reg C into accumulator -; RLC A -; RLC A -; RLC A -; RLC A -; AND $03 -; ADD A,'0' -; LD (RTC_PRINT_BUFFER+03),A - - ; digit 04 -; LD A,C ; put value output in Reg C into accumulator -; AND $0F -; ADD A,'0' -; LD (RTC_PRINT_BUFFER+03),A - -; add special code to put "DAY" value at end of string until better solution known - - ; digit 18 - LD A,'-' - LD (RTC_PRINT_BUFFER+17),A - - ; digit 19 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+18),A - - ; digit 20 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+19),A - -; { Read year } - - CALL RTC_RD ; read value from DS1302, value is in Reg C - - ; digit 01 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+00),A - - ; digit 02 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+01),A - - ; digit 03 - LD A,'-' - LD (RTC_PRINT_BUFFER+02),A - - CALL RTC_RESET_ON ; turn RTC reset back on - EI ; re-enable interrupts - - RET ; Yes, end function and return - - -; function RTC_SET_NOW -; uses A, D, E -; -; based on following algorithm -; -; { Set time to 96-02-18 19:43:00 } -; PROCEDURE rtc_set_now; -; BEGIN -; rtc_wr_unprotect(); -; { Set seconds } -; rtc_write(0,0); -; { Set minutes } -; rtc_write(1,$43); -; { Set hours } -; rtc_write(2,$19); -; { Set date } -; rtc_write(3,$18); -; { Set month } -; rtc_write(4,$02); -; { Set day } -; rtc_write(5,$07); -; { Set year } -; rtc_write(6,$96); -; rtc_wr_protect(); -; END; - -RTC_SET_NOW: -; set time to 07-02-23 19:45:00-05 <-Friday - CALL RTC_WR_UNPROTECT -; seconds - LD D,$00 - LD A,(SECONDS) - LD E,A - CALL RTC_WRITE - -; minutes - LD D,$01 - LD A,(MINUTES) - LD E,A - CALL RTC_WRITE - -; hours - LD D,$02 - LD A,(HOURS) - LD E,A - CALL RTC_WRITE - -; date - LD D,$03 - LD A,(DATE) - LD E,A - CALL RTC_WRITE - -; month - LD D,$04 - LD A,(MONTH) - LD E,A - CALL RTC_WRITE - -; day - LD D,$05 - LD A,(DAY) - LD E,A - CALL RTC_WRITE - -; year - LD D,$06 - LD A,(YEAR) - LD E,A - CALL RTC_WRITE - - CALL RTC_WR_PROTECT - RET - -RTC_INIT_NOW: -; set time to Current Time - -; year - LD DE,RTC_TOP_LOOP1_INIT_YEAR - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (YEAR),A - -; month - LD DE,RTC_TOP_LOOP1_INIT_MONTH - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (MONTH),A - -; date - LD DE,RTC_TOP_LOOP1_INIT_DATE - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (DATE),A - -; hours - LD DE,RTC_TOP_LOOP1_INIT_HOURS - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (HOURS),A - -; minutes - LD DE,RTC_TOP_LOOP1_INIT_MINUTES - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (MINUTES),A - -; seconds - LD DE,RTC_TOP_LOOP1_INIT_SECONDS - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (SECONDS),A - -; day - LD DE,RTC_TOP_LOOP1_INIT_DAY - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL HEXIN - LD (DAY),A - - RET - - -; function RTC_RESTART -; -; uses A, D, E, -; -; based on the following algorithm -; -; { Restart clock, set seconds to 00 } -; PROCEDURE rtc_restart; -; BEGIN -; rtc_wr_unprotect(); -; { Set seconds } -; rtc_write(0,0); -; rtc_wr_protect(); -; END; - -RTC_RESTART: - CALL RTC_WR_UNPROTECT - LD D,$00 - LD E,$00 - CALL RTC_WRITE - CALL RTC_WR_PROTECT - RET - - -; function RTC_CHARGE_ENABLE -; -; uses A, D, E -; -; based on following algorithm -; -; PROCEDURE rtc_charge_enable; -; BEGIN -; rtc_wr_unprotect(); -; { Enable trickle charger, 2kohm, 1 diode } -; rtc_write(8,$A5); -; rtc_wr_protect(); -; END; -; -; Trickle Charge Current: -; -; Imax = (5.0V - (0.7 * Ndiode)) / R -; (5.0 - (0.7 * 1)) / 2000 = .00215A = 2.15 milliamps -; (5.0 - (0.7 * 1)) / 8000 = 0.0005375A = .537 milliamps -; - -RTC_CHARGE_ENABLE - CALL RTC_WR_UNPROTECT - LD D,$08 - LD E,$A5 - CALL RTC_WRITE - CALL RTC_WR_PROTECT - RET - - -; function RTC_CHARGE_DISABLE -; -; uses A, D, E -; -; based on following algorithm -; -; PROCEDURE rtc_charge_disable; -; BEGIN -; rtc_wr_unprotect(); -; { Disable trickle charger} -; rtc_write(8,$00); -; rtc_wr_protect(); -; END; - -RTC_CHARGE_DISABLE - CALL RTC_WR_UNPROTECT - LD D,$08 - LD E,$00 - CALL RTC_WRITE - CALL RTC_WR_PROTECT - RET - - -; function TEST_BIT_DELAY -; -; based on the following algorithm -; -; -; PROCEDURE test_bit_delay(); -; var -; i,t0,t1 : int; -; BEGIN -; putln("Testing bit delay..."); -; t0 := sys_time(); -; for i := 0 while i < 1000 do inc(i) loop -; rtc_bit_delay(); -; end loop; -; t1 := sys_time(); -; putln(i," rtc_bit_delay calls took ",t1-t0," ms."); -; END; - -RTC_TEST_BIT_DELAY - LD DE,TESTING_BIT_DELAY_MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - LD C,01H ; CP/M console input call - CALL 0005H - - ; test should take approximately 43 seconds based on the following code analysis - ; of Z80 T-states on a 4 MHz processor - ; =(4+15*(7+255*(7+255*(17+144+4+10)+4+10)+10)+7)/4/1000000 - - LD B,$0F -PAUSE: - LD C,$FF -PAUSE1: - LD A,$FF ; ADJUST THE TIME 13h IS FOR 4 MHZ -PAUSE2: - CALL RTC_BIT_DELAY ; CAUSE 36uS DELAY - DEC A ; DEC COUNTER. - JP NZ,PAUSE2 ; JUMP TO PAUSE2 IF A <> 0. - DEC C ; DEC COUNTER - JP NZ,PAUSE1 ; JUMP TO PAUSE1 IF C <> 0. - DJNZ PAUSE ; JUMP TO PAUSE IF B <> 0. - - LD DE,TESTING_BIT_DELAY_OVER - LD C,09H ; CP/M write string to console call - CALL 0005H - RET - - -; function RTC_HELP -; -; based on following algorithm -; -; PROCEDURE help(); -; BEGIN -; putln(); -; putln("rtc: ",version); -; putln("rtc: Commands: (E)xit (T)ime st(A)rt (S)et (R)aw (L)oop (C)harge (N)ocharge (H)elp"); -; END; - -RTC_HELP - LD DE,RTC_HELP_MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - RET - -; function RTC_INIT -; -; Determine RTC port based on hardware platform -; and record it dynamically in code (see RTC_IN and RTC_OUT). -; - -RTC_INIT: - CALL IDBIO ; Id BIOS, 1=HBIOS, 2=UBIOS - DEC A ; Test for HBIOS - JP Z,HINIT ; Do HBIOS setup - DEC A ; Test for UBIOS - JP 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 - 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 -; - ; Assign correct port to C - LD C,PORT_SBC - LD DE,PLT_SBC - CP $01 ; SBC - JP Z,RTC_INIT2 - CP $02 ; ZETA - JP Z,RTC_INIT2 - CP $03 ; ZETA 2 - JP Z,RTC_INIT2 -; - LD C,PORT_N8 - LD DE,PLT_N8 - CP $04 ; N8 - JP Z,RTC_INIT2 -; - LD C,PORT_MK4 - LD DE,PLT_MK4 - CP $05 ; Mark IV - JP Z,RTC_INIT2 -; - LD C,PORT_RCZ80 - LD DE,PLT_RCZ80 - CP $07 ; RCBus w/ Z80 - JP Z,RTC_INIT2 -; - LD C,PORT_RCZ180 - LD DE,PLT_RCZ180 - CP $08 ; RCBus w/ Z180 - JP Z,RTC_INIT2 -; - LD C,PORT_EZZ80 - LD DE,PLT_EZZ80 - CP $09 ; Easy Z80 - JP Z,RTC_INIT2 -; - LD C,PORT_SCZ180 - LD DE,PLT_SCZ180 - CP $0A ; SCZ180 - JP Z,RTC_INIT2 -; - LD C,PORT_DYNO - LD DE,PLT_DYNO - CP 11 ; DYNO - JP Z,RTC_INIT2 -; - LD C,PORT_RCZ280 - LD DE,PLT_RCZ280 - CP 12 ; RCZ280 - JP Z,RTC_INIT2 -; - LD C,PORT_MBC - LD DE,PLT_MBC - CP 13 ; MBC - JP Z,RTC_INIT2 -; - LD C,PORT_RPH - LD DE,PLT_RPH - CP 14 ; RHYOPHYRE - JP Z,RTC_INIT2 -; - LD C,PORT_DUO - LD DE,PLT_DUO - CP 17 ; DUODYNE - JP Z,RTC_INIT2 -; - ; Unknown platform - LD DE,PLTERR ; BIOS error message - LD C,9 ; BDOS string display function - CALL BDOS ; Do it - JP 0 ; Bail out! -; -UINIT: - ;; Display UNA notification string - ;LD DE,UBTAG ; BIOS notification string - ;LD C,9 ; BDOS string display function - ;CALL BDOS ; Do it -; - ; Notify UNA not supported at present - LD DE,UBERR ; BIOS not support message - LD C,9 ; BDOS string display function - CALL BDOS ; Do it - JP 0 ; Bail out! - -RTC_INIT2: - ; Record port number in code routines - LD A,C - LD (INP),A - LD (OUTP),A -; - ; Display platform - LD C,9 ; BDOS string display function - CALL BDOS ; Do it - RET - -; -; 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 - - -; function RTC_TOP_LOOP -; -; based on following algorithm -; -; PROCEDURE toploop(); -; var -; err,i,n,fd : int; -; BEGIN -; putln(); -; help(); -; rtc_reset_on(); -; hold(100); -; test_bit_delay(); -; rtc_charge_disable(); -; putln("rtc: trickle charger disabled."); -; loop -; put("rtc>"); -; gets(line); -; if line = "exit" then -; putln("Bye."); -; exit(0); -; elsif line = "charge" then -; putln("Trickle charger enabled."); -; rtc_charge_enable(); -; elsif line = "nocharge" then -; putln("Trickle charger disabled."); -; rtc_charge_disable(); -; elsif line = "start" then -; rtc_restart(); -; putln("Restarting RTC"); -; elsif line = "t" then -; rtc_get_time(line); -; putln("Current time: ",line); -; elsif line = "raw" then -; putln(); -; putln("Raw read loop, hit any key to stop..."); -; while read(0,@n,1 + RD_NOWAIT) = 0 loop -; put(#13,"sec=",hexstr(rtc_read(0))^); -; put(" min=",hexstr(rtc_read(1))^); -; hold(500); -; end loop; -; elsif line = "loop" then -; putln(); -; putln("Clock loop, hit any key to stop..."); -; while read(0,@n,1 + RD_NOWAIT) = 0 loop -; rtc_get_time(line); -; put(#13,line); -; hold(200); -; end loop; -; elsif line = "set" then -; putln("Setting RTC time to 96-02-18 19:43:00"); -; rtc_set_now(); -; elsif (line = "help") or (line = "?") then -; help(); -; elsif length(line) <> 0 then -; putln("You typed: """,line,""""); -; end; -; end loop; -; END toploop; -; Note:above code is not fully in sync with current menu code - -RTC_TOP_LOOP: - CALL RTC_RESET_ON - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - CALL RTC_BIT_DELAY - - LD A,(FCB+1) ; If there a command line tail - CP '/' ; get the command and feed it - LD A,(FCB+2) ; into the input stream - JR Z,RTC_UCL - - LD DE,CRLF_MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - - CALL RTC_HELP - -RTC_TOP_LOOP_1: - LD DE,RTC_TOP_LOOP1_PROMPT - LD C,09H ; CP/M write string to console call - CALL 0005H - - LD C,01H ; CP/M console input call - CALL 0005H -RTC_UCL: - AND %01011111 ; handle lower case responses to menu - - CP 'L' - JP Z,RTC_TOP_LOOP_LOOP - - CP 'R' - JP Z,RTC_TOP_LOOP_RAW - - CP 'G' - JP Z,RTC_TOP_LOOP_GET - - CP 'P' - JP Z,RTC_TOP_LOOP_PUT - - CP 'E' -; JP Z,RTC_TOP_LOOP_EXIT - RET Z - - CP 'H' - JP Z,RTC_TOP_LOOP_HELP - - CP 'D' - JP Z,RTC_TOP_LOOP_DELAY - - CP 'B' - JP Z,RTC_TOP_LOOP_BOOT - - CP 'W' - JP Z,RTC_TOP_LOOP_WARMSTART - - CP 'C' - JP Z,RTC_TOP_LOOP_CHARGE - - CP 'N' - JP Z,RTC_TOP_LOOP_NOCHARGE - - CP 'A' - JP Z,RTC_TOP_LOOP_START - - CP 'S' - JP Z,RTC_TOP_LOOP_SET - - CP 'I' - JP Z,RTC_TOP_LOOP_INIT - - CP 'T' - JP Z,RTC_TOP_LOOP_TIME - - LD DE,CRLF_MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - - JR RTC_TOP_LOOP_1 - -;RTC_TOP_LOOP_EXIT: -; RET - -RTC_TOP_LOOP_HELP: - CALL RTC_HELP - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_DELAY: - CALL RTC_TEST_BIT_DELAY - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_BOOT: - LD DE,BOOTMSG ; BOOT message - LD C,9 ; BDOS string display function - CALL BDOS ; Do it - ; WAIT FOR MESSAGE TO BE DISPLAYED - LD HL,10000 -DELAY_LOOP: ; LOOP IS 26TS - DEC HL ; 6TS - LD A,H ; 4TS - OR L ; 4TS - JR NZ,DELAY_LOOP ; 12TS - ; RESTART SYSTEM FROM ROM BANK 0, ADDRESS $0000 - LD B,BF_SYSRESET ; SYSTEM RESTART - LD C,BF_SYSRES_COLD ; COLD START - CALL $FFF0 ; CALL HBIOS - - -RTC_TOP_LOOP_WARMSTART: - LD B,BF_SYSRESET ; SYSTEM RESTART - LD C,BF_SYSRES_WARM ; WARM START - CALL $FFF0 ; CALL HBIOS - -RTC_TOP_LOOP_CHARGE: - LD DE,RTC_TOP_LOOP1_CHARGE - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_CHARGE_ENABLE - LD A,(FCB+1) ; If we came from the - CP '/' ; command line - RET Z ; exit back to CP/M - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_NOCHARGE: - LD DE,RTC_TOP_LOOP1_NOCHARGE - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_CHARGE_DISABLE - LD A,(FCB+1) ; If we came from the - CP '/' ; command line - RET Z ; exit back to CP/M - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_START: - LD DE,RTC_TOP_LOOP1_START - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_RESTART - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_SET: - LD DE,RTC_TOP_LOOP1_SET - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_SET_NOW - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_INIT: - LD DE,RTC_TOP_LOOP1_INIT - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_INIT_NOW - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_TIME: - LD DE,RTC_TOP_LOOP1_TIME - LD C,09H ; CP/M write string to console call - CALL 0005H - CALL RTC_GET_TIME - LD DE,RTC_PRINT_BUFFER - LD C,09H ; CP/M write string to console call - CALL 0005H - LD A,(FCB+1) ; If we came from the - CP '/' ; command line - RET Z ; exit back to CP/M - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_RAW: - LD DE,RTC_TOP_LOOP1_RAW - LD C,09H ; CP/M write string to console call - CALL 0005H -RTC_TOP_LOOP_RAW1: - -; { Read seconds } - LD D,$00 ; seconds register in DS1302 - CALL RTC_READ ; read value from DS1302, value is in Reg C - - ; digit 16 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $07 - ADD A,'0' - LD (RTC_PRINT_BUFFER+15),A - - ; digit 17 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+16),A - -; { Read minutes } - - LD D,$01 ; minutes register in DS1302 - CALL RTC_READ ; read value from DS1302, value is in Reg C - - ; digit 13 - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $07 - ADD A,'0' - LD (RTC_PRINT_BUFFER+12),A - - ; digit 14 - LD A,C ; put value output in Reg C into accumulator - AND $0F - ADD A,'0' - LD (RTC_PRINT_BUFFER+13),A - - ; digit 15 - LD A,':' - LD (RTC_PRINT_BUFFER+14),A - - ; digits 1-12 and 18-20 are spaces - LD A,' ' ; space - LD (RTC_PRINT_BUFFER+19),A - LD (RTC_PRINT_BUFFER+18),A - LD (RTC_PRINT_BUFFER+17),A - LD (RTC_PRINT_BUFFER+11),A - LD (RTC_PRINT_BUFFER+10),A - LD (RTC_PRINT_BUFFER+09),A - LD (RTC_PRINT_BUFFER+08),A - LD (RTC_PRINT_BUFFER+07),A - LD (RTC_PRINT_BUFFER+06),A - LD (RTC_PRINT_BUFFER+05),A - LD (RTC_PRINT_BUFFER+04),A - LD (RTC_PRINT_BUFFER+03),A - LD (RTC_PRINT_BUFFER+02),A - LD (RTC_PRINT_BUFFER+01),A - LD (RTC_PRINT_BUFFER+00),A - - LD DE,RTC_PRINT_BUFFER - LD C,09H ; CP/M write string to console call - CALL 0005H - - LD C,01H ; CP/M console input call - CALL 0005H - - CP ' ' ; space - JP Z,RTC_TOP_LOOP_RAW1 - - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_LOOP: - LD DE,RTC_TOP_LOOP1_LOOP - LD C,09H ; CP/M write string to console call - CALL 0005H - -RTC_TOP_LOOP_LOOP1: - CALL RTC_GET_TIME - - LD DE,RTC_PRINT_BUFFER - LD C,09H ; CP/M write string to console call - CALL 0005H - - LD C,01H ; CP/M console input call - CALL 0005H - - CP ' ' - JP Z,RTC_TOP_LOOP_LOOP1 - - JP RTC_TOP_LOOP_1 - -RTC_TOP_LOOP_PUT: - LD A,$01 ; set PUT as true - LD (GET_PUT),A -RTC_TOP_LOOP_GET: - LD DE,RTC_TOP_LOOP1_GET - LD C,09H ; CP/M write string to console call - CALL 0005H - - CALL HEXIN ; read NVRAM address - LD (PUT_ADR),A ; store for possible PUT later - -; { Read NVRAM address } - LD D,A ; seconds register in DS1302 - CALL RTC_READ ; read value from DS1302, value is in Reg C - - ; first digit - LD A,C ; put value output in Reg C into accumulator - RLC A - RLC A - RLC A - RLC A - AND $0F - CP 0AH ;TEST FOR NUMERIC & convert to ASCII - JR C,NUM1 ;if not ALPHA, its numeric and skip - ADD A,$07 - -NUM1: ADD A,'0' - LD (RTC_GET_BUFFER),A - - ; second digit - LD A,C ; put value output in Reg C into accumulator - AND $0F - CP 0AH ;TEST FOR NUMERIC & convert to ASCII - JR C,NUM2 ;if not ALPHA, its numeric and skip - ADD A,$07 - -NUM2: ADD A,'0' - LD (RTC_GET_BUFFER+1),A - - LD DE,CRLF_MSG - LD C,09H ; CP/M write string to console call - CALL 0005H - - LD DE,RTC_GET_BUFFER - LD C,09H ; CP/M write string to console call - CALL 0005H - - LD A,(GET_PUT) ; check if GET or PUT mode - CP $00 - JP Z,RTC_GET_PUT_EXIT ; if GET mode, exit - - LD DE,RTC_TOP_LOOP1_PUT - LD C,09H ; CP/M write string to console call - CALL 0005H - -; { Write NVRAM address } - - CALL RTC_WR_UNPROTECT - - CALL HEXIN ; read NVRAM address - LD E,A ; new data for NVRAM register in DS1302 - LD A,(PUT_ADR) - LD D,A ; load address from before - - CALL RTC_WRITE ; read value from DS1302, value is in Reg C - - CALL RTC_WR_PROTECT - -RTC_GET_PUT_EXIT: - LD A,$00 ; reset GET mode - LD (GET_PUT),A - JP RTC_TOP_LOOP_1 - -; -; Text Strings -; - -MSG: - .TEXT "Start RTC Program" -CRLF_MSG: - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -TESTING_BIT_DELAY_MSG: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Testing bit delay. Successful test is ~43 sec." - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Start clock and press space bar." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -TESTING_BIT_DELAY_OVER: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Test complete. Stop clock." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_HELP_MSG: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "RTC: Version 1.9" - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp" - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_PROMPT: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "RTC>" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_CHARGE: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Trickle charger enabled." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_NOCHARGE: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Trickle charger disabled." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_START: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Restart RTC." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_TIME: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Current time: " - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_RAW: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Raw read Loop. Press SPACE BAR for next." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_LOOP: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Clock Loop. Press SPACE BAR for next." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_SET: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Set RTC time." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Init date/time." - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_GET: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "Get NVRAM addr:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_PUT: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "NVRAM data:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_SECONDS: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "SECONDS:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_MINUTES: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "MINUTES:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_HOURS: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "HOURS:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_DATE: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "DATE:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_MONTH: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "MONTH:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_DAY: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "DAY:" - .DB "$" ; Line terminator - -RTC_TOP_LOOP1_INIT_YEAR: - .DB 0Ah, 0Dh ; line feed and carriage return - .TEXT "YEAR:" - .DB "$" ; Line terminator - -RTC_PRINT_BUFFER: - .FILL 20,0 ; Buffer for formatted date & time to print - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; line terminator - -RTC_GET_BUFFER: - .FILL 2,0 ; Buffer for formatted NVRAM data to print - .DB 0Ah, 0Dh ; line feed and carriage return - .DB "$" ; line terminator - -BIOERR .TEXT "\r\nUnknown BIOS, aborting...\r\n$" -PLTERR .TEXT "\r\n\r\nUnknown/unsupported hardware platform, aborting...\r\n$" -UBERR .TEXT "\r\nUNA UBIOS is not currently supported, aborting...\r\n$" -HBTAG .TEXT "RomWBW HBIOS$" -UBTAG .TEXT "UNA UBIOS" -BOOTMSG .TEXT "\r\n\r\nRebooting...$" -PLT_SBC .TEXT ", SBC/Zeta RTC Latch Port 0x70\r\n$" -PLT_N8 .TEXT ", N8 RTC Latch Port 0x88\r\n$" -PLT_MK4 .TEXT ", Mark 4 RTC Latch Port 0x8A\r\n$" -PLT_RCZ80 .TEXT ", RCBus Z80 RTC Module Latch Port 0xC0\r\n$" -PLT_RCZ180 .TEXT ", RCBus Z180 RTC Module Latch Port 0x0C\r\n$" -PLT_EZZ80 .TEXT ", Easy Z80 RTC Module Latch Port 0xC0\r\n$" -PLT_SCZ180 .TEXT ", SC Z180 RTC Module Latch Port 0x0C\r\n$" -PLT_DYNO .TEXT ", DYNO RTC Module Latch Port 0x0C\r\n$" -PLT_RCZ280 .TEXT ", RCBus Z280 RTC Module Latch Port 0xC0\r\n$" -PLT_MBC .TEXT ", MBC RTC Latch Port 0x70\r\n$" -PLT_RPH .TEXT ", RHYOPHYRE RTC Latch Port 0x84\r\n$" -PLT_DUO .TEXT ", DUODYNE RTC Latch Port 0x70\r\n$" - -; -; Generic FOR-NEXT loop algorithm -; -; LD A,$00 ; set A=0 index counter of FOR loop -;FOR_LOOP: -; PUSH AF ; save accumulator as it is the index counter in FOR loop -; { contents of FOR loop here } ; setup RTC with RST and RD high, SCLK low -; POP AF ; recover accumulator as it is the index counter in FOR loop -; INC A ; increment A in FOR loop (A=A+1) -; CP $08 ; is A < $08 ? -; JP NZ,FOR_LOOP ; No, do FOR loop again -; RET ; Yes, end function and return. Read RTC value is in C - -YEAR .DB $18 -MONTH .DB $11 -DATE .DB $08 -HOURS .DB $00 -MINUTES .DB $00 -SECONDS .DB $00 -DAY .DB $05 -GET_PUT .DB $00 - -PUT_ADR .DB 0 - - .END - diff --git a/Source/Apps/rtc/Build.cmd b/Source/Apps/rtc/Build.cmd new file mode 100644 index 00000000..02c4f50a --- /dev/null +++ b/Source/Apps/rtc/Build.cmd @@ -0,0 +1,12 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF rtc.asm rtc.com rtc.lst || exit /b +tasm -t80 -g3 -fFF rtchb.asm rtchb.com rtchb.lst || exit /b + +copy /Y rtc.com ..\..\..\Binary\Apps\ || exit /b +copy /Y rtchb.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/rtc/Clean.cmd b/Source/Apps/rtc/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/rtc/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/rtc/Makefile b/Source/Apps/rtc/Makefile new file mode 100644 index 00000000..5a0e4f0c --- /dev/null +++ b/Source/Apps/rtc/Makefile @@ -0,0 +1,7 @@ +OBJECTS = rtc.com rtchb.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/rtc/rtc.asm b/Source/Apps/rtc/rtc.asm new file mode 100644 index 00000000..7d456da7 --- /dev/null +++ b/Source/Apps/rtc/rtc.asm @@ -0,0 +1,1808 @@ + .Title "RTC" +; +; Program: rtc.asm +; Author: Andrew Lynch +; Date: 22 Feb 2007 +; Enviroment: TASM MS-DOS Z80 Cross Assembler source for CP/M +; +;[2011/8/11] VK5DG modified for N8 +; Changed base address to $88 +; Changed trickle charger value to 2k+2 diodes for DS1210s +; +;[2012/2/7] WBW modified to build for either +; traditional N8VEM/Zeta or N8 via conditionals +; +;[2013/12/29] WBW modified to build for MK4 +; +;[2017/11/29] WBW modified to adjust to RTC in use dynamically +; using HBIOS platform detection +; +;[2018/11/8] v1.2 PMS Add boot option. Code optimization. +; +;[2019/06/21] v1.3 Finalized RCBus Z180 support. +; +;[2019/08/11] v1.4 Support SCZ180 platform. +; +;[2020/02/02] v1.5 PMS Basic command line support +; +;[2020/05/15] v1.6 Added Warm Start option +; +;[2021/07/10] v1.7 Support MBC (AJL) +; +;[2022/03/27] v1.8 Support RHYOPHYRE +; +;[2023/07/07] v1.9 Support DUODYNE +; +;[2024/09/02] v1.10 Support Genesis STD Z180 +; +; Constants +; +mask_data .EQU %10000000 ; RTC data line +mask_clk .EQU %01000000 ; RTC Serial Clock line +mask_rd .EQU %00100000 ; Enable data read from RTC +mask_rst .EQU %00010000 ; De-activate RTC reset line + +PORT_SBC .EQU $70 ; RTC port for SBC/ZETA +PORT_N8 .EQU $88 ; RTC port for N8 +PORT_MK4 .EQU $8A ; RTC port for MK4 +PORT_RCZ80 .EQU $C0 ; RTC port for RCBus +PORT_RCZ180 .EQU $0C ; RTC port for RCBus +PORT_EZZ80 .EQU $C0 ; RTC port for EZZ80 (actually does not have one!!!) +PORT_SCZ180 .EQU $0C ; RTC port for SCZ180 +PORT_DYNO .EQU $0C ; RTC port for DYNO +PORT_RCZ280 .EQU $C0 ; RTC port for RCZ280 +PORT_MBC .EQU $70 ; RTC port for MBC +PORT_RPH .EQU $84 ; RTC port for RHYOPHYRE +PORT_DUO .EQU $94 ; RTC port for DUODYNE +PORT_STDZ180 .EQU $84 ; RTC Port for STD Bus Z180 board + + +BDOS .EQU 5 ; BDOS invocation vector +FCB .EQU 05CH ; Start of command line + +;BID_BOOT .EQU $00 +;HB_BNKCALL .EQU $FFF9 + +BF_SYSRESET .EQU $F0 ; RESTART SYSTEM + +BF_SYSRES_INT .EQU $00 ; RESET HBIOS INTERNAL +BF_SYSRES_WARM .EQU $01 ; WARM START (RESTART BOOT LOADER) +BF_SYSRES_COLD .EQU $02 ; COLD START + +; +; Program +; + .ORG 0100H + +LOOP: + LD DE,MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + +; program starts here + + CALL RTC_INIT ; Program initialization + + CALL RTC_TOP_LOOP + + LD C,00H ; CP/M system reset call - shut down + CALL 0005H + + HALT ; This code is never reached + + +; function HEXSTR +; input number in A +; output upper nibble of number in ASCII in H +; output lower nibble of number in ASCII in L +; uses BC +; +; based on following algorithm: +; +; const +; hextab : string = ('0','1','2','3','4','5','6','7','8', +; '9','A','B','C','D','E','F'); +; +; PROCEDURE hexstr(n: int): ^string; +; BEGIN +; n := n and 255; +; tmpstr[1] := hextab[n / 16]; +; tmpstr[2] := hextab[n and 15]; +; tmpstr[0] := #2; +; return @tmpstr; +; END; + + +HEXSTR: + PUSH BC ;SAVE BC + LD B,A + RLC A ;DO HIGH NIBBLE FIRST + RLC A + RLC A + RLC A + AND 0FH ;ONLY THIS NOW + ADD A,30H ;TRY A NUMBER + CP 3AH ;TEST IT + JR C,HEXSTR1 ;IF CY SET SAVE 'NUMBER' in H + ADD A,07H ;MAKE IT AN ALPHA +HEXSTR1: + LD H,A ;SAVE 'ALPHA' in H + LD A,B ;NEXT NIBBLE + AND 0FH ;JUST THIS + ADD A,30H ;TRY A NUMBER + CP 3AH ;TEST IT + JR C,HEXSTR2 ;IF CY SET SAVE 'NUMBER' in L + ADD A,07H ;MAKE IT ALPHA + +HEXSTR2: + LD L,A ;SAVE 'ALPHA' in L + POP BC ;RESTORE BC + RET + + +;***************************************************** +;* GET K.B. DATA & MAKE IT 'HEX' +;***************************************************** + +HEXIN: + PUSH BC ;SAVE BC REGS. + CALL NIBL ;DO A NIBBLE + RLC A ;MOVE FIRST BYTE UPPER NIBBLE + RLC A + RLC A + RLC A + LD B,A ;SAVE ROTATED BYTE + PUSH BC + + CALL NIBL ;DO NEXT NIBBLE + POP BC + ADD A,B ;COMBINE NIBBLES IN ACC. + POP BC ;RESTORE BC + RET ;DONE +NIBL: + LD C,01H ; CP/M console input call + CALL 0005H ;GET K.B. DATA + CP 40H ;TEST FOR ALPHA + JR NC,ALPH + AND 0FH ;GET THE BITS + RET +ALPH: + AND 0FH ;GET THE BITS + ADD A,09H ;MAKE IT HEX A-F + RET + +; function RTC_IN +; +; read a byte from RTC port, return in A +; NOTE: port address is dynamically set in RTC_INIT + +RTC_IN: +INP .EQU $ + 1 + IN A,($FF) + RET + +; function RTC_OUT +; +; write a byte to RTC port, value in A +; NOTE: port address is dynamically set in RTC_INIT + +RTC_OUT: +OUTP .EQU $ + 1 + OUT ($FF),A + RET + +; function RTC_BIT_DELAY +; +; based on following algorithm: +; +; { Make a short delay } +; PROCEDURE rtc_bit_delay; +; var +; x : int; +; BEGIN +; x := 3; +; END; + +RTC_BIT_DELAY: ; purpose is to delay ~36 uS or 144 t-states at 4MHz + PUSH AF ; 11 t-states + LD A,07H ; 7 t-states ADJUST THE TIME 13h IS FOR 4 MHZ +RTC_BIT_DELAY1: + DEC A ; 4 t-states DEC COUNTER. 4 T-states = 1 uS. + JP NZ,RTC_BIT_DELAY1 ; 10 t-states JUMP TO PAUSELOOP2 IF A <> 0. + + NOP ; 4 t-states + NOP ; 4 t-states + POP AF ; 10 t-states + RET ; 10 t-states (144 t-states total) + + +; function RTC_RESET +; +; based on following algorithm: +; +; { Output a RTC reset signal } +; PROCEDURE rtc_reset; +; BEGIN +; out(rtc_base,mask_data + mask_rd); +; rtc_bit_delay(); +; rtc_bit_delay(); +; out(rtc_base,mask_data + mask_rd + mask_rst); +; rtc_bit_delay(); +; rtc_bit_delay(); +; END; +; +RTC_RESET: + LD A,mask_data + mask_rd + ;OUT (RTC),A + CALL RTC_OUT + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + LD A,mask_data + mask_rd + mask_rst + ;OUT (RTC),A + CALL RTC_OUT + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + RET + + +; function RTC_RESET_ON +; +; based on following algorithm: +; +; { Assert RTC reset signal } +; PROCEDURE rtc_reset_on; +; BEGIN +; out(rtc_base,mask_data + mask_rd); +; rtc_bit_delay(); +; rtc_bit_delay(); +; END; + +RTC_RESET_ON: + LD A,mask_data + mask_rd + ;OUT (RTC),A + CALL RTC_OUT + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + RET + +; function RTC_RESET_OFF +; +; based on following algorithm: +; +; { De-assert RTC reset signal } +; PROCEDURE rtc_reset_off; +; BEGIN +; out(rtc_base,mask_data + mask_rd + mask_rst); +; rtc_bit_delay(); +; rtc_bit_delay(); +; END; + +RTC_RESET_OFF: + LD A,mask_data + mask_rd + mask_rst + ;OUT (RTC),A + CALL RTC_OUT + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + RET + +; function RTC_WR +; input value in C +; uses A +; +; PROCEDURE rtc_wr(n : int); +; var +; i : int; +; BEGIN +; for i := 0 while i < 8 do inc(i) loop +; if (n and 1) <> 0 then +; out(rtc_base,mask_rst + mask_data); +; rtc_bit_delay(); +; out(rtc_base,mask_rst + mask_clk + mask_data); +; else +; out(rtc_base,mask_rst); +; rtc_bit_delay(); +; out(rtc_base,mask_rst + mask_clk); +; end; +; rtc_bit_delay(); +; n := shr(n,1); +; end loop; +; END; + +RTC_WR: + XOR A ; set A=0 index counter of FOR loop + +RTC_WR1: + PUSH AF ; save accumulator as it is the index counter in FOR loop + LD A,C ; get the value to be written in A from C (passed value to write in C) + BIT 0,A ; is LSB a 0 or 1? + JP Z,RTC_WR2 ; if it's a 0, handle it at RTC_WR2. + ; LSB is a 1, handle it below + ; setup RTC latch with RST and DATA high, SCLK low + LD A,mask_rst + mask_data + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + CALL RTC_BIT_DELAY ; let it settle a while + ; setup RTC with RST, DATA, and SCLK high + LD A,mask_rst + mask_clk + mask_data + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + JP RTC_WR3 ; exit FOR loop + +RTC_WR2: + ; LSB is a 0, handle it below + LD A,mask_rst ; setup RTC latch with RST high, SCLK and DATA low + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + CALL RTC_BIT_DELAY ; let it settle a while + ; setup RTC with RST and SCLK high, DATA low + LD A,mask_rst + mask_clk + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + +RTC_WR3: + CALL RTC_BIT_DELAY ; let it settle a while + RRC C ; move next bit into LSB position for processing to RTC + POP AF ; recover accumulator as it is the index counter in FOR loop + INC A ; increment A in FOR loop (A=A+1) + CP $08 ; is A < $08 ? + JP NZ,RTC_WR1 ; No, do FOR loop again + RET ; Yes, end function and return + + +; function RTC_RD +; output value in C +; uses A +; +; function RTC_RD +; +; PROCEDURE rtc_rd(): int ; +; var +; i,n,mask : int; +; BEGIN +; n := 0; +; mask := 1; +; for i := 0 while i < 8 do inc(i) loop +; out(rtc_base,mask_rst + mask_rd); +; rtc_bit_delay(); +; if (in(rtc_base) and #1) <> #0 then +; { Data = 1 } +; n := n + mask; +; else +; { Data = 0 } +; end; +; mask := shl(mask,1); +; out(rtc_base,mask_rst + mask_clk + mask_rd); +; rtc_bit_delay(); +; end loop; +; return n; +; END; + +RTC_RD: + XOR A ; set A=0 index counter of FOR loop + LD C,$00 ; set C=0 output of RTC_RD is passed in C + LD B,$01 ; B is mask value + +RTC_RD1: + PUSH AF ; save accumulator as it is the index counter in FOR loop + ; setup RTC with RST and RD high, SCLK low + LD A,mask_rst + mask_rd + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + CALL RTC_BIT_DELAY ; let it settle a while + ;IN A,(RTC) ; input from RTC latch + CALL RTC_IN ; input from RTC latch + BIT 0,A ; is LSB a 0 or 1? + JP Z,RTC_RD2 ; if LSB is a 1, handle it below + LD A,C + ADD A,B + LD C,A +; INC C + ; if LSB is a 0, skip it (C=C+0) +RTC_RD2: + RLC B ; move input bit out of LSB position to save it in C + ; setup RTC with RST, SCLK high, and RD high + LD A,mask_rst + mask_clk + mask_rd + ;OUT (RTC),A ; output to RTC latch + CALL RTC_OUT + CALL RTC_BIT_DELAY ; let it settle + POP AF ; recover accumulator as it is the index counter in FOR loop + INC A ; increment A in FOR loop (A=A+1) + CP $08 ; is A < $08 ? + JP NZ,RTC_RD1 ; No, do FOR loop again + RET ; Yes, end function and return. Read RTC value is in C + +; function RTC_WRITE +; input address in D +; input value in E +; uses A +; +; based on following algorithm: +; +; PROCEDURE rtc_write(address, value: int); +; BEGIN +; lock(); +; rtc_reset_off(); +; { Write command } +; rtc_wr(128 + shl(address and $3f,1)); +; { Write data } +; rtc_wr(value and $ff); +; rtc_reset_on(); +; unlock(); +; END; + +RTC_WRITE: + DI ; disable interrupts during critical section + CALL RTC_RESET_OFF ; turn off RTC reset + LD A,D ; bring into A the address from D +; AND $3F ; keep only bits 6 LSBs, discard 2 MSBs + AND %00111111 ; keep only bits 6 LSBs, discard 2 MSBs + RLC A ; rotate address bits to the left +; ADD A,$80 ; set MSB to one for DS1302 COMMAND BYTE (WRITE) + ADD A,%10000000 ; set MSB to one for DS1302 COMMAND BYTE (WRITE) + LD C,A ; RTC_WR expects write data (address) in reg C + CALL RTC_WR ; write address to DS1302 + LD A,E ; start processing value + AND $FF ; seems unnecessary, probably delete since all values are 8-bit + LD C,A ; RTC_WR expects write data (value) in reg C + CALL RTC_WR ; write address to DS1302 + CALL RTC_RESET_ON ; turn on RTC reset + EI + RET + + +; function RTC_READ +; input address in D +; output value in C +; uses A +; +; based on following algorithm +; +; PROCEDURE rtc_read(address: int): int; +; var +; n : int; +; BEGIN +; lock(); +; rtc_reset_off(); +; { Write command } +; rtc_wr(128 + shl(address and $3f,1) + 1); +; { Read data } +; n := rtc_rd(); +; rtc_reset_on(); +; unlock(); +; return n; +; END; + +RTC_READ: + DI ; disable interrupts during critical section + CALL RTC_RESET_OFF ; turn off RTC reset + LD A,D ; bring into A the address from D + AND $3F ; keep only bits 6 LSBs, discard 2 MSBs + RLC A ; rotate address bits to the left + ADD A,$81 ; set MSB to one for DS1302 COMMAND BYTE (READ) + LD C,A ; RTC_WR expects write data (address) in reg C + CALL RTC_WR ; write address to DS1302 + CALL RTC_RD ; read value from DS1302 (value is in reg C) + CALL RTC_RESET_ON ; turn on RTC reset + EI + RET + + +; function RTC_WR_PROTECT +; input D (address) $07 +; input E (value) $80 +; uses A +; +; based on following algorithm +; +; PROCEDURE rtc_wr_protect; +; BEGIN +; rtc_write(7,128); +; END; + +RTC_WR_PROTECT: +; LD D,$07 + LD D,%00000111 +; LD E,$80 + LD E,%10000000 + CALL RTC_WRITE + RET + + +; function RTC_WR_UNPROTECT +; input D (address) $07 +; input E (value) $00 +; uses A +; +; based on following algorithm +; +; PROCEDURE rtc_wr_unprotect; +; BEGIN +; rtc_write(7,0); +; END; + +RTC_WR_UNPROTECT: +; LD D,$07 + LD D,%00000111 +; LD E,$00 + LD E,%00000000 + CALL RTC_WRITE + RET + + +; function RTC_GET_TIME +; input HL (memory address of buffer) +; uses A,C,D,E +; +; based on following algorithm +; +; PROCEDURE rtc_get_time(var buf: string); +; var +; n : int; +; BEGIN +; lock(); +; rtc_reset_off(); +; { Write command, burst read } +; rtc_wr(255 - 64); +; { Read seconds } +; n := rtc_rd(); 0 +; buf[16] := char(((n / 16) and $07)) + '0'; +; buf[17] := char((n and $0f)) + '0'; +; { Read minutes } +; n := rtc_rd(); 1 +; buf[13] := char(((n / 16) and $07)) + '0'; +; buf[14] := char((n and $0f)) + '0'; +; buf[15] := ':'; +; { Read hours } +; n := rtc_rd(); 2 +; buf[10] := char(((n / 16) and $03)) + '0'; +; buf[11] := char((n and $0f)) + '0'; +; buf[12] := ':'; +; { Read date } +; n := rtc_rd(); 3 +; buf[7] := char(((n / 16) and $03)) + '0'; +; buf[8] := char((n and $0f)) + '0'; +; buf[9] := ' '; +; { Read month } +; n := rtc_rd(); 4 +; buf[4] := char(((n / 16) and $03)) + '0'; +; buf[5] := char((n and $0f)) + '0'; +; buf[6] := '-'; +; { Read day } +; n := rtc_rd(); 5 +; { +; buf[4] := char(((n / 16) and $03)) + '0'; +; buf[4] := char((n and $0f)) + '0'; +; } +; { Read year } +; n := rtc_rd(); 6 +; buf[1] := char(((n / 16) and $0f)) + '0'; +; buf[2] := char((n and $0f)) + '0'; +; buf[3] := '-'; +; length(buf) := 17; +; rtc_reset_on(); +; unlock(); +; END rtc_get_time; + +RTC_GET_TIME: + DI ; disable interrupts during DS1302 read + CALL RTC_RESET_OFF ; turn of RTC reset + ; { Write command, burst read } + LD C,%10111111 ; (255 - 64) + CALL RTC_WR ; send COMMAND BYTE (BURST READ) to DS1302 + +; { Read seconds } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 16 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $07 + ADD A,'0' + LD (RTC_PRINT_BUFFER+15),A + + ; digit 17 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+16),A + +; { Read minutes } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 13 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $07 + ADD A,'0' + LD (RTC_PRINT_BUFFER+12),A + + ; digit 14 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+13),A + + ; digit 15 + LD A,':' + LD (RTC_PRINT_BUFFER+14),A + +; { Read hours } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 10 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $03 + ADD A,'0' + LD (RTC_PRINT_BUFFER+09),A + + ; digit 11 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+10),A + + ; digit 12 + LD A,':' + LD (RTC_PRINT_BUFFER+11),A + +; { Read date } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 07 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $03 + ADD A,'0' + LD (RTC_PRINT_BUFFER+06),A + + ; digit 08 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+07),A + + ; digit 09 + LD A,' ' + LD (RTC_PRINT_BUFFER+08),A + +; { Read month } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 04 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $03 + ADD A,'0' + LD (RTC_PRINT_BUFFER+03),A + + ; digit 05 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+04),A + + ; digit 06 + LD A,'-' + LD (RTC_PRINT_BUFFER+05),A + +; { Read day } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 04 +; LD A,C ; put value output in Reg C into accumulator +; RLC A +; RLC A +; RLC A +; RLC A +; AND $03 +; ADD A,'0' +; LD (RTC_PRINT_BUFFER+03),A + + ; digit 04 +; LD A,C ; put value output in Reg C into accumulator +; AND $0F +; ADD A,'0' +; LD (RTC_PRINT_BUFFER+03),A + +; add special code to put "DAY" value at end of string until better solution known + + ; digit 18 + LD A,'-' + LD (RTC_PRINT_BUFFER+17),A + + ; digit 19 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+18),A + + ; digit 20 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+19),A + +; { Read year } + + CALL RTC_RD ; read value from DS1302, value is in Reg C + + ; digit 01 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+00),A + + ; digit 02 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+01),A + + ; digit 03 + LD A,'-' + LD (RTC_PRINT_BUFFER+02),A + + CALL RTC_RESET_ON ; turn RTC reset back on + EI ; re-enable interrupts + + RET ; Yes, end function and return + + +; function RTC_SET_NOW +; uses A, D, E +; +; based on following algorithm +; +; { Set time to 96-02-18 19:43:00 } +; PROCEDURE rtc_set_now; +; BEGIN +; rtc_wr_unprotect(); +; { Set seconds } +; rtc_write(0,0); +; { Set minutes } +; rtc_write(1,$43); +; { Set hours } +; rtc_write(2,$19); +; { Set date } +; rtc_write(3,$18); +; { Set month } +; rtc_write(4,$02); +; { Set day } +; rtc_write(5,$07); +; { Set year } +; rtc_write(6,$96); +; rtc_wr_protect(); +; END; + +RTC_SET_NOW: +; set time to 07-02-23 19:45:00-05 <-Friday + CALL RTC_WR_UNPROTECT +; seconds + LD D,$00 + LD A,(SECONDS) + LD E,A + CALL RTC_WRITE + +; minutes + LD D,$01 + LD A,(MINUTES) + LD E,A + CALL RTC_WRITE + +; hours + LD D,$02 + LD A,(HOURS) + LD E,A + CALL RTC_WRITE + +; date + LD D,$03 + LD A,(DATE) + LD E,A + CALL RTC_WRITE + +; month + LD D,$04 + LD A,(MONTH) + LD E,A + CALL RTC_WRITE + +; day + LD D,$05 + LD A,(DAY) + LD E,A + CALL RTC_WRITE + +; year + LD D,$06 + LD A,(YEAR) + LD E,A + CALL RTC_WRITE + + CALL RTC_WR_PROTECT + RET + +RTC_INIT_NOW: +; set time to Current Time + +; year + LD DE,RTC_TOP_LOOP1_INIT_YEAR + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (YEAR),A + +; month + LD DE,RTC_TOP_LOOP1_INIT_MONTH + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (MONTH),A + +; date + LD DE,RTC_TOP_LOOP1_INIT_DATE + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (DATE),A + +; hours + LD DE,RTC_TOP_LOOP1_INIT_HOURS + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (HOURS),A + +; minutes + LD DE,RTC_TOP_LOOP1_INIT_MINUTES + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (MINUTES),A + +; seconds + LD DE,RTC_TOP_LOOP1_INIT_SECONDS + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (SECONDS),A + +; day + LD DE,RTC_TOP_LOOP1_INIT_DAY + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL HEXIN + LD (DAY),A + + RET + + +; function RTC_RESTART +; +; uses A, D, E, +; +; based on the following algorithm +; +; { Restart clock, set seconds to 00 } +; PROCEDURE rtc_restart; +; BEGIN +; rtc_wr_unprotect(); +; { Set seconds } +; rtc_write(0,0); +; rtc_wr_protect(); +; END; + +RTC_RESTART: + CALL RTC_WR_UNPROTECT + LD D,$00 + LD E,$00 + CALL RTC_WRITE + CALL RTC_WR_PROTECT + RET + + +; function RTC_CHARGE_ENABLE +; +; uses A, D, E +; +; based on following algorithm +; +; PROCEDURE rtc_charge_enable; +; BEGIN +; rtc_wr_unprotect(); +; { Enable trickle charger, 2kohm, 1 diode } +; rtc_write(8,$A5); +; rtc_wr_protect(); +; END; +; +; Trickle Charge Current: +; +; Imax = (5.0V - (0.7 * Ndiode)) / R +; (5.0 - (0.7 * 1)) / 2000 = .00215A = 2.15 milliamps +; (5.0 - (0.7 * 1)) / 8000 = 0.0005375A = .537 milliamps +; + +RTC_CHARGE_ENABLE + CALL RTC_WR_UNPROTECT + LD D,$08 + LD E,$A5 + CALL RTC_WRITE + CALL RTC_WR_PROTECT + RET + + +; function RTC_CHARGE_DISABLE +; +; uses A, D, E +; +; based on following algorithm +; +; PROCEDURE rtc_charge_disable; +; BEGIN +; rtc_wr_unprotect(); +; { Disable trickle charger} +; rtc_write(8,$00); +; rtc_wr_protect(); +; END; + +RTC_CHARGE_DISABLE + CALL RTC_WR_UNPROTECT + LD D,$08 + LD E,$00 + CALL RTC_WRITE + CALL RTC_WR_PROTECT + RET + + +; function TEST_BIT_DELAY +; +; based on the following algorithm +; +; +; PROCEDURE test_bit_delay(); +; var +; i,t0,t1 : int; +; BEGIN +; putln("Testing bit delay..."); +; t0 := sys_time(); +; for i := 0 while i < 1000 do inc(i) loop +; rtc_bit_delay(); +; end loop; +; t1 := sys_time(); +; putln(i," rtc_bit_delay calls took ",t1-t0," ms."); +; END; + +RTC_TEST_BIT_DELAY + LD DE,TESTING_BIT_DELAY_MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + LD C,01H ; CP/M console input call + CALL 0005H + + ; test should take approximately 43 seconds based on the following code analysis + ; of Z80 T-states on a 4 MHz processor + ; =(4+15*(7+255*(7+255*(17+144+4+10)+4+10)+10)+7)/4/1000000 + + LD B,$0F +PAUSE: + LD C,$FF +PAUSE1: + LD A,$FF ; ADJUST THE TIME 13h IS FOR 4 MHZ +PAUSE2: + CALL RTC_BIT_DELAY ; CAUSE 36uS DELAY + DEC A ; DEC COUNTER. + JP NZ,PAUSE2 ; JUMP TO PAUSE2 IF A <> 0. + DEC C ; DEC COUNTER + JP NZ,PAUSE1 ; JUMP TO PAUSE1 IF C <> 0. + DJNZ PAUSE ; JUMP TO PAUSE IF B <> 0. + + LD DE,TESTING_BIT_DELAY_OVER + LD C,09H ; CP/M write string to console call + CALL 0005H + RET + + +; function RTC_HELP +; +; based on following algorithm +; +; PROCEDURE help(); +; BEGIN +; putln(); +; putln("rtc: ",version); +; putln("rtc: Commands: (E)xit (T)ime st(A)rt (S)et (R)aw (L)oop (C)harge (N)ocharge (H)elp"); +; END; + +RTC_HELP + LD DE,RTC_HELP_MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + RET + +; function RTC_INIT +; +; Determine RTC port based on hardware platform +; and record it dynamically in code (see RTC_IN and RTC_OUT). +; + +RTC_INIT: + CALL IDBIO ; Id BIOS, 1=HBIOS, 2=UBIOS + DEC A ; Test for HBIOS + JP Z,HINIT ; Do HBIOS setup + DEC A ; Test for UBIOS + JP 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 + 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 +; + ; Assign correct port to C + LD C,PORT_SBC + LD DE,PLT_SBC + CP $01 ; SBC + JP Z,RTC_INIT2 + CP $02 ; ZETA + JP Z,RTC_INIT2 + CP $03 ; ZETA 2 + JP Z,RTC_INIT2 +; + LD C,PORT_N8 + LD DE,PLT_N8 + CP $04 ; N8 + JP Z,RTC_INIT2 +; + LD C,PORT_MK4 + LD DE,PLT_MK4 + CP $05 ; Mark IV + JP Z,RTC_INIT2 +; + LD C,PORT_RCZ80 + LD DE,PLT_RCZ80 + CP $07 ; RCBus w/ Z80 + JP Z,RTC_INIT2 +; + LD C,PORT_RCZ180 + LD DE,PLT_RCZ180 + CP $08 ; RCBus w/ Z180 + JP Z,RTC_INIT2 +; + LD C,PORT_EZZ80 + LD DE,PLT_EZZ80 + CP $09 ; Easy Z80 + JP Z,RTC_INIT2 +; + LD C,PORT_SCZ180 + LD DE,PLT_SCZ180 + CP $0A ; SCZ180 + JP Z,RTC_INIT2 +; + LD C,PORT_DYNO + LD DE,PLT_DYNO + CP 11 ; DYNO + JP Z,RTC_INIT2 +; + LD C,PORT_RCZ280 + LD DE,PLT_RCZ280 + CP 12 ; RCZ280 + JP Z,RTC_INIT2 +; + LD C,PORT_MBC + LD DE,PLT_MBC + CP 13 ; MBC + JP Z,RTC_INIT2 +; + LD C,PORT_RPH + LD DE,PLT_RPH + CP 14 ; RHYOPHYRE + JP Z,RTC_INIT2 +; + LD C,PORT_DUO + LD DE,PLT_DUO + CP 17 ; DUODYNE + JP Z,RTC_INIT2 +; + LD C,PORT_STDZ180 + LD DE,PLT_STDZ180 + CP 21 ; STD Z180 + JP Z,RTC_INIT2 +; + +; Unknown platform + LD DE,PLTERR ; BIOS error message + LD C,9 ; BDOS string display function + CALL BDOS ; Do it + JP 0 ; Bail out! +; +UINIT: + ;; Display UNA notification string + ;LD DE,UBTAG ; BIOS notification string + ;LD C,9 ; BDOS string display function + ;CALL BDOS ; Do it +; + ; Notify UNA not supported at present + LD DE,UBERR ; BIOS not support message + LD C,9 ; BDOS string display function + CALL BDOS ; Do it + JP 0 ; Bail out! + +RTC_INIT2: + ; Record port number in code routines + LD A,C + LD (INP),A + LD (OUTP),A +; + ; Display platform + LD C,9 ; BDOS string display function + CALL BDOS ; Do it + RET + +; +; 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 + + +; function RTC_TOP_LOOP +; +; based on following algorithm +; +; PROCEDURE toploop(); +; var +; err,i,n,fd : int; +; BEGIN +; putln(); +; help(); +; rtc_reset_on(); +; hold(100); +; test_bit_delay(); +; rtc_charge_disable(); +; putln("rtc: trickle charger disabled."); +; loop +; put("rtc>"); +; gets(line); +; if line = "exit" then +; putln("Bye."); +; exit(0); +; elsif line = "charge" then +; putln("Trickle charger enabled."); +; rtc_charge_enable(); +; elsif line = "nocharge" then +; putln("Trickle charger disabled."); +; rtc_charge_disable(); +; elsif line = "start" then +; rtc_restart(); +; putln("Restarting RTC"); +; elsif line = "t" then +; rtc_get_time(line); +; putln("Current time: ",line); +; elsif line = "raw" then +; putln(); +; putln("Raw read loop, hit any key to stop..."); +; while read(0,@n,1 + RD_NOWAIT) = 0 loop +; put(#13,"sec=",hexstr(rtc_read(0))^); +; put(" min=",hexstr(rtc_read(1))^); +; hold(500); +; end loop; +; elsif line = "loop" then +; putln(); +; putln("Clock loop, hit any key to stop..."); +; while read(0,@n,1 + RD_NOWAIT) = 0 loop +; rtc_get_time(line); +; put(#13,line); +; hold(200); +; end loop; +; elsif line = "set" then +; putln("Setting RTC time to 96-02-18 19:43:00"); +; rtc_set_now(); +; elsif (line = "help") or (line = "?") then +; help(); +; elsif length(line) <> 0 then +; putln("You typed: """,line,""""); +; end; +; end loop; +; END toploop; +; Note:above code is not fully in sync with current menu code + +RTC_TOP_LOOP: + CALL RTC_RESET_ON + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + CALL RTC_BIT_DELAY + + LD A,(FCB+1) ; If there a command line tail + CP '/' ; get the command and feed it + LD A,(FCB+2) ; into the input stream + JR Z,RTC_UCL + + LD DE,CRLF_MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + + CALL RTC_HELP + +RTC_TOP_LOOP_1: + LD DE,RTC_TOP_LOOP1_PROMPT + LD C,09H ; CP/M write string to console call + CALL 0005H + + LD C,01H ; CP/M console input call + CALL 0005H +RTC_UCL: + AND %01011111 ; handle lower case responses to menu + + CP 'L' + JP Z,RTC_TOP_LOOP_LOOP + + CP 'R' + JP Z,RTC_TOP_LOOP_RAW + + CP 'G' + JP Z,RTC_TOP_LOOP_GET + + CP 'P' + JP Z,RTC_TOP_LOOP_PUT + + CP 'E' +; JP Z,RTC_TOP_LOOP_EXIT + RET Z + + CP 'H' + JP Z,RTC_TOP_LOOP_HELP + + CP 'D' + JP Z,RTC_TOP_LOOP_DELAY + + CP 'B' + JP Z,RTC_TOP_LOOP_BOOT + + CP 'W' + JP Z,RTC_TOP_LOOP_WARMSTART + + CP 'C' + JP Z,RTC_TOP_LOOP_CHARGE + + CP 'N' + JP Z,RTC_TOP_LOOP_NOCHARGE + + CP 'A' + JP Z,RTC_TOP_LOOP_START + + CP 'S' + JP Z,RTC_TOP_LOOP_SET + + CP 'I' + JP Z,RTC_TOP_LOOP_INIT + + CP 'T' + JP Z,RTC_TOP_LOOP_TIME + + LD DE,CRLF_MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + + JR RTC_TOP_LOOP_1 + +;RTC_TOP_LOOP_EXIT: +; RET + +RTC_TOP_LOOP_HELP: + CALL RTC_HELP + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_DELAY: + CALL RTC_TEST_BIT_DELAY + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_BOOT: + LD DE,BOOTMSG ; BOOT message + LD C,9 ; BDOS string display function + CALL BDOS ; Do it + ; WAIT FOR MESSAGE TO BE DISPLAYED + LD HL,10000 +DELAY_LOOP: ; LOOP IS 26TS + DEC HL ; 6TS + LD A,H ; 4TS + OR L ; 4TS + JR NZ,DELAY_LOOP ; 12TS + ; RESTART SYSTEM FROM ROM BANK 0, ADDRESS $0000 + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_COLD ; COLD START + CALL $FFF0 ; CALL HBIOS + + +RTC_TOP_LOOP_WARMSTART: + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + CALL $FFF0 ; CALL HBIOS + +RTC_TOP_LOOP_CHARGE: + LD DE,RTC_TOP_LOOP1_CHARGE + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_CHARGE_ENABLE + LD A,(FCB+1) ; If we came from the + CP '/' ; command line + RET Z ; exit back to CP/M + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_NOCHARGE: + LD DE,RTC_TOP_LOOP1_NOCHARGE + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_CHARGE_DISABLE + LD A,(FCB+1) ; If we came from the + CP '/' ; command line + RET Z ; exit back to CP/M + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_START: + LD DE,RTC_TOP_LOOP1_START + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_RESTART + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_SET: + LD DE,RTC_TOP_LOOP1_SET + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_SET_NOW + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_INIT: + LD DE,RTC_TOP_LOOP1_INIT + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_INIT_NOW + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_TIME: + LD DE,RTC_TOP_LOOP1_TIME + LD C,09H ; CP/M write string to console call + CALL 0005H + CALL RTC_GET_TIME + LD DE,RTC_PRINT_BUFFER + LD C,09H ; CP/M write string to console call + CALL 0005H + LD A,(FCB+1) ; If we came from the + CP '/' ; command line + RET Z ; exit back to CP/M + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_RAW: + LD DE,RTC_TOP_LOOP1_RAW + LD C,09H ; CP/M write string to console call + CALL 0005H +RTC_TOP_LOOP_RAW1: + +; { Read seconds } + LD D,$00 ; seconds register in DS1302 + CALL RTC_READ ; read value from DS1302, value is in Reg C + + ; digit 16 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $07 + ADD A,'0' + LD (RTC_PRINT_BUFFER+15),A + + ; digit 17 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+16),A + +; { Read minutes } + + LD D,$01 ; minutes register in DS1302 + CALL RTC_READ ; read value from DS1302, value is in Reg C + + ; digit 13 + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $07 + ADD A,'0' + LD (RTC_PRINT_BUFFER+12),A + + ; digit 14 + LD A,C ; put value output in Reg C into accumulator + AND $0F + ADD A,'0' + LD (RTC_PRINT_BUFFER+13),A + + ; digit 15 + LD A,':' + LD (RTC_PRINT_BUFFER+14),A + + ; digits 1-12 and 18-20 are spaces + LD A,' ' ; space + LD (RTC_PRINT_BUFFER+19),A + LD (RTC_PRINT_BUFFER+18),A + LD (RTC_PRINT_BUFFER+17),A + LD (RTC_PRINT_BUFFER+11),A + LD (RTC_PRINT_BUFFER+10),A + LD (RTC_PRINT_BUFFER+09),A + LD (RTC_PRINT_BUFFER+08),A + LD (RTC_PRINT_BUFFER+07),A + LD (RTC_PRINT_BUFFER+06),A + LD (RTC_PRINT_BUFFER+05),A + LD (RTC_PRINT_BUFFER+04),A + LD (RTC_PRINT_BUFFER+03),A + LD (RTC_PRINT_BUFFER+02),A + LD (RTC_PRINT_BUFFER+01),A + LD (RTC_PRINT_BUFFER+00),A + + LD DE,RTC_PRINT_BUFFER + LD C,09H ; CP/M write string to console call + CALL 0005H + + LD C,01H ; CP/M console input call + CALL 0005H + + CP ' ' ; space + JP Z,RTC_TOP_LOOP_RAW1 + + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_LOOP: + LD DE,RTC_TOP_LOOP1_LOOP + LD C,09H ; CP/M write string to console call + CALL 0005H + +RTC_TOP_LOOP_LOOP1: + CALL RTC_GET_TIME + + LD DE,RTC_PRINT_BUFFER + LD C,09H ; CP/M write string to console call + CALL 0005H + + LD C,01H ; CP/M console input call + CALL 0005H + + CP ' ' + JP Z,RTC_TOP_LOOP_LOOP1 + + JP RTC_TOP_LOOP_1 + +RTC_TOP_LOOP_PUT: + LD A,$01 ; set PUT as true + LD (GET_PUT),A +RTC_TOP_LOOP_GET: + LD DE,RTC_TOP_LOOP1_GET + LD C,09H ; CP/M write string to console call + CALL 0005H + + CALL HEXIN ; read NVRAM address + LD (PUT_ADR),A ; store for possible PUT later + +; { Read NVRAM address } + LD D,A ; seconds register in DS1302 + CALL RTC_READ ; read value from DS1302, value is in Reg C + + ; first digit + LD A,C ; put value output in Reg C into accumulator + RLC A + RLC A + RLC A + RLC A + AND $0F + CP 0AH ;TEST FOR NUMERIC & convert to ASCII + JR C,NUM1 ;if not ALPHA, its numeric and skip + ADD A,$07 + +NUM1: ADD A,'0' + LD (RTC_GET_BUFFER),A + + ; second digit + LD A,C ; put value output in Reg C into accumulator + AND $0F + CP 0AH ;TEST FOR NUMERIC & convert to ASCII + JR C,NUM2 ;if not ALPHA, its numeric and skip + ADD A,$07 + +NUM2: ADD A,'0' + LD (RTC_GET_BUFFER+1),A + + LD DE,CRLF_MSG + LD C,09H ; CP/M write string to console call + CALL 0005H + + LD DE,RTC_GET_BUFFER + LD C,09H ; CP/M write string to console call + CALL 0005H + + LD A,(GET_PUT) ; check if GET or PUT mode + CP $00 + JP Z,RTC_GET_PUT_EXIT ; if GET mode, exit + + LD DE,RTC_TOP_LOOP1_PUT + LD C,09H ; CP/M write string to console call + CALL 0005H + +; { Write NVRAM address } + + CALL RTC_WR_UNPROTECT + + CALL HEXIN ; read NVRAM address + LD E,A ; new data for NVRAM register in DS1302 + LD A,(PUT_ADR) + LD D,A ; load address from before + + CALL RTC_WRITE ; read value from DS1302, value is in Reg C + + CALL RTC_WR_PROTECT + +RTC_GET_PUT_EXIT: + LD A,$00 ; reset GET mode + LD (GET_PUT),A + JP RTC_TOP_LOOP_1 + +; +; Text Strings +; + +MSG: + .TEXT "Start RTC Program" +CRLF_MSG: + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +TESTING_BIT_DELAY_MSG: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Testing bit delay. Successful test is ~43 sec." + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Start clock and press space bar." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +TESTING_BIT_DELAY_OVER: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Test complete. Stop clock." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_HELP_MSG: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "RTC: Version 1.9" + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Commands: E)xit T)ime st(A)rt S)et R)aw L)oop C)harge N)ocharge D)elay I)nit G)et P)ut B)oot W)arm-start H)elp" + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_PROMPT: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "RTC>" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_CHARGE: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Trickle charger enabled." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_NOCHARGE: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Trickle charger disabled." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_START: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Restart RTC." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_TIME: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Current time: " + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_RAW: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Raw read Loop. Press SPACE BAR for next." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_LOOP: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Clock Loop. Press SPACE BAR for next." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_SET: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Set RTC time." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Init date/time." + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_GET: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "Get NVRAM addr:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_PUT: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "NVRAM data:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_SECONDS: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "SECONDS:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_MINUTES: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "MINUTES:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_HOURS: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "HOURS:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_DATE: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "DATE:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_MONTH: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "MONTH:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_DAY: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "DAY:" + .DB "$" ; Line terminator + +RTC_TOP_LOOP1_INIT_YEAR: + .DB 0Ah, 0Dh ; line feed and carriage return + .TEXT "YEAR:" + .DB "$" ; Line terminator + +RTC_PRINT_BUFFER: + .FILL 20,0 ; Buffer for formatted date & time to print + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; line terminator + +RTC_GET_BUFFER: + .FILL 2,0 ; Buffer for formatted NVRAM data to print + .DB 0Ah, 0Dh ; line feed and carriage return + .DB "$" ; line terminator + +BIOERR .TEXT "\r\nUnknown BIOS, aborting...\r\n$" +PLTERR .TEXT "\r\n\r\nUnknown/unsupported hardware platform, aborting...\r\n$" +UBERR .TEXT "\r\nUNA UBIOS is not currently supported, aborting...\r\n$" +HBTAG .TEXT "RomWBW HBIOS$" +UBTAG .TEXT "UNA UBIOS" +BOOTMSG .TEXT "\r\n\r\nRebooting...$" +PLT_SBC .TEXT ", SBC/Zeta RTC Latch Port 0x70\r\n$" +PLT_N8 .TEXT ", N8 RTC Latch Port 0x88\r\n$" +PLT_MK4 .TEXT ", Mark 4 RTC Latch Port 0x8A\r\n$" +PLT_RCZ80 .TEXT ", RCBus Z80 RTC Module Latch Port 0xC0\r\n$" +PLT_RCZ180 .TEXT ", RCBus Z180 RTC Module Latch Port 0x0C\r\n$" +PLT_EZZ80 .TEXT ", Easy Z80 RTC Module Latch Port 0xC0\r\n$" +PLT_SCZ180 .TEXT ", SC Z180 RTC Module Latch Port 0x0C\r\n$" +PLT_DYNO .TEXT ", DYNO RTC Module Latch Port 0x0C\r\n$" +PLT_RCZ280 .TEXT ", RCBus Z280 RTC Module Latch Port 0xC0\r\n$" +PLT_MBC .TEXT ", MBC RTC Latch Port 0x70\r\n$" +PLT_RPH .TEXT ", RHYOPHYRE RTC Latch Port 0x84\r\n$" +PLT_DUO .TEXT ", DUODYNE RTC Latch Port 0x70\r\n$" +PLT_STDZ180 .TEXT ", STD Z180 RTC Module latch port 0x84\r\n$" + +; +; Generic FOR-NEXT loop algorithm +; +; LD A,$00 ; set A=0 index counter of FOR loop +;FOR_LOOP: +; PUSH AF ; save accumulator as it is the index counter in FOR loop +; { contents of FOR loop here } ; setup RTC with RST and RD high, SCLK low +; POP AF ; recover accumulator as it is the index counter in FOR loop +; INC A ; increment A in FOR loop (A=A+1) +; CP $08 ; is A < $08 ? +; JP NZ,FOR_LOOP ; No, do FOR loop again +; RET ; Yes, end function and return. Read RTC value is in C + +YEAR .DB $18 +MONTH .DB $11 +DATE .DB $08 +HOURS .DB $00 +MINUTES .DB $00 +SECONDS .DB $00 +DAY .DB $05 +GET_PUT .DB $00 + +PUT_ADR .DB 0 + + .END + diff --git a/Source/Apps/rtchb.asm b/Source/Apps/rtc/rtchb.asm similarity index 100% rename from Source/Apps/rtchb.asm rename to Source/Apps/rtc/rtchb.asm diff --git a/Source/Apps/startup.asm b/Source/Apps/startup/startup.asm similarity index 100% rename from Source/Apps/startup.asm rename to Source/Apps/startup/startup.asm diff --git a/Source/Apps/syscopy/Build.cmd b/Source/Apps/syscopy/Build.cmd new file mode 100644 index 00000000..ccf37eb9 --- /dev/null +++ b/Source/Apps/syscopy/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF syscopy.asm syscopy.com syscopy.lst || exit /b + +copy /Y syscopy.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/syscopy/Clean.cmd b/Source/Apps/syscopy/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/syscopy/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/syscopy/Makefile b/Source/Apps/syscopy/Makefile new file mode 100644 index 00000000..c8e41bdb --- /dev/null +++ b/Source/Apps/syscopy/Makefile @@ -0,0 +1,7 @@ +OBJECTS = syscopy.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/syscopy.asm b/Source/Apps/syscopy/syscopy.asm similarity index 100% rename from Source/Apps/syscopy.asm rename to Source/Apps/syscopy/syscopy.asm diff --git a/Source/Apps/sysgen/Build.cmd b/Source/Apps/sysgen/Build.cmd new file mode 100644 index 00000000..9155303b --- /dev/null +++ b/Source/Apps/sysgen/Build.cmd @@ -0,0 +1,13 @@ +@echo off +setlocal + +set TOOLS=..\..\..\Tools +set PATH=%TOOLS%\tasm32;%TOOLS%\zxcc;%PATH% +set TASMTABS=%TOOLS%\tasm32 +set CPMDIR80=%TOOLS%/cpm/ + +:: tasm -t80 -g3 -fFF sysgen.asm sysgen.com sysgen.lst || exit /b + +zxcc Z80ASM -SYSGEN/F || exit /b + +copy /Y sysgen.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/sysgen/Clean.cmd b/Source/Apps/sysgen/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/sysgen/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/sysgen/Makefile b/Source/Apps/sysgen/Makefile new file mode 100644 index 00000000..01e3f2d9 --- /dev/null +++ b/Source/Apps/sysgen/Makefile @@ -0,0 +1,7 @@ +OBJECTS = sysgen.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/sysgen.z80 b/Source/Apps/sysgen/sysgen.z80 similarity index 100% rename from Source/Apps/sysgen.z80 rename to Source/Apps/sysgen/sysgen.z80 diff --git a/Source/Apps/talk/Build.cmd b/Source/Apps/talk/Build.cmd new file mode 100644 index 00000000..ac9c6e90 --- /dev/null +++ b/Source/Apps/talk/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF talk.asm talk.com talk.lst || exit /b + +copy /Y talk.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/talk/Clean.cmd b/Source/Apps/talk/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/talk/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/talk/Makefile b/Source/Apps/talk/Makefile new file mode 100644 index 00000000..67a1d261 --- /dev/null +++ b/Source/Apps/talk/Makefile @@ -0,0 +1,7 @@ +OBJECTS = talk.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/talk.asm b/Source/Apps/talk/talk.asm similarity index 100% rename from Source/Apps/talk.asm rename to Source/Apps/talk/talk.asm diff --git a/Source/Apps/timer.asm b/Source/Apps/timer.asm deleted file mode 100644 index b220db1a..00000000 --- a/Source/Apps/timer.asm +++ /dev/null @@ -1,506 +0,0 @@ -;=============================================================================== -; TIMER - Display system timer value -; -;=============================================================================== -; -; Author: Wayne Warthen (wwarthen@gmail.com) -;_______________________________________________________________________________ -; -; Usage: -; TIMER [/C] [/?] -; ex: TIMER (display current timer value) -; TIMER /? (display version and usage) -; TIMER /C (display timer value continuously) -; -; Operation: -; Reads and displays system timer value. -;_______________________________________________________________________________ -; -; Change Log: -; 2018-01-14 [WBW] Initial release -; 2018-01-17 [WBW] Add HBIOS check -; 2019-11-08 [WBW] Add seconds support -;_______________________________________________________________________________ -; -; ToDo: -;_______________________________________________________________________________ -; -#include "../ver.inc" -; -;=============================================================================== -; Definitions -;=============================================================================== -; -stksiz .equ $40 ; Working stack size -; -restart .equ $0000 ; CP/M restart vector -bdos .equ $0005 ; BDOS invocation vector -; -ident .equ $FFFE ; loc of RomWBW HBIOS ident ptr -; -bf_sysver .equ $F1 ; BIOS: VER function -bf_sysget .equ $F8 ; HBIOS: SYSGET function -bf_sysset .equ $F9 ; HBIOS: SYSGET function -bf_sysgettimer .equ $D0 ; TIMER subfunction -bf_syssettimer .equ $D0 ; TIMER subfunction -bf_sysgetsecs .equ $D1 ; SECONDS subfunction -bf_syssetsecs .equ $D1 ; SECONDS subfunction -; -;=============================================================================== -; Code Section -;=============================================================================== -; - .org $100 -; - ; setup stack (save old value) - ld (stksav),sp ; save stack - ld sp,stack ; set new stack -; - ; initialization - call init ; initialize - jr nz,exit ; abort if init fails -; - ; process - call process ; do main processing - jr nz,exit ; abort on error -; -exit: ; clean up and return to command processor - call crlf ; formatting - ld sp,(stksav) ; restore stack - ;jp restart ; return to CP/M via restart - ret ; return to CP/M w/o restart -; -; Initialization -; -init: - call crlf ; formatting - ld de,msgban ; point to version message part 1 - call prtstr ; print it -; - call idbio ; identify active BIOS - cp 1 ; check for HBIOS - jp nz,errbio ; handle BIOS error -; - ld a,rmj << 4 | rmn ; expected HBIOS ver - cp d ; compare with result above - jp nz,errbio ; handle BIOS error -; -initx - ; initialization complete - xor a ; signal success - ret ; return -; -; Process -; -process: - ; look for start of parms - ld hl,$81 ; point to start of parm area (past len byte) -; -process00: - call nonblank ; skip to next non-blank char - jp z,process0 ; no more parms, go to display -; - ; check for option, introduced by a "/" - cp '/' ; start of options? - jp nz,usage ; yes, handle option - call option ; do option processing - ret nz ; done if non-zero return - jr process00 ; continue looking for options -; -process0: -; - ; Test of API function to set seconds value - ;ld b,bf_sysset ; HBIOS SYSGET function - ;ld c,bf_syssetsecs ; SECONDS subfunction - ;ld de,0 ; set seconds value - ;ld hl,1000 ; ... to 1000 - ;rst 08 ; call HBIOS, DE:HL := seconds value -; - ; get and print seconds value - call crlf2 ; formatting -; -process1: - ld b,bf_sysget ; HBIOS SYSGET function - ld c,bf_sysgettimer ; TIMER subfunction - rst 08 ; call HBIOS, DE:HL := timer value - - ld a,(first) - or a - ld a,0 - ld (first),a - jr nz,process1a - - ; test for new value - ld a,(last) ; last LSB value to A - cp l ; compare to current LSB - jr z,process2 ; if equal, bypass display - -process1a: - ; save and print new value - ld a,l ; new LSB value to A - ld (last),a ; save as last value - call prtcr ; back to start of line - ;call nz,prthex32 ; display it - call prthex32 ; display it - ld de,strtick ; tag - call prtstr ; display it - - ; get and print seconds value - ld b,bf_sysget ; HBIOS SYSGET function - ld c,bf_sysgetsecs ; SECONDS subfunction - rst 08 ; call HBIOS, DE:HL := seconds value - call prthex32 ; display it - ld a,'.' ; fraction separator - call prtchr ; print it - ld a,c ; get fractional component - call prthex ; print it - ld de,strsec ; tag - call prtstr ; display it -; -process2: - ld a,(cont) ; continuous display? - or a ; test for true/false - jr z,process3 ; if false, get out -; - ld c,6 ; BDOS: direct console I/O - ld e,$FF ; input char - call bdos ; call BDOS, A := char - or a ; test for zero - jr z,process1 ; loop until char pressed -; -process3: - xor a ; signal success - ret -; -; Handle special options -; -option: -; - inc hl ; next char - ld a,(hl) ; get it - or a ; zero terminator? - ret z ; done if so - cp ' ' ; blank? - ret z ; done if so - cp '?' ; is it a '?'? - jp z,usage ; yes, display usage - cp 'C' ; is it a 'C', continuous? - jp z,setcont ; yes, set continuous display - jp errprm ; anything else is an error -; -usage: -; - jp erruse ; display usage and get out -; -setcont: -; - or $FF ; set A to true - ld (cont),a ; and set continuous flag - jr option ; check for more option letters -; -; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0 -; -idbio: -; - ; Check for UNA (UBIOS) - ld a,($FFFD) ; fixed location of UNA API vector - cp $C3 ; jp instruction? - jr nz,idbio1 ; if not, not UNA - ld hl,($FFFE) ; get jp address - ld a,(hl) ; get byte at target address - cp $FD ; first byte of UNA push ix instruction - jr nz,idbio1 ; if not, not UNA - inc hl ; point to next byte - ld a,(hl) ; get next byte - cp $E5 ; second byte of UNA push ix instruction - jr nz,idbio1 ; if not, not UNA, check others -; - ld bc,$04FA ; UNA: get BIOS date and version - rst 08 ; DE := ver, HL := date -; - ld a,2 ; UNA BIOS id = 2 - ret ; and done -; -idbio1: - ; Check for RomWBW (HBIOS) - ld hl,($FFFE) ; HL := HBIOS ident location - ld a,'W' ; First byte of ident - cp (hl) ; Compare - jr nz,idbio2 ; Not HBIOS - inc hl ; Next byte of ident - ld a,~'W' ; Second byte of ident - cp (hl) ; Compare - jr nz,idbio2 ; Not HBIOS -; - ld b,bf_sysver ; HBIOS: VER function - ld c,0 ; required reserved value - rst 08 ; DE := version, L := platform id -; - ld a,1 ; HBIOS BIOS id = 1 - ret ; and done -; -idbio2: - ; No idea what this is - xor a ; Setup return value of 0 - ret ; and done -; -; Print character in A without destroying any registers -; -prtchr: - push bc ; save registers - push de - push hl - ld e,a ; character to print in E - ld c,$02 ; BDOS function to output a character - call bdos ; do it - pop hl ; restore registers - pop de - pop bc - ret -; -prtdot: -; - ; shortcut to print a dot preserving all regs - push af ; save af - ld a,'.' ; load dot char - call prtchr ; print it - pop af ; restore af - ret ; done -; -prtcr: -; - ; shortcut to print a dot preserving all regs - push af ; save af - ld a,13 ; load CR value - call prtchr ; print it - pop af ; restore af - ret ; done -; -; Print a zero terminated string at (DE) without destroying any registers -; -prtstr: - push de -; -prtstr1: - ld a,(de) ; get next char - or a - jr z,prtstr2 - call prtchr - inc de - jr prtstr1 -; -prtstr2: - pop de ; restore registers - ret -; -; Print the value in A in hex without destroying any registers -; -prthex: - push af ; save AF - push de ; save DE - call hexascii ; convert value in A to hex chars in DE - ld a,d ; get the high order hex char - call prtchr ; print it - ld a,e ; get the low order hex char - call prtchr ; print it - pop de ; restore DE - pop af ; restore AF - ret ; done -; -; print the hex word value in bc -; -prthexword: - push af - ld a,b - call prthex - ld a,c - call prthex - pop af - ret -; -; print the hex dword value in de:hl -; -prthex32: - push bc - push de - pop bc - call prthexword - push hl - pop bc - call prthexword - pop bc - ret -; -; Convert binary value in A to ascii hex characters in DE -; -hexascii: - ld d,a ; save A in D - call hexconv ; convert low nibble of A to hex - ld e,a ; save it in E - ld a,d ; get original value back - rlca ; rotate high order nibble to low bits - rlca - rlca - rlca - call hexconv ; convert nibble - ld d,a ; save it in D - ret ; done -; -; Convert low nibble of A to ascii hex -; -hexconv: - and $0F ; low nibble only - add a,$90 - daa - adc a,$40 - daa - ret -; -; Print value of A or HL in decimal with leading zero suppression -; Use prtdecb for A or prtdecw for HL -; -prtdecb: - push hl - ld h,0 - ld l,a - call prtdecw ; print it - pop hl - ret -; -prtdecw: - push af - push bc - push de - push hl - call prtdec0 - pop hl - pop de - pop bc - pop af - ret -; -prtdec0: - ld e,'0' - ld bc,-10000 - call prtdec1 - ld bc,-1000 - call prtdec1 - ld bc,-100 - call prtdec1 - ld c,-10 - call prtdec1 - ld e,0 - ld c,-1 -prtdec1: - ld a,'0' - 1 -prtdec2: - inc a - add hl,bc - jr c,prtdec2 - sbc hl,bc - cp e - ret z - ld e,0 - call prtchr - ret -; -; Start a new line -; -crlf2: - call crlf ; two of them -crlf: - push af ; preserve AF - ld a,13 ; - call prtchr ; print it - ld a,10 ; - call prtchr ; print it - pop af ; restore AF - ret -; -; Get the next non-blank character from (HL). -; -nonblank: - ld a,(hl) ; load next character - or a ; string ends with a null - ret z ; if null, return pointing to null - cp ' ' ; check for blank - ret nz ; return if not blank - inc hl ; if blank, increment character pointer - jr nonblank ; and loop -; -; Convert character in A to uppercase -; -ucase: - cp 'a' ; if below 'a' - ret c ; ... do nothing and return - cp 'z' + 1 ; if above 'z' - ret nc ; ... do nothing and return - res 5,a ; clear bit 5 to make lower case -> upper case - ret ; and return -; -; Add the value in A to HL (HL := HL + A) -; -addhl: - add a,l ; A := A + L - ld l,a ; Put result back in L - ret nc ; if no carry, we are done - inc h ; if carry, increment H - ret ; and return -; -; Jump indirect to address in HL -; -jphl: - jp (hl) -; -; Errors -; -erruse: ; command usage error (syntax) - ld de,msguse - jr err -; -errprm: ; command parameter error (syntax) - ld de,msgprm - jr err -; -errbio: ; invalid BIOS or version - ld de,msgbio - jr err -; -err: ; print error string and return error signal - call crlf2 ; print newline -; -err1: ; without the leading crlf - call prtstr ; print error string -; -err2: ; without the string -; call crlf ; print newline - or $FF ; signal error - ret ; done -; -;=============================================================================== -; Storage Section -;=============================================================================== -; -last .db 0 ; last LSB of timer value -cont .db 0 ; non-zero indicates continuous display -first .db $FF ; first pass flag (true at start) -; -stksav .dw 0 ; stack pointer saved at start - .fill stksiz,0 ; stack -stack .equ $ ; stack top -; -; Messages -; -msgban .db "TIMER v1.1, 10-Nov-2019",13,10 - .db "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",0 -msguse .db "Usage: TIMER [/C] [/?]",13,10 - .db " ex. TIMER (display current timer value)",13,10 - .db " TIMER /? (display version and usage)",13,10 - .db " TIMER /C (display timer value continuously)",0 -msgprm .db "Parameter error (TIMER /? for usage)",0 -msgbio .db "Incompatible BIOS or version, " - .db "HBIOS v", '0' + rmj, ".", '0' + rmn, " required",0 -strtick .db " Ticks, ",0 -strsec .db " Seconds",0 -; - .end diff --git a/Source/Apps/timer/Build.cmd b/Source/Apps/timer/Build.cmd new file mode 100644 index 00000000..76fc1789 --- /dev/null +++ b/Source/Apps/timer/Build.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF timer.asm timer.com timer.lst || exit /b + +copy /Y timer.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/Apps/timer/Clean.cmd b/Source/Apps/timer/Clean.cmd new file mode 100644 index 00000000..9ecb428f --- /dev/null +++ b/Source/Apps/timer/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/Apps/timer/Makefile b/Source/Apps/timer/Makefile new file mode 100644 index 00000000..055fa6be --- /dev/null +++ b/Source/Apps/timer/Makefile @@ -0,0 +1,7 @@ +OBJECTS = timer.com +DEST = ../../../Binary/Apps +TOOLS =../../../Tools + +USETASM=1 + +include $(TOOLS)/Makefile.inc \ No newline at end of file diff --git a/Source/Apps/timer/timer.asm b/Source/Apps/timer/timer.asm new file mode 100644 index 00000000..ae5d67f8 --- /dev/null +++ b/Source/Apps/timer/timer.asm @@ -0,0 +1,805 @@ +;=============================================================================== +; TIMER - Display system timer value +; Version 1.31 24-July-2024 +;=============================================================================== +; +; Author: Wayne Warthen (wwarthen@gmail.com) +; Updated: MartinR (July 2024) - A user of uppercase mnemonics +;_______________________________________________________________________________ +; +; Usage: +; TIMER [/C] [/?] +; ex: TIMER (display current timer value) +; TIMER /? (display version and usage) +; TIMER /C (display timer value continuously) +; +; Operation: +; Reads and displays system timer value. +; +; This code will only execute on a Z80 CPU (or derivitive) +; +; This source code assembles with TASM V3.2 under Windows-11 using the +; following command line: +; tasm -80 -g3 -l TIMER.ASM TIMER.COM +; ie: Z80 CPU; output format 'binary' named .COM (rather than .OBJ) +; and includes a symbol table as part of the listing file. +;_______________________________________________________________________________ +; +; Change Log: +; 2018-01-14 [WBW] Initial release +; 2018-01-17 [WBW] Add HBIOS check +; 2019-11-08 [WBW] Add seconds support +; 2024-06-30 [MR ] Display values in decimal rather than hexadecimal +; 2024-07-24 [MR ] Also display value in Hours-Mins-Secs format +;_______________________________________________________________________________ +; +; Includes binary-to-decimal subroutine by Alwin Henseler +; Located at: https://www.msx.org/forum/development/msx-development/32-bit-long-ascii +;_______________________________________________________________________________ +; +; Includes division subroutines from: https://wikiti.brandonw.net/ +;;_______________________________________________________________________________ +; +#include "../../ver.inc" ; Used for building RomWBW +;#include "ver.inc" ; Used for testing purposes during code development +; +;=============================================================================== +; Definitions +;=============================================================================== +; +STKSIZ .EQU $40 ; Working stack size +; +RESTART .EQU $0000 ; CP/M restart vector +BDOS .EQU $0005 ; BDOS invocation vector +; +IDENT .EQU $FFFE ; loc of RomWBW HBIOS ident ptr +; +BF_SYSVER .EQU $F1 ; BIOS: VER function +BF_SYSGET .EQU $F8 ; HBIOS: SYSGET function +BF_SYSSET .EQU $F9 ; HBIOS: SYSSET function +BF_SYSGETTIMER .EQU $D0 ; TIMER subfunction +BF_SYSSETTIMER .EQU $D0 ; TIMER subfunction +BF_SYSGETSECS .EQU $D1 ; SECONDS subfunction +BF_SYSSETSECS .EQU $D1 ; SECONDS subfunction +; +;ASCII Control Characters +LF .EQU 00AH ; Line Feed +CR .EQU 00DH ; Carriage Return +; +;=============================================================================== +; Code Section +;=============================================================================== +; + .ORG $100 +; + ; setup stack (save old value) + LD (STKSAV),SP ; save stack + LD SP,STACK ; set new stack +; + ; initialization + CALL INIT ; initialize + JR NZ,EXIT ; abort if init fails +; + ; process + CALL PROCESS ; do main processing + JR NZ,EXIT ; abort on error +; +EXIT: ; clean up and return to command processor + CALL CRLF ; formatting + LD SP,(STKSAV) ; restore stack + ;JP RESTART ; return to CP/M via restart + RET ; return to CP/M w/o restart +; +; Initialization +; +INIT: + CALL CRLF ; formatting + LD DE,MSGBAN ; point to version message part 1 + CALL PRTSTR ; print it +; + CALL IDBIO ; identify active BIOS + CP 1 ; check for HBIOS + JP NZ,ERRBIO ; handle BIOS error +; + LD A,RMJ << 4 | RMN ; expected HBIOS ver + CP D ; compare with result above + JP NZ,ERRBIO ; handle BIOS error +; +INITX: + ; initialization complete + XOR A ; signal success + RET ; return +; +; Process +; +PROCESS: + ; look for start of parms + LD HL,$81 ; point to start of parm area (past len byte) +; +PROCESS00: + CALL NONBLANK ; skip to next non-blank char + JP Z,PROCESS0 ; no more parms, go to display +; + ; check for option, introduced by a "/" + CP '/' ; start of options? + JP NZ,USAGE ; yes, handle option + CALL OPTION ; do option processing + RET NZ ; done if non-zero return + JR PROCESS00 ; continue looking for options +; +PROCESS0: +; + ; Test of API function to set seconds value + ;LD B,BF_SYSSET ; HBIOS SYSGET function + ;LD C,BF_SYSSETSECS ; SECONDS subfunction + ;LD DE,0 ; set seconds value + ;LD HL,1000 ; ... to 1000 + ;RST 08 ; call HBIOS, DE:HL := seconds value +; + ; get and print seconds value + CALL CRLF2 ; formatting +; +PROCESS1: + LD B,BF_SYSGET ; HBIOS SYSGET function + LD C,BF_SYSGETTIMER ; TIMER subfunction + RST 08 ; call HBIOS, DE:HL := timer value + + LD A,(FIRST) + OR A + LD A,0 + LD (FIRST),A + JR NZ,PROCESS1A + + ; TEST FOR NEW VALUE + LD A,(LAST) ; last LSB value to A + CP L ; compare to current LSB + JP Z,PROCESS2 ; if equal, bypass display + +;******************************************************************************* +;******************************************************************************* + +; Formatting code added/amended to print values in decimal and Hours-Mins-Secs +; MartinR June & July-2024 + +PROCESS1A: +; Save and print new value + LD A,L ; new LSB value to A + LD (LAST),A ; save as last value + CALL PRTCR ; back to start of line + + CALL B2D32 ; Convert DE:HL into ASCII; Start of ASCII buffer returned in HL + EX DE,HL + CALL PRTSTR ; Display the value + + LD DE,STRTICK ; "Ticks" message + CALL PRTSTR ; Display it + +; Get and print seconds value in decimal + + LD B,BF_SYSGET ; HBIOS SYSGET function + LD C,BF_SYSGETSECS ; SECONDS subfunction + RST 08 ; Call HBIOS; DE:HL := seconds value; C := fractional part + + LD (SEC_MS),DE ; Store the most significant part of the 'seconds' value + LD (SEC_LS),HL ; And the less significant...... + LD A,C ; And also the fractional part + SLA A ; But double the 50Hz 'ticks' value to give 1/100ths of a second + LD (SEC_FR),A + + CALL B2D32 ; Convert DE:HL into ASCII; Start of ASCII buffer returned in HL + EX DE,HL + CALL PRTSTR ; Display the value + + CALL PRTDOT ; Print a '.' seperator + + LD A,(SEC_FR) ; Retrieve fractional part (1/100ths second) + CALL B2D8 ; Convert into ASCII - up to 3 digits. Umber of digits returned C + CALL PRT_LEAD0 ; Print a leading zero if there is exactly 1 character in the string + EX DE,HL ; Start of ASCII buffer returned in HL + CALL PRTSTR ; Display fractional part of the value + + LD DE,STRSEC ; "Seconds" message + CALL PRTSTR ; Display it + +; Now print the seconds value as HMS + + LD BC,(SEC_MS) ; Retrive the 'seconds' value into AC:IX + LD A,B + LD IX,(SEC_LS) + LD DE,3600 ; 3600 seconds in an hour + CALL DIV32BY16 ; AC:IX divided by DE; Answer in AC:IX; Remainder in HL + + PUSH HL ; Preserve the remainder on the stack + + LD D,A ; Shuffle registers around ready for conversion to ASCII + LD A,C ; AC:IX into DE:HL + LD E,A + PUSH IX + POP HL + + CALL B2D32 ; Convert DE:HL into ASCII; Start of ASCII buffer returned in HL + EX DE,HL + CALL PRTSTR ; Display the hours value + + CALL PRTCOLON ; Print a ':' seperator + + POP HL ; Retrive the remainder (seconds) + + LD C,60 ; 60 seconds in a minute + CALL DIV_HL_C ; HL divided by C; Answer in HL; Remainder in A + + PUSH AF ; Preserve the remainder (seconds) on the stack + + CALL B2D16 ; Convert HL into ASCII; Start of ASCII buffer returned in HL; Count in C + CALL PRT_LEAD0 ; Print a leading zero if there is exactly 1 character in the string + EX DE,HL + CALL PRTSTR ; Display the minutes value + + CALL PRTCOLON ; Print a ':' seperator + + POP AF ; Retrive the remainder (seconds) + + CALL B2D8 ; Convert A into ASCII; Start of ASCII buffer returned in HL; Count in C + CALL PRT_LEAD0 ; Print a leading zero if there is exactly 1 character in the string + EX DE,HL + CALL PRTSTR ; Display the seconds value + + CALL PRTDOT ; Print a '.' seperator + + LD A,(SEC_FR) ; Retrieve the fractional part (1/100ths) of the seconds + CALL B2D8 ; Convert A into ASCII; Start of ASCII buffer returned in HL + CALL PRT_LEAD0 ; Print a leading zero if there is exactly 1 character in the string + EX DE,HL + CALL PRTSTR ; Display the value + + LD DE,STRHMS ; Print "HH:MM:SS" message + CALL PRTSTR + +;******************************************************************************* +;******************************************************************************* + +PROCESS2: + LD A,(CONT) ; continuous display? + OR A ; test for true/false + JR Z,PROCESS3 ; if false, get out +; + LD C,6 ; BDOS: direct console I/O + LD E,$FF ; input char + CALL BDOS ; call BDOS, A := char + OR A ; test for zero + JP Z,PROCESS1 ; loop until char pressed +; +PROCESS3: + XOR A ; signal success + RET +; +; Handle special options +; +OPTION: + INC HL ; next char + LD A,(HL) ; get it + OR A ; zero terminator? + RET Z ; done if so + CP ' ' ; blank? + RET Z ; done if so + CP '?' ; is it a '?'? + JP Z,USAGE ; yes, display usage + CP 'C' ; is it a 'C', continuous? + JP Z,SETCONT ; yes, set continuous display + JP ERRPRM ; anything else is an error +; +USAGE: + JP ERRUSE ; display usage and get out +; +SETCONT: +; + OR $FF ; SET A TO TRUE + LD (CONT),A ; AND SET CONTINUOUS FLAG + JR OPTION ; CHECK FOR MORE OPTION LETTERS +; +; Identify active BIOS. RomWBW HBIOS=1, UNA UBIOS=2, else 0 +; +IDBIO: +; + ; CHECK FOR UNA (UBIOS) + LD A,($FFFD) ; fixed location of UNA API vector + CP $C3 ; jp instruction? + JR NZ,IDBIO1 ; if not, not UNA + LD HL,($FFFE) ; get jp address + LD A,(HL) ; get byte at target address + CP $FD ; first byte of UNA push ix instruction + JR NZ,IDBIO1 ; if not, not UNA + INC HL ; point to next byte + LD A,(HL) ; get next byte + CP $E5 ; second byte of UNA push ix instruction + JR NZ,IDBIO1 ; if not, not UNA, check others +; + LD BC,$04FA ; UNA: get BIOS date and version + RST 08 ; DE := ver, HL := date +; + LD A,2 ; UNA BIOS id = 2 + RET ; and done +; +IDBIO1: + ; Check for RomWBW (HBIOS) + LD HL,($FFFE) ; HL := HBIOS ident location + LD A,'W' ; First byte of ident + CP (HL) ; Compare + JR NZ,IDBIO2 ; Not HBIOS + INC HL ; Next byte of ident + LD A,~'W' ; Second byte of ident + CP (HL) ; Compare + JR NZ,IDBIO2 ; Not HBIOS +; + LD B,BF_SYSVER ; HBIOS: VER function + LD C,0 ; required reserved value + RST 08 ; DE := version, L := platform id +; + LD A,1 ; HBIOS BIOS id = 1 + RET ; and done +; +IDBIO2: + ; No idea what this is + XOR A ; Setup return value of 0 + RET ; and done +; +; Print character in A without destroying any registers +; +PRTCHR: + PUSH BC ; save registers + PUSH DE + PUSH HL + LD E,A ; character to print in E + LD C,$02 ; BDOS function to output a character + CALL BDOS ; do it + POP HL ; restore registers + POP DE + POP BC + RET +; +; Print a 0 if C=1 +; +PRT_LEAD0: + DEC C ; Decrement C, and a value of 1 becomee zero + RET NZ ; If C wasn't 1, then no leading space required + LD A,'0' ; Print the leading zero + JR Z,PRTCHR +; +PRTDOT: +; + ; shortcut to print a dot preserving all regs + PUSH AF ; save af + LD A,'.' ; load dot char + CALL PRTCHR ; print it + POP AF ; restore af + RET ; done +; +PRTCOLON: +; + ; shortcut to print a colon preserving all regs + PUSH AF ; save af + LD A,':' ; load colon char + CALL PRTCHR ; print it + POP AF ; restore af + RET ; done +; +PRTCR: +; + ; shortcut to print a CR preserving all regs + PUSH AF ; save af + LD A,13 ; load CR value + CALL PRTCHR ; print it + POP AF ; restore af + RET ; done +; +; Print a zero terminated string at (DE) without destroying any registers +; +PRTSTR: + PUSH DE +; +PRTSTR1: + LD A,(DE) ; get next char + OR A + JR Z,PRTSTR2 + CALL PRTCHR + INC DE + JR PRTSTR1 +; +PRTSTR2: + POP DE ; restore registers + RET +; +; Print the value in A in hex without destroying any registers +; +PRTHEX: + PUSH AF ; save AF + PUSH DE ; save DE + CALL HEXASCII ; convert value in A to hex chars in DE + LD A,D ; get the high order hex char + CALL PRTCHR ; print it + LD A,E ; get the low order hex char + CALL PRTCHR ; print it + POP DE ; restore DE + POP AF ; restore AF + RET ; done +; +; print the hex word value in bc +; +PRTHEXWORD: + PUSH AF + LD A,B + CALL PRTHEX + LD A,C + CALL PRTHEX + POP AF + RET +; +; print the hex dword value in de:hl +; +PRTHEX32: + PUSH BC + PUSH DE + POP BC + CALL PRTHEXWORD + PUSH HL + POP BC + CALL PRTHEXWORD + POP BC + RET +; +; Convert binary value in A to ascii hex characters in DE +; +HEXASCII: + LD D,A ; save A in D + CALL HEXCONV ; convert low nibble of A to hex + LD E,A ; save it in E + LD A,D ; get original value back + RLCA ; rotate high order nibble to low bits + RLCA + RLCA + RLCA + CALL HEXCONV ; convert nibble + LD D,A ; save it in D + RET ; done +; +; Convert low nibble of A to ascii hex +; +HEXCONV: + AND $0F ; low nibble only + ADD A,$90 + DAA + ADC A,$40 + DAA + RET +; +; Print value of A or HL in decimal with leading zero suppression +; Use prtdecb for A or prtdecw for HL +; +PRTDECB: + PUSH HL + LD H,0 + LD L,A + CALL PRTDECW ; print it + POP HL + RET +; +PRTDECW: + PUSH AF + PUSH BC + PUSH DE + PUSH HL + CALL PRTDEC0 + POP HL + POP DE + POP BC + POP AF + RET +; +PRTDEC0: + LD E,'0' + LD BC,-10000 + CALL PRTDEC1 + LD BC,-1000 + CALL PRTDEC1 + LD BC,-100 + CALL PRTDEC1 + LD C,-10 + CALL PRTDEC1 + LD E,0 + LD C,-1 +PRTDEC1: + LD A,'0' - 1 +PRTDEC2: + INC A + ADD HL,BC + JR C,PRTDEC2 + SBC HL,BC + CP E + RET Z + LD E,0 + CALL PRTCHR + RET +; +; Start a new line +; +CRLF2: + CALL CRLF ; two of them +CRLF: + PUSH AF ; preserve AF + LD A,CR + CALL PRTCHR ; print CR + LD A,LF + CALL PRTCHR ; print LF + POP AF ; restore AF + RET +; +; Get the next non-blank character from (HL). +; +NONBLANK: + LD A,(HL) ; load next character + OR A ; string ends with a null + RET Z ; if null, return pointing to null + CP ' ' ; check for blank + RET NZ ; return if not blank + INC HL ; if blank, increment character pointer + JR NONBLANK ; and loop +; +; Convert character in A to uppercase +; +UCASE: + CP 'a' ; if below 'a' + RET C ; ... do nothing and return + CP 'z' + 1 ; if above 'z' + RET NC ; ... do nothing and return + RES 5,A ; clear bit 5 to make lower case -> upper case + RET ; and return +; +; Add the value in A to HL (HL := HL + A) +; +ADDHL: + ADD A,L ; A := A + L + LD L,A ; Put result back in L + RET NC ; if no carry, we are done + INC H ; if carry, increment H + RET ; and return +; +; Jump indirect to address in HL +; +JPHL: + JP (HL) +; +; Errors +; +ERRUSE: ; command usage error (syntax) + LD DE,MSGUSE + JR ERR +; +ERRPRM: ; command parameter error (syntax) + LD DE,MSGPRM + JR ERR +; +ERRBIO: ; invalid BIOS or version + LD DE,MSGBIO + JR ERR +; +ERR: ; print error string and return error signal + CALL CRLF2 ; print newline +; +ERR1: ; without the leading crlf + CALL PRTSTR ; print error string +; +ERR2: ; without the string +; CALL CRLF ; print newline + OR $FF ; signal error + RET ; done +; +; +;=============================================================================== +; Subroutine to print decimal numbers +;=============================================================================== +; +; Combined routine for conversion of different sized binary numbers into +; directly printable ASCII(Z)-string +; Input value in registers, number size and -related to that- registers to fill +; is selected by calling the correct entry: +; +; entry inputregister(s) decimal value 0 to: +; B2D8 A 255 (3 digits) +; B2D16 HL 65535 5 " +; B2D24 E:HL 16777215 8 " +; B2D32 DE:HL 4294967295 10 " +; B2D48 BC:DE:HL 281474976710655 15 " +; B2D64 IX:BC:DE:HL 18446744073709551615 20 " +; +; The resulting string is placed into a small buffer attached to this routine, +; this buffer needs no initialization and can be modified as desired. +; The number is aligned to the right, and leading 0's are replaced with spaces. +; On exit HL points to the first digit, (B)C = number of decimals +; This way any re-alignment / postprocessing is made easy. +; Changes: AF,BC,DE,HL,IX +; +; by Alwin Henseler +; https://msx.org/forum/topic/who-who/dutch-hardware-guy-pops-back-sort +; +; Found at: +; https://www.msx.org/forum/development/msx-development/32-bit-long-ascii +; +; Tweaked to assemble using TASM 3.2 by MartinR 23June2024 +; +B2D8: LD H,0 + LD L,A +B2D16: LD E,0 +B2D24: LD D,0 +B2D32: LD BC,0 +B2D48: LD IX,0 ; zero all non-used bits +B2D64: LD (B2DINV),HL + LD (B2DINV+2),DE + LD (B2DINV+4),BC + LD (B2DINV+6),IX ; place full 64-bit input value in buffer + LD HL,B2DBUF + LD DE,B2DBUF+1 + LD (HL),' ' +B2DFILC .EQU $-1 ; address of fill-character + LD BC,18 + LDIR ; fill 1st 19 bytes of buffer with spaces + LD (B2DEND-1),BC ; set BCD value to "0" & place terminating 0 + LD E,1 ; no. of bytes in BCD value + LD HL,B2DINV+8 ; (address MSB input)+1 + LD BC,00909H + XOR A +B2DSKP0:DEC B + JR Z,B2DSIZ ; all 0: continue with postprocessing + DEC HL + OR (HL) ; find first byte <>0 + JR Z,B2DSKP0 +B2DFND1:DEC C + RLA + JR NC,B2DFND1 ; determine no. of most significant 1-bit + RRA + LD D,A ; byte from binary input value +B2DLUS2:PUSH HL + PUSH BC +B2DLUS1:LD HL,B2DEND-1 ; address LSB of BCD value + LD B,E ; current length of BCD value in bytes + RL D ; highest bit from input value -> carry +B2DLUS0:LD A,(HL) + ADC A,A + DAA + LD (HL),A ; double 1 BCD byte from intermediate result + DEC HL + DJNZ B2DLUS0 ; and go on to double entire BCD value (+carry!) + JR NC,B2DNXT + INC E ; carry at MSB -> BCD value grew 1 byte larger + LD (HL),1 ; initialize new MSB of BCD value +B2DNXT: DEC C + JR NZ,B2DLUS1 ; repeat for remaining bits from 1 input byte + POP BC ; no. of remaining bytes in input value + LD C,8 ; reset bit-counter + POP HL ; pointer to byte from input value + DEC HL + LD D,(HL) ; get next group of 8 bits + DJNZ B2DLUS2 ; and repeat until last byte from input value +B2DSIZ: LD HL,B2DEND ; address of terminating 0 + LD C,E ; size of BCD value in bytes + OR A + SBC HL,BC ; calculate address of MSB BCD + LD D,H + LD E,L + SBC HL,BC + EX DE,HL ; HL=address BCD value, DE=start of decimal value + LD B,C ; no. of bytes BCD + SLA C ; no. of bytes decimal (possibly 1 too high) + LD A,'0' + RLD ; shift bits 4-7 of (HL) into bit 0-3 of A + CP '0' ; (HL) was > 9h? + JR NZ,B2DEXPH ; if yes, start with recording high digit + DEC C ; correct number of decimals + INC DE ; correct start address + JR B2DEXPL ; continue with converting low digit +B2DEXP: RLD ; shift high digit (HL) into low digit of A +B2DEXPH:LD (DE),A ; record resulting ASCII-code + INC DE +B2DEXPL:RLD + LD (DE),A + INC DE + INC HL ; next BCD-byte + DJNZ B2DEXP ; and go on to convert each BCD-byte into 2 ASCII + SBC HL,BC ; return with HL pointing to 1st decimal + RET + +B2DINV: .FILL 8 ; space for 64-bit input value (LSB first) +B2DBUF: .FILL 20 ; space for 20 decimal digits +B2DEND: .DB 000H ; space for terminating character + +;******************************************************************************* + +; The following routine divides AC:IX by DE and places the quotient +; in AC:IX and the remainder in HL + +; https://wikiti.brandonw.net/ + +; IN: ACIX=dividend, DE=divisor +; OUT: ACIX=quotient, DE=divisor, HL=remainder, B=0 + +DIV32BY16: + LD HL,0 + LD B,32 +DIV32BY16_LOOP: + ADD IX,IX + RL C + RLA + ADC HL,HL + JR C,DIV32BY16_OVERFLOW + SBC HL,DE + JR NC,DIV32BY16_SETBIT + ADD HL,DE + DJNZ DIV32BY16_LOOP + RET +DIV32BY16_OVERFLOW: + OR A + SBC HL,DE +DIV32BY16_SETBIT: + INC IX + DJNZ DIV32BY16_LOOP + RET + +;******************************************************************************* + +; The following routine divides HL by C and places the quotient in HL +; and the remainder in A + +; https://wikiti.brandonw.net/ + +DIV_HL_C: + XOR A + LD B, 16 + +LOOPDIV1: + ADD HL, HL + RLA + JR C, $+5 + CP C + JR C, $+4 + + SUB C + INC L + + DJNZ LOOPDIV1 + + RET + +;=============================================================================== +; Messages Section +;=============================================================================== + +MSGBAN .DB "TIMER v1.31, 24-Jul-2024",CR,LF + .DB "Copyright (C) 2019, Wayne Warthen, GNU GPL v3",CR,LF + .DB "Updated by MartinR 2024",0 +MSGUSE .DB "Usage: TIMER [/C] [/?]",CR,LF + .DB " ex. TIMER (display current timer value)",CR,LF + .DB " TIMER /? (display version and usage)",CR,LF + .DB " TIMER /C (display timer value continuously)",0 +MSGPRM .DB "Parameter error (TIMER /? for usage)",0 +MSGBIO .DB "Incompatible BIOS or version, " + .DB "HBIOS v", '0' + rmj, ".", '0' + rmn, " required",0 +STRTICK .DB " Ticks ",0 +STRSEC .DB " Seconds ",0 +STRHMS .DB " HH:MM:SS",0 + +;=============================================================================== +; Storage Section +;=============================================================================== + +SEC_MS .DW 0 ; Storage space to preserve the seconds value as +SEC_LS .DW 0 ; most and less significant parts +SEC_FR .DB 0 ; And the fractional part (1/100s of a second) + +LAST .DB 0 ; last LSB of timer value +CONT .DB 0 ; non-zero indicates continuous display +FIRST .DB $FF ; first pass flag (true at start) + +STKSAV .DW 0 ; stack pointer saved at start + .FILL STKSIZ,0 ; stack +STACK .EQU $ ; new stack top + + .END diff --git a/Source/Build.cmd b/Source/Build.cmd index dd462f12..b0d0b750 100644 --- a/Source/Build.cmd +++ b/Source/Build.cmd @@ -5,12 +5,13 @@ setlocal call BuildProp || exit /b call BuildShared || exit /b call BuildBP || exit /b -call BuildImages || exit /b call BuildROM %* || exit /b +call BuildImages || exit /b call BuildZRC || exit /b call BuildZ1RCC || exit /b call BuildZZRCC || exit /b call BuildZRC512 || exit /b +call BuildFZ80 || exit /b if "%1" == "dist" ( call Clean || exit /b diff --git a/Source/BuildFZ80.cmd b/Source/BuildFZ80.cmd new file mode 100644 index 00000000..1844e7cc --- /dev/null +++ b/Source/BuildFZ80.cmd @@ -0,0 +1,4 @@ +@echo off +setlocal + +pushd FZ80 && call Build || exit /b & popd diff --git a/Source/CBIOS/cbios.asm b/Source/CBIOS/cbios.asm index d1320ae0..ed29a789 100644 --- a/Source/CBIOS/cbios.asm +++ b/Source/CBIOS/cbios.asm @@ -439,12 +439,12 @@ WBOOT: LD DE,(BNKBIOS) ; UBIOS_PAGE (SEE PAGES.INC) RST 08 ; DO IT PUSH DE ; SAVE PREVIOUS BANK - + LD HL,(CCPBUF) ; ADDRESS OF CCP BUF IN BIOS MEM LD DE,CCP_LOC ; ADDRESS IN HI MEM OF CCP LD BC,CCP_SIZ ; SIZE OF CCP LDIR ; DO IT - + LD BC,$01FB ; UNA FUNC = SET BANK POP DE ; RECOVER OPERATING BANK RST 08 ; DO IT @@ -804,7 +804,7 @@ WRITE: LD A,C LD (WRTYPE),A ; SAVE WRITE TYPE LD A,DOP_WRITE - JR READWRITE + ;JR READWRITE ; OPTIMISATION (FALL THRU TO READWRITE) ; ;__________________________________________________________________________________________________ READWRITE: @@ -1232,11 +1232,11 @@ DSK_GETINF: RLCA ; ... TO USE AS OFFSET INTO DRVMAP CALL ADDHLA ; ADD OFFSET LD D,(HL) ; D := UNIT - + LD A,D ; PUT UNIT IN ACCUM INC A ; $FF -> $00 JR Z,DSK_GETINF1 ; HANDLE UNASSIGNED DRIVE LETTER - + INC HL ; BUMP TO SLICE LD E,(HL) ; E := SLICE INC HL ; POINT TO DPH LSB @@ -1261,7 +1261,8 @@ DSK_GETINF1: ; ERROR RETURN INC A RET ; -; +; BIOS FUNCTION FOR SELECTING CPM DRIVE (A-P) IN C REGISTER +; RETURN HL - BASE ADDRESS OF DPH (0x0000 FOR AN ERROR) ; DSK_SELECT: LD B,E ; SAVE E IN B FOR NOW @@ -1321,19 +1322,8 @@ DSK_SELECT1A: LD (MEDID),A ; #ELSE -; - ; DETERMINE MEDIA IN DRIVE - LD A,(SEKUNIT) ; GET UNIT - LD C,A ; STORE IN C - LD B,BF_DIOMEDIA ; DRIVER FUNCTION = DISK MEDIA - LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY - RST 08 ; DO IT - LD A,E ; RESULTANT MEDIA ID TO ACCUM - LD (MEDID),A ; SAVE IT - OR A ; SET FLAGS - LD HL,0 ; ASSUME FAILURE - RET Z ; BAIL OUT IF NO MEDIA -; + ; NOTE: Setting the (MEDID) is not required for RomWBW at this point + ; The media ID is determined during call to DSK_MBR: #ENDIF ; ; CLEAR LBA OFFSET (DWORD) @@ -1343,24 +1333,7 @@ DSK_SELECT1A: SET 7,H ; ASSUME LBA ACCESS FOR NOW LD (SEKLBA+2),HL ; CLEAR SECOND WORD ; -#IFDEF PLTWBW -; - LD A,(SEKUNIT) ; GET UNIT - LD C,A ; STORE IN C - LD B,BF_DIODEVICE ; HBIOS FUNC: REPORT DEVICE INFO - RST 08 ; GET UNIT INFO, DEVICE TYPE IN D - LD A,D ; DEVICE TYPE -> A - CP DIODEV_FD ; FLOPPY? - JR NZ,DSK_SELECT1B ; IF NOT, DO LBA IO - LD HL,SEKLBA+3 ; POINT TO HIGH ORDER BYTE - RES 7,(HL) ; SWITCH FROM LBA -> CHS -; -#ENDIF -; DSK_SELECT1B: - ; SET LEGACY SECTORS PER SLICE - LD HL,16640 ; LEGACY SECTORS PER SLICE - LD (SPS),HL ; SAVE IT ; ; CHECK MBR OF PHYSICAL DISK BEING SELECTED ; WILL UPDATE MEDID AND LBAOFF IF VALID CP/M PARTITION EXISTS @@ -1407,29 +1380,47 @@ DSK_SELECT2: ; THE MEDIA ID (MEDID). ; DSK_MBR: +; +#IFDEF PLTWBW +; + ; GET EXTENDED INFORMATION FOR THE DEVICE/SLICE + LD A,(SEKUNIT) ; PASSING BOOT UNIT + LD D,A + LD A,(SLICE) ; AND SLICE + LD E,A + LD B,BF_EXTSLICE ; HBIOS FUNC: SLICE + RST 08 ; DO IT +; + ; CHECK ERRORS FROM THE FUNCTION + RET NZ ; ABORT ON ERROR + + ; SAVE MEDIA ID + LD A,C ; C IS MEDIA ID FROM HBIOS + LD (MEDID),A ; SAVE IT + + ; TEST IF FLOPPY MEDIA - BIT 7 DEVICE ATTRIBUTES + BIT 7,B ; B IS ATTRIBUTES FROM HBIOS + JR NZ,DSK_MBR11 ; FLOPPY - SAVE AND RETURN DEHL -> CHS + + ; CODE FALL THRU NEXT IFDEF AND SETS 7,D + ; THEN RETURNS DEHL -> LBA MODE +; +#ENDIF +; +#IFDEF PLTUNA ; CHECK MEDIA TYPE, ONLY HARD DISK IS APPLICABLE LD A,(MEDID) ; GET MEDIA ID CP MID_HD ; HARD DISK? JR Z,DSK_MBR0 ; IF SO, CONTINUE XOR A ; ELSE, N/A, SIGNAL SUCCESS RET ; AND RETURN - + DSK_MBR0: -; -#IFDEF PLTWBW - ; ACTIVATE BIOS BANK TO ACCESS DISK BUFFER - LD (STKSAV),SP ; SAVE CUR STACK - LD SP,STACK ; NEW STACK IN HI MEM - LD A,(BNKBIOS) ; ACTIVATE HBIOS BANK - PUSH IX ; SAVE IX - LD IX,DSK_MBR1 ; ROUTINE TO RUN - CALL HB_BNKCALL ; DO IT - POP IX ; RESTORE IX - LD SP,(STKSAV) ; RESTORE ORIGINAL STACK - RET -#ENDIF -; DSK_MBR1: + ; SET LEGACY SECTORS PER SLICE - USED IN CAPACITY CALC + LD HL,SPS_HD512 ; LEGACY SECTORS PER SLICE + LD (SPS),HL ; SAVE IT +; ; FLUSH DSKBUF TO MAKE SURE IT IS SAFE TO USE IT. CALL BLKFLSH ; MAKE SURE DISK BUFFER IS NOT DIRTY XOR A ; CLEAR ACCUM @@ -1441,9 +1432,6 @@ DSK_MBR1: LD C,A ; PUT IN C LD DE,0 ; LBA SECTOR ZERO LD HL,0 ; ... -#IFDEF PLTWBW - SET 7,D ; MAKE SURE LBA ACCESS BIT SET -#ENDIF CALL DSK_IO2 ; DO IT RET NZ ; ABORT ON ERROR ; @@ -1487,6 +1475,8 @@ DSK_MBR3: ; CHECK THAT REQUESTED SLICE IS "INSIDE" PARTITION ; SLICE SIZE IS EXACTLY 16,384 SECTORS (8MB), SO WE CAN JUST ; RIGHT SHIFT PARTITION SECTOR COUNT BY 14 BITS + ; IMPLEMENTED BY : LEFT SHIFT BY 2, AND TAKE HIGH ORDER WORD + ; SAME AS DISCARDING THE LOWER 14 BITS, SINCE KEEP 2 BY SHIFT LD E,(HL) ; HL POINTS TO FIRST BYTE INC HL ; ... OF 32 BIT PARTITION LD D,(HL) ; ... SECTOR COUNT, @@ -1510,7 +1500,7 @@ DSK_MBR3: ; DSK_MBR4: ; IF BOOT FROM PARTITION, USE NEW SECTORS PER SLICE VALUE - LD HL,16384 ; NEW SECTORS PER SLICE + LD HL,SPS_HD1K ; NEW SECTORS PER SLICE LD (SPS),HL ; SAVE IT ; UPDATE MEDIA ID @@ -1519,18 +1509,19 @@ DSK_MBR4: ; DSK_MBR5: ; ADJUST LBA OFFSET BASED ON TARGET SLICE + ; ALSO JP HERE IF NO PARTITION TABLE, OR NO CPM PARTION LD A,(SLICE) ; GET SLICE, A IS LOOP CNT LD HL,(SEKLBA) ; SET DE:HL LD DE,(SEKLBA+2) ; ... TO STARTING LBA LD BC,(SPS) ; SECTORS PER SLICE RES 7,D ; CLEAR LBA MODE BIT -DSK_MBR6: +DSK_MBR6: OR A ; SET FLAGS TO CHECK LOOP CNTR JR Z,DSK_MBR8 ; DONE IF COUNTER EXHAUSTED ADD HL,BC ; ADD ONE SLICE TO LOW WORD JR NC,DSK_MBR7 ; CHECK FOR CARRY INC DE ; IF SO, BUMP HIGH WORD -DSK_MBR7: +DSK_MBR7: DEC A ; DEC LOOP DOWNCOUNTER JR DSK_MBR6 ; AND LOOP DSK_MBR8: @@ -1552,21 +1543,11 @@ DSK_MBR9: LD (CAP_REQ),HL ; LSW LD (CAP_REQ+2),DE ; MSW ; -#IFDEF PLTWBW - ; GET DSK_CAP (DE:HL) - LD B,BF_DIOCAP ; HBIOS DISK CAPACITY FUNC - LD A,(SEKUNIT) ; DISK UNIT NUMBER - LD C,A ; ... INTO C - RST 08 ; HBIOS CALL (DE:HL = CAPACITY) -#ENDIF -; -#IFDEF PLTUNA ; GET DSK_CAP (DE:HL) LD C,$45 ; UBIOS DISK INFO FUNC LD A,(SEKUNIT) ; DISK UNIT NUMBER LD B,A ; ... INTO B RST 08 ; CALL UNA (DE:HL = CAPACITY) -#ENDIF ; ; SAVE DSK_CAP (DE:HL) PUSH DE ; SAVE DSK_CAP (MSW) @@ -1591,9 +1572,12 @@ DSK_MBR9: OR $FF ; SIGNAL ERROR RET ; DONE ; +#ENDIF +; DSK_MBR10: ; FINALIZE SLICE LBA SET 7,D ; SET LBA ACCESS FLAG +DSK_MBR11: ; RESAVE IT LD (SEKLBA),HL ; LOWORD LD (SEKLBA+2),DE ; HIWORD @@ -1601,7 +1585,7 @@ DSK_MBR10: XOR A ; SUCCESS RET ; DONE ; -; +; CHECK DISK STATUS (PART OF BIOS COLD WARM BOOT) ; DSK_STATUS: #IFDEF PLTUNA @@ -1619,21 +1603,21 @@ DSK_STATUS: RET #ENDIF ; -; +; READ PHYSICAL SECTOR INTO BUFFER ; DSK_READ: ; SET B = FUNCTION: READ LD B,BF_DIOREAD JR DSK_IO ; -; +; WRITE PHYSICAL SECTOR FROM BUFFER ; DSK_WRITE: ; SET B = FUNCTION: WRITE LD B,BF_DIOWRITE JR DSK_IO ; -; +; READ/WRITE PHYSICAL SECTOR ; DSK_IO: LD A,(HSTUNIT) ; GET UNIT @@ -1671,8 +1655,8 @@ LBA_IO: LD L,A ; ADD IN LBA OFFSET FOR PARTITION AND/OR SLICE LD BC,(HSTLBA) ; LBA OFFSET LOWORD - ADD HL,BC - EX DE,HL + ADD HL,BC + EX DE,HL LD BC,(HSTLBA+2) ; LBA OFFSET HIWORD ADC HL,BC EX DE,HL @@ -1816,8 +1800,10 @@ DEFDRIVE .DB 0 ; DEFAULT DRIVE CCPBUF .DW 0 ; ADDRESS OF CCP BUF IN BIOS BANK MEDID .DB 0 ; TEMP STORAGE FOR MEDIA ID SLICE .DB 0 ; CURRENT SLICE +#IFDEF PLTUNA SPS .DW 0 ; SECTORS PER SLICE CAP_REQ .DW 0,0 ; LBA CAP REQUIRED FOR SLICE +#ENDIF STKSAV .DW 0 ; TEMP SAVED STACK POINTER ; #IFDEF PLTWBW @@ -2596,7 +2582,7 @@ MD_INIT: LD A,(HCB + HCB_RAMD_BNKS) ; RAM DISK SIZE IN BANKS LD IX,DPB_RAM ; ADDRESS OF DPB CALL MD_INIT1 ; FIX IT UP -; +; JR MD_INIT4 ; DONE ; MD_INIT1: @@ -2747,10 +2733,12 @@ CLRRAM2: #ENDIF LD A,(BNKUSER) ; SWITCH BACK TO USER BANK CALL HB_BNKSEL ; SELECT BANK + EI ; INTERRUPTS OK AGAIN CALL NEWLINE2 ; FORMATTING LD DE,STR_INITRAMDISK ; RAM DISK INIT MESSAGE CALL WRITESTR ; DISPLAY IT - LD A,(BNKRAMD) ; SWITCH BACK TO FIRST BANK + DI ; DISABLE INTERRUPTS AGAIN + LD A,(BNKRAMD) ; SWITCH BACK TO FIRST RAM BANK CALL HB_BNKSEL ; SELECT BANK LD HL,0 ; SOURCE ADR FOR FILL LD BC,$2000 ; LENGTH OF FILL IS 8K diff --git a/Source/CPM22/Build.cmd b/Source/CPM22/Build.cmd index 7eabae15..2122554b 100644 --- a/Source/CPM22/Build.cmd +++ b/Source/CPM22/Build.cmd @@ -38,6 +38,10 @@ copy /b os2ccp.bin + os3bdos.bin + ..\cbios\cbios_una.bin cpm_una.bin || exit /b copy /b loader.bin + cpm_wbw.bin cpm_wbw.sys || exit /b copy /b loader.bin + cpm_una.bin cpm_una.sys || exit /b +rem Copy OS files to Binary directory +copy cpm_wbw.sys ..\..\Binary\CPM22 || exit /b +copy cpm_una.sys ..\..\Binary\CPM22 || exit /b + goto :eof :asm diff --git a/Source/CPM22/Makefile b/Source/CPM22/Makefile index b1f37b0d..fa7492df 100644 --- a/Source/CPM22/Makefile +++ b/Source/CPM22/Makefile @@ -3,14 +3,20 @@ BINFILES = cpm_wbw.bin cpm_una.bin OBJECTS = CCP.bin BDOS.bin CCP22.bin BDOS22.bin OS2CCP.bin OS3BDOS.bin \ ccpb03.bin bdosb01.bin loader.bin $(SYSFILES) $(BINFILES) OTHERS = *.hex +NOCOPY = cpm_wbw.bin cpm_una.bin \ + CCP.bin BDOS.bin CCP22.bin BDOS22.bin OS2CCP.bin OS3BDOS.bin \ + ccpb03.bin bdosb01.bin loader.bin + +DEST = ../../Binary/CPM22 TOOLS = ../../Tools + include $(TOOLS)/Makefile.inc -%.sys: %.bin loader.bin - cat loader.bin $*.bin > $@ +%.sys: %.bin loader.bin + cat loader.bin $*.bin > $@ cpm_una.bin: OS2CCP.bin OS3BDOS.bin ../CBIOS/cbios_una.bin cat OS2CCP.bin OS3BDOS.bin ../CBIOS/cbios_una.bin > $@ - + cpm_wbw.bin: OS2CCP.bin OS3BDOS.bin ../CBIOS/cbios_wbw.bin cat OS2CCP.bin OS3BDOS.bin ../CBIOS/cbios_wbw.bin > $@ diff --git a/Source/CPM3/biosldr.z80 b/Source/CPM3/biosldr.z80 index 58e57cf0..9eacd755 100644 --- a/Source/CPM3/biosldr.z80 +++ b/Source/CPM3/biosldr.z80 @@ -4,11 +4,13 @@ maclib cpm3.lib cseg - + extrn phex16, phex8 extrn cin, cout extrn crlf, crlf2 - + + include hbios.z80 + debug equ false ; BIOS Jump vector. @@ -65,7 +67,7 @@ boot: ; this routine to avoid issues. ld (stksav),sp ld sp,stack - + ; Do the real work call boot0 @@ -78,6 +80,10 @@ boot0: if cmdline boot1: + ; + ; The following Code is the Entry Point for the Loader when + ; it is built as a COM file. Typically CPMLDR.COM or ZPMLDR.COM + ; ; Get disk unit from user ld de,msgunit ; disk unit prompt call writestr ; display on console @@ -88,7 +94,7 @@ boot1: sub '0' ; convert to binary ld (unit),a ; save it jr c,selerr ; loop if below 0 entered - ld bc,0F810h ; HBIOS, get disk unit count + ld bc,BC_SYSGET_DIOCNT ; HBIOS, get disk unit count call 0FFF0h ; do it, E := disk unit count ld a,(unit) ; get unit num back cp e ; compare to entry @@ -118,7 +124,7 @@ selerr: boot2: ; Record unit & slice w/ HBIOS - ld bc,0F9E0h ; HBIOS func: set boot info + ld bc,BC_SYSSET_BOOTINFO ; HBIOS func: set boot info ld a,(unit) ; get unit ld d,a ; put in D ld a,(slice) ; get slice @@ -128,8 +134,13 @@ boot2: else + ; + ; The following Code is the Entry Point for the Loader when + ; it is built as a SYS file, and run from the System Track + ; + ; Get unit & slice from HBIOS - ld bc,0F8E0h ; HBIOS func: get boot info + ld bc,BC_SYSGET_BOOTINFO ; HBIOS func: get boot info call 0FFF0h ; do it, D := boot unit, E: := slice ld a,d ; move unit to A ld (unit),a ; save it @@ -138,103 +149,27 @@ boot2: endif - ; Check that drive actually exists - ld bc,0F810h ; HBIOS func: get disk count - call 0FFF0h ; do it, E=disk count - ld a,(unit) ; get boot disk unit - cp e ; compare to count - jp nc,err_nodisk ; handle no disk err - ; Sense media to determine media format ld a,(unit) ; Get boot unit - ld c,a ; put in C - ld b,18h ; HBIOS Media function - ld e,1 ; Enable media check/discovery + ld d,a ; put in D + ld a,(slice) ; get boot slice + ld e,a ; put in E + ld b,BF_EXTSLICE ; HBIOS FUNC: SLICE call 0FFF0H ; HBIOS call - jp nz,err_diskio ; handle error - ld a,e ; resultant media id to accum - ld (medid),a ; save media id - or a ; set flags, 0 is no media - jp z,err_diskio ; handle no media error - - ; Initialize slice start LBA & sectors per slice - ld hl,0 ; assume slice starts - ld (lba),hl ; ... at LBA offset - ld (lba+2),hl ; ... of zero - ld hl,16640 ; assume legacy value for - ld (sps),hl ; ... sectors per slice - ; If not hard disk, skip partition & slice stuff - ld a,(medid) ; get media id - cp 4 ; hard disk? - jr nz,boot9 ; if not, jump ahead - - ; Read MBR - ld de,8000h ; LBA address zero - ld hl,0 ; ... to read first sector - ld bc,mbrsec ; read into MBR buffer - ld (dma),bc ; save - ld b,1 ; one sector - ld a,(unit) ; get bootunit - ld c,a ; put in C - call diskread ; do it, no return on err - - ; Check signature - ld hl,(mbrsec+1FEh) ; get signature - ld a,l ; first byte - cp 055h ; should be $55 - jr nz,boot5 ; if not, no part table - ld a,h ; second byte - cp 0AAh ; should be $AA - jr nz,boot5 ; if not, no part table - - ; Search part table for CP/M entry (type 0x2E) - ld b,4 ; four entries in part table - ld hl,mbrsec+1BEh+4 ; offset of first part type -boot3: - ld a,(hl) ; get part type - cp 2Eh ; CP/M partition? - jr z,boot4 ; cool, grab the LBA offset - ld de,16 ; part table entry size - add hl,de ; bump to next part type - djnz boot3 ; loop thru table - jr boot5 ; too bad, no CP/M partition - -boot4: - ; Capture the starting LBA of the CP/M partition we found - ld de,4 ; LBA is 4 bytes after part type - add hl,de ; point to it - ld de,lba ; loc to store lba offset - ld bc,4 ; 4 bytes (32 bits) - ldir ; copy it - - ; For now, it is implied that a slice within a partition - ; table will be in the "new" disk format. So, we now - ; adjust the sectors per slice and media id. - - ; Use new slice format sectors per slice value - ld hl,16384 ; new sectors per slice - ld (sps),hl ; save it - - ; Update media id for new hard disk format - ld a,10 ; new media id - ld (medid),a ; save it - -boot5: - ; Adjust LBA offset based on target slice - ld a,(slice) ; get boot slice, A is loop cnt - ld hl,(lba) ; set DE:HL - ld de,(lba+2) ; ... to starting LBA - ld bc,(sps) ; sectors per slice -boot6: - or a ; set flags to check loop cntr - jr z,boot8 ; done if counter exhausted - add hl,bc ; add one slice to low word - jr nc,boot7 ; check for carry - inc de ; if so, bump high word -boot7: - dec a ; dec loop downcounter - jr boot6 ; and loop + ; Check errors from the Function + cp ERR_NOUNIT ; compare to no unit error + jp z,err_nodisk ; handle no disk err + cp ERR_NOMEDIA ; no media in the device + jp z,err_nodisk ; handle the error + cp ERR_RANGE ; slice is invalid + jp z,err_noslice ; bad slice, handle err + or a ; any other error + jp nz,err_diskio ; handle as general IO error + + ; Initialize slice start LBA and Media ID + ld a,c + ld (medid),a ; save media id boot8: ld (lba),hl ; save new lba, low word ld (lba+2),de ; save new lba, high word @@ -277,7 +212,7 @@ conin: conout: ld e,c ; output character in E ld bc,0180h ; unit 80h (console), func 1 = COUT - jp 0FFF0h + jp 0FFF0h list: ld a,85H halt @@ -311,7 +246,7 @@ setdma: call crlf call phex16 pop hl - + endif ld (dma),bc @@ -337,18 +272,18 @@ read: call phex16 ld hl,(lba+0) call phex16 - + endif ; Check device type ld a,(unit) ; get unit ld c,a ; BIOS Disk Unit in C - ld b,17h ; HBIOS DEVICE function + ld b,BF_DIODEVICE ; HBIOS DEVICE function rst 08 ; Do it, D=device type ld a,d ; put in accum cp 01h ; floppy? jr nz,read2 ; if not, do LBA i/o - + ; Floppy I/O ld de,(sect) ; sector -> de, head(d) becomes zero ld hl,(trk) ; track -> hl (low bit has head) @@ -356,7 +291,7 @@ read: rr l ; ... and into carry rl d ; carry bit (head) into d jr read3 ; do the disk i/o - + ; LBA I/O read2: ld hl,(trk) ; get track @@ -386,7 +321,7 @@ read3: call phex16 ex de,hl call phex16 - + endif ; DE:HL has sector address to read (LBA or CHS) @@ -401,14 +336,14 @@ diskread: ; Seek to requested sector in DE:HL push bc ; save unit & count - ld b,012h ; HBIOS func: seek + ld b,BF_DIOSEEK ; HBIOS func: seek call 0FFF0h ; do it pop bc ; recover unit & count jp nz,err_diskio ; handle error ; Read sector(s) into buffer ld e,b ; transfer count - ld b,013h ; HBIOS func: disk read + ld b,BF_DIOREAD ; HBIOS func: disk read ld hl,(dma) ; read into info sec buffer ld a,(0FFE0h) ; get current bank ld d,a ; put in D @@ -477,7 +412,7 @@ xmove: ;cin: ; ; Input character from console via HBIOS ; ld c,080H ; console unit to C -; ld b,00H ; HBIOS func: input char +; ld b,BF_CIOIN ; HBIOS func: input char ; call 0FFF0H ; HBIOS reads character ; ld a,e ; To A for return ; ret ; done @@ -486,7 +421,7 @@ xmove: ; ; Output character to console via HBIOS ; ld e,a ; output char to E ; ld c,080H ; console unit to C -; ld b,01H ; HBIOS func: output char +; ld b,BF_CIOOUT ; HBIOS func: output char ; jp 0FFF0H ; output & return writestr: @@ -539,7 +474,7 @@ err: str_err_prefix db "\r\n\r\n*** ","$" str_err_nodisk db "Disk unit not available","$" -str_err_noslice db "Disk unit does not support slices","$" +str_err_noslice db "Slice not supported","$" str_err_diskio db "Disk I/O failure","$" str_err_sig db "No system image on disk","$" str_err_api db "HBIOS API failure","$" @@ -728,7 +663,6 @@ dma ds 2 ; current DMA address medid ds 1 ; media id lba ds 4 ; current lba -sps ds 2 ; sectors per slice ds 64 stack equ $ diff --git a/Source/CPM3/diskio.z80 b/Source/CPM3/diskio.z80 index c91caa4c..8705427e 100644 --- a/Source/CPM3/diskio.z80 +++ b/Source/CPM3/diskio.z80 @@ -35,9 +35,9 @@ extrn ?pderr ; print BIOS disk error header extrn ?conin,?cono ; con in and out extrn ?const ; get console status - + extrn ?bnkxlt - + extrn phex16, phex8, cout, crlf, crlf2 @@ -45,15 +45,18 @@ maclib cpm3.lib + ; HBIOS related definitons + + include hbios.z80 + ; common control characters cr equ 13 lf equ 10 bell equ 7 + ; Extended Disk Parameter Headers (XDPHs) - ; Extended Disk Parameter Headers (XPDHs) - ; All DPH entries below are generic. They are updated during ; boot to point to available HBIOS disk unit/slices dynamically. @@ -186,7 +189,7 @@ dph15: dph 0,dpb$max ; Real DPB filled in at disk login dw 0, 0 ; LBA Offset cseg ; DPB must be resident - + dpb$max: dw 64 ; spt: sectors per track db 5 ; bsh: block shift factor @@ -288,7 +291,7 @@ dpb_fd144: ; 3.5" DS/HD Floppy Drive (1.44M) db 2 ; psh: 2 for 512 byte sectors db 3 ; phm: (512 / 128) - 1 -dpb_fd360: ; 5.25" DS/DD Floppy Drive (360K) +dpb_fd360: ; 5.25" DS/DD Floppy Drive (360K) dw 36 ; spt: sectors per track db 4 ; bsh: block shift factor db 15 ; blm: block mask @@ -370,7 +373,7 @@ dsk$init: dsk$init1: ; Get bank count of RAM/ROM disk - ld b,0FAh ; HBIOS Peek Function + ld b,BF_SYSPEEK ; HBIOS Peek Function ld a,(@hbbio) ; HBIOS bank id ld d,a ; ... goes in D rst 08 ; Call HBIOS, value in E @@ -399,9 +402,9 @@ dsk$init3: dec hl ; subtract 1 for proper DSM value ld (ix+5),l ; save updated ld (ix+6),h ; ... DSM value - + ret - + ;ld a,(@rdrv) ; unit being initialized ;ld hl,@bootdu ;cp (hl) ; compare to boot unit @@ -445,14 +448,13 @@ dsk$login: ;ret ; we have nothing to do in ; simple single density only environment. - - + ;ld a,'L' ;call cout - + ld (curdph),de ; save working DPH ex de,hl ; DPH adr to HL - dec hl ; point to slice + dec hl ; point to slice ld a,(hl) ; get slice ld (slice),a ; save it dec hl ; point to disk unit @@ -460,194 +462,38 @@ dsk$login: ld (unit),a ; save it inc a ; 0FFh -> 000h jp z,err_ret ; bail out on no disk mapped here - - ;call media ; update DPH for media - ;ret media: ; Set retry address ld hl,media ld (retry$adr),hl - + ; Sense media to determine media format - ld a,(unit) ; get disk unit - ld c,a ; put in C - ld b,18h ; HBIOS Media function - ld e,1 ; Enable media check/discovery + ld b,BF_EXTSLICE ; HBIOS func: SLICE + ld a,(unit) ; passing boot unit + ld d,a + ld a,(slice) ; and slice + ld e,a call 0FFF0H ; HBIOS call - jp nz,err_diskio ; handle error - ld a,e ; resultant media id to accum - ld (medid),a ; save media id - or a ; set flags, 0 is no media - jp z,err_nodisk ; handle no media error - - ; Initialize slice start LBA & sectors per slice - ld hl,0 ; assume slice starts - ld (lba),hl ; ... at LBA offset - set 7,h ; ... of zero - ld (lba+2),hl ; ... w/ LBA access - - ; Check device type - ld a,(unit) ; get disk unit - ld c,a ; put in C - ld b,17h ; HBIOS func: report device info - call 0FFF0h ; get unit info, device type in D - ld a,d ; device type -> A - cp 01h ; floppy? - jr nz,media1 ; if not, do LBA I/O - ld hl,lba+3 ; point to high order byte - res 7,(hl) ; switch from LBA -> CHS - -media1: - ld hl,16640 ; assume legacy value for - ld (sps),hl ; ... sectors per slice - - ; If not hard disk, skip partition & slice stuff - ld a,(medid) ; get media id - cp 4 ; hard disk? - jp nz,media9 ; if not, jump ahead - - ; Read MBR - ld de,8000h ; LBA address zero - ld hl,0 ; ... to read first sector - ld bc,mbrsec ; read into MBR buffer - ld (dma),bc ; save - ld a,(0FFE0h) ; get current HBIOS bank - ld (bank),a ; set DMA bank - ld a,(unit) ; get bootunit - ld c,a ; put in C - ld b,013h ; HBIOS func: disk read - call dsk$io ; do it - ret nz ; abort on error - - ; Check signature - ld hl,(mbrsec+1FEh) ; get signature - ld a,l ; first byte - cp 055h ; should be $55 - jr nz,media5 ; if not, no part table - ld a,h ; second byte - cp 0AAh ; should be $AA - jr nz,media5 ; if not, no part table - - ; Search part table for CP/M entry (type 0x2E) - ld b,4 ; four entries in part table - ld hl,mbrsec+1BEh+4 ; offset of first part type -media3: - ld a,(hl) ; get part type - cp 2Eh ; CP/M partition? - jr z,media4 ; cool, grab the LBA offset - ld de,16 ; part table entry size - add hl,de ; bump to next part type - djnz media3 ; loop thru table - jr media5 ; too bad, no CP/M partition - -media4: - ; Capture the starting LBA of the CP/M partition we found - ld de,4 ; LBA is 4 bytes after part type - add hl,de ; point to it - ld de,lba ; loc to store lba offset - ld bc,4 ; 4 bytes (32 bits) - ldir ; copy it - - ; Check that requested slice is "inside" partition. - ; Slice size is exactly 16,384 sectors (8mb), so we can just - ; right shift partition sector count by 14 bits - ld e,(hl) ; HL points to first byte - inc hl ; ... of 32 bit partition - ld d,(hl) ; ... sector count, - inc hl ; ... load sector count - push de ; ... into DE:HL - ld e,(hl) ; ... - inc hl ; ... - ld d,(hl) ; ... - pop hl ; ... DE:HL = part size in sectors - ld b,2 ; DE = DE:HL >> 2 (tricky!) - call rl32 ; DE = slicecnt - ex de,hl ; HL = slicecnt - ld a,(slice) ; get target slice - ld c,a ; put in C - ld b,0 ; BC := requested slice # - scf ; set carry! - sbc hl,bc ; max slices - slice - 1 - jp c,err_noslice ; slice too high, error exit - - ; For now, it is implied that a slice within a partition - ; table will be in the "new" disk format. So, we now - ; adjust the sectors per slice and media id. - - ; Use new slice format sectors per slice value - ld hl,16384 ; new sectors per slice - ld (sps),hl ; save it - - ; Update media id for new hard disk format - ld a,10 ; new media id - ld (medid),a ; save it - -media5: - ; Adjust LBA offset based on target slice - ld a,(slice) ; get slice, A is loop cnt - ld hl,(lba) ; set DE:HL - ld de,(lba+2) ; ... to starting LBA - ld bc,(sps) ; sectors per slice - res 7,d ; clear lba mode bit -boot6: - or a ; set flags to check loop cntr - jr z,boot8 ; done if counter exhausted - add hl,bc ; add one slice to low word - jr nc,boot7 ; check for carry - inc de ; if so, bump high word -boot7: - dec a ; dec loop downcounter - jr boot6 ; and loop -boot8: - - ; LBA offset of desired slice is now in DE:HL. - ; Need to check if the slice is beyond capacity of media. - ; If lba_off + sps >= dsk_cap, error! - - ; Save lba_off - push de ; msw - push hl ; lsw - - ; Add sps to compute lba_req - ld bc,(sps) ; sectors per slice - add hl,bc ; add one slice to low word - jr nc,dsk_mbr9 ; check for carry - inc de ; if so, bump high word -dsk_mbr9: - ; Save cap_req - ld (cap_req),hl ; lsw - ld (cap_req+2),de ; msw - - ; Get dsk_cap (de:hl) - ld b,1Ah ; hbios disk capacity func - ld a,(unit) ; disk unit number - ld c,a ; ... into c - rst 08 ; hbios call (de:hl = capacity) - - ; Save dsk_cap (de:hl) - push de ; save dsk_cap (msw) - push hl ; save dsk_cap (lsw) - - ; Check dsk_cap >= cap_req, cf set on overflow - ; No need save actual result - or a ; clear carry for sbc - pop hl ; dsk_cap lsw - ld de,(cap_req) ; cap_req lsw - sbc hl,de ; dsk_cap - lba_req (lsw) - pop hl ; dsk_cap msw - ld de,(cap_req+2) ; cap_req msw - sbc hl,de ; dsk_cap - lba_req (msw) - - ; Restore lba_off - pop hl ; lsw - pop de ; msw - - ; Abort on overflow with error! - jp c,err_noslice ; slice too high, error exit + ; Check errors from the Function + cp ERR_NOUNIT ; compare to no unit error + jp z,err_nodisk ; handle no disk err + cp ERR_NOMEDIA ; no media in the device + jp z,err_nodisk ; handle the error + cp ERR_RANGE ; slice is invalid + jp z,err_noslice ; bad slice, handle err + or a ; any other error + jp nz,err_diskio ; handle as general IO error + + ; Capture the Result + ld a,c ; resultant media id to accum + ld (medid),a ; save media id ; Finalize slice lba + BIT 7,B ; Is the floppy Disk Attribute Set + jr nz,media8 ; if it is Floppy; Skip Setting LBA set 7,d ; set LBA access flag +media8: ld (lba),hl ; save new lba, low word ld (lba+2),de ; save new lba, high word @@ -698,23 +544,23 @@ media10: ; if necessary, then return an error code in dsk$read: - ld a,13h ; HBIOS disk read function + ld a,BF_DIOREAD ; HBIOS disk read function ld (func),a ; save it jr dsk$rw ; common disk read/write code dsk$write: - ld a,14h ; HBIOS disk write function + ld a,BF_DIOWRITE ; HBIOS disk write function ld (func),a ; save it jr dsk$rw ; common disk read/write code dsk$rw: ; Common disk read/write routine ; Assumes func is set to HBIOS read or write - + ; Set retry address ld hl,dsk$rw$retry ld (retry$adr),hl - + ; Save XDPH address ld (curdph),de ; save to curdph @@ -743,12 +589,12 @@ dsk$rw$retry: rr l ; ... and into carry rl d ; carry bit (head) into d jr dsk$rw9 ; do the disk I/O - + dsk$rw2: ; LBA I/O push de ; save hiword of LBA push hl ; save loword of LBA - + ; Get track and shift into correct bits ld hl,(@trk) ; get track ld de,0 ; clear hiword @@ -767,7 +613,7 @@ dsk$rw2: pop bc ; lba offset hiword adc hl,bc ; add w/ carry to cur hiword ex de,hl ; swap back - + dsk$rw9: ; DE:HL has sector address to read (LBA or CHS) ld bc,(@dma) ; get dma address @@ -791,7 +637,7 @@ dsk$io: ; Seek to requested sector in DE:HL push bc ; save func & unit - ld b,012h ; HBIOS func: seek + ld b,BF_DIOSEEK ; HBIOS func: seek call 0FFF0h ; do it pop bc ; recover func & unit jp nz,err_diskio ; handle error @@ -824,7 +670,7 @@ mult8_loop: mult8_noadd: djnz mult8_loop ret - + rl32: ; Left shift DE:HL by B bits (B > 0) or a ; clear carry @@ -834,7 +680,7 @@ rl32: rl d ; rotate D thru carry djnz rl32 ; loop B times ret ; done - + cin$echo: ; get console input, echo it, and shift to upper case call ?const ; check for char or a ; set flags @@ -851,7 +697,7 @@ cin$echo1: ret c ; done if carry sub 'a' - 'A' ; make upper case ret ; and done - + ; call ?const ! ora a ! jz u$c1 ; see if any char already struck ; call ?conin ! jmp u$conin$echo ; yes, eat it and try again ;u$c1: @@ -872,7 +718,7 @@ err_perm: call prt_err jr err_ret err_diskio: - cp -10 ; HBIOS read only error + cp ERR_READONLY ; HBIOS read only error jr z,err_rdonly ; if so, handle special ld a,(@ermde) ; get error mode cp 0FFh ; FFh means suppress @@ -916,9 +762,6 @@ medid db 0 ; working media id value unit db 0 ; working disk unit num slice db 0 ; working slice num lba dw 0,0 ; working lba -sps dw 0 ; sectors per slice -cap_req dw 0,0 ; lba cap required for slice -mbrsec ds 512 ; MBR sector buffer dma dw 0 ; current DMA address bank db 0 ; HBIOS DMA bank func db 0 ; HBIOS function diff --git a/Source/CPM3/hbios.z80 b/Source/CPM3/hbios.z80 new file mode 100644 index 00000000..36b6c683 --- /dev/null +++ b/Source/CPM3/hbios.z80 @@ -0,0 +1,90 @@ + +; +BF_CIO EQU 000h +BF_CIOIN EQU BF_CIO + 0 ; CHARACTER INPUT +BF_CIOOUT EQU BF_CIO + 1 ; CHARACTER OUTPUT +BF_CIOIST EQU BF_CIO + 2 ; CHARACTER INPUT STATUS +BF_CIOOST EQU BF_CIO + 3 ; CHARACTER OUTPUT STATUS +BF_CIOINIT EQU BF_CIO + 4 ; INIT/RESET DEVICE/LINE CONFIG +BF_CIOQUERY EQU BF_CIO + 5 ; REPORT DEVICE/LINE CONFIG +BF_CIODEVICE EQU BF_CIO + 6 ; REPORT DEVICE INFO +; +; +BF_DIO EQU 010h +BF_DIOSTATUS EQU BF_DIO + 0 ; DISK STATUS +BF_DIORESET EQU BF_DIO + 1 ; DISK RESET +BF_DIOSEEK EQU BF_DIO + 2 ; DISK SEEK +BF_DIOREAD EQU BF_DIO + 3 ; DISK READ SECTORS +BF_DIOWRITE EQU BF_DIO + 4 ; DISK WRITE SECTORS +BF_DIOVERIFY EQU BF_DIO + 5 ; DISK VERIFY SECTORS +BF_DIOFORMAT EQU BF_DIO + 6 ; DISK FORMAT TRACK +BF_DIODEVICE EQU BF_DIO + 7 ; DISK DEVICE INFO REPORT +BF_DIOMEDIA EQU BF_DIO + 8 ; DISK MEDIA REPORT +BF_DIODEFMED EQU BF_DIO + 9 ; DEFINE DISK MEDIA +BF_DIOCAP EQU BF_DIO + 10 ; DISK CAPACITY REPORT +BF_DIOGEOM EQU BF_DIO + 11 ; DISK GEOMETRY REPORT +; +BF_EXT EQU 0E0h +BF_EXTSLICE EQU BF_EXT + 0 ; SLICE CALCULATION (WAS BF_SYSGET_DIOMED) +; +BF_SYS EQU 0F0h +BF_SYSRESET EQU BF_SYS + 0 ; SOFT RESET HBIOS +BF_SYSVER EQU BF_SYS + 1 ; GET HBIOS VERSION +BF_SYSSETBNK EQU BF_SYS + 2 ; SET CURRENT BANK +BF_SYSGETBNK EQU BF_SYS + 3 ; GET CURRENT BANK +BF_SYSSETCPY EQU BF_SYS + 4 ; BANK MEMORY COPY SETUP +BF_SYSBNKCPY EQU BF_SYS + 5 ; BANK MEMORY COPY +BF_SYSALLOC EQU BF_SYS + 6 ; ALLOC HBIOS HEAP MEMORY +BF_SYSFREE EQU BF_SYS + 7 ; FREE HBIOS HEAP MEMORY +BF_SYSGET EQU BF_SYS + 8 ; GET HBIOS INFO +BF_SYSSET EQU BF_SYS + 9 ; SET HBIOS PARAMETERS +BF_SYSPEEK EQU BF_SYS + 10 ; GET A BYTE VALUE FROM ALT BANK +BF_SYSPOKE EQU BF_SYS + 11 ; SET A BYTE VALUE IN ALT BANK +BF_SYSINT EQU BF_SYS + 12 ; MANAGE INTERRUPT VECTORS +; +; 2 BYTE FUNCTION/SUBFUNCTION : BC_ => BIOS CALL -> LOAD TO BC REGISTER +; +BC_SYSGET_CIOCNT EQU 0F800h ; GET CHAR UNIT COUNT +BC_SYSGET_CIOFN EQU 0F801h ; GET CIO UNIT FN/DATA ADR +BC_SYSGET_DIOCNT EQU 0F810h ; GET DISK UNIT COUNT +BC_SYSGET_DIOFN EQU 0F811h ; GET DIO UNIT FN/DATA ADR +BC_SYSGET_RTCCNT EQU 0F820h ; GET RTC UNIT COUNT +BC_SYSGET_DSKYCNT EQU 0F830h ; GET DSKY UNIT COUNT +BC_SYSGET_VDACNT EQU 0F840h ; GET VDA UNIT COUNT +BC_SYSGET_VDAFN EQU 0F841h ; GET VDA UNIT FN/DATA ADR +BC_SYSGET_SNDCNT EQU 0F850h ; GET VDA UNIT COUNT +BC_SYSGET_SNDFN EQU 0F851h ; GET SND UNIT FN/DATA ADR +BC_SYSGET_TIMER EQU 0F8D0h ; GET CURRENT TIMER VALUE +BC_SYSGET_SECS EQU 0F8D1h ; GET CURRENT SECONDS VALUE +BC_SYSGET_BOOTINFO EQU 0F8E0h ; GET BOOT INFORMATION +BC_SYSGET_CPUINFO EQU 0F8F0h ; GET CPU INFORMATION +BC_SYSGET_MEMINFO EQU 0F8F1h ; GET MEMORY CAPACTITY INFO +BC_SYSGET_BNKINFO EQU 0F8F2h ; GET BANK ASSIGNMENT INFO +BC_SYSGET_CPUSPD EQU 0F8F3h ; GET CLOCK SPEED & WAIT STATES +BC_SYSGET_PANEL EQU 0F8F4h ; GET FRONT PANEL SWITCHES VAL +BC_SYSGET_APPBNKS EQU 0F8F5h ; GET APP BANK INFORMATION +; +BC_SYSSET_TIMER EQU 0F9D0h ; SET TIMER VALUE +BC_SYSSET_SECS EQU 0F9D1h ; SET SECONDS VALUE +BC_SYSSET_BOOTINFO EQU 0F9E0h ; SET BOOT INFORMATION +BC_SYSSET_CPUSPD EQU 0F9F3h ; SET CLOCK SPEED & WAIT STATES +BC_SYSSET_PANEL EQU 0F9F4h ; SET FRONT PANEL LEDS +; +; +; +ERR_NONE EQU 0 ; SUCCESS +; +ERR_UNDEF EQU -1 ; UNDEFINED ERROR +ERR_NOTIMPL EQU -2 ; FUNCTION NOT IMPLEMENTED +ERR_NOFUNC EQU -3 ; INVALID FUNCTION +ERR_NOUNIT EQU -4 ; INVALID UNIT NUMBER +ERR_NOMEM EQU -5 ; OUT OF MEMORY +ERR_RANGE EQU -6 ; PARAMETER OUT OF RANGE +ERR_NOMEDIA EQU -7 ; MEDIA NOT PRESENT +ERR_NOHW EQU -8 ; HARDWARE NOT PRESENT +ERR_IO EQU -9 ; I/O ERROR +ERR_READONLY EQU -10 ; WRITE REQUEST TO READ-ONLY MEDIA +ERR_TIMEOUT EQU -11 ; DEVICE TIMEOUT +ERR_BADCFG EQU -12 ; INVALID CONFIGURATION +ERR_INTERNAL EQU -13 ; INTERNAL ERROR + diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index a972b53e..fbac6e99 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -1,17 +1,873 @@ -$define{doc_title}{Applications}$ +$define{doc_title}{Applications Guide}$ +$define{doc_author}{MartinR \& Phillip Summers}$ +$define{doc_authmail}{}$ $include{"Book.h"}$ # Summary -RomWBW includes a small suite of custom applications to maximize the -features available. In general, these applications are operating -system agnostic -- they run under any of the included operating +RomWBW is supplied with a suite of software applications that enhance +the use of the system. Some of these applications have been written +entirely from scratch for RomWBW. Others are pre-existing software +that has been customized for the RomWBW environment. This document +serves as a reference for these RomWBW-specific applications. + +The primary usage documentation for RomWBW is the $doc_user$. It is assumed +that the reader is generally familiar with this document. + +RomWBW also includes many generic software applications that have not +been modified for RomWBW (e.g., MSBASIC). These generic applications +are not documented here. Please refer to the application specific +documentation for these generic applications. The documentation for +some of these generic applications is included in the Doc folder of +the RomWBW distribution. + +The applications described in this document fall into two general +categories. + +1. **ROM Applications** are software applications that are loaded + from the the ROM memory of your RomWBW system. + +2. **CP/M Applications** are software applications that are loaded + from disk using a previously loaded CP/M (or CP/M like) operating + system using its command line. + +Note that some applications are available in both forms. For example, +Microsoft BASIC is available as a ROM application and as an application +that runs under CP/M. Only the ROM variant is documented here because +the CP/M variant is not RomWBW-specific. + +You will see that two of the RomWBW operating systems are included +here as ROM Applications. Although operating systems are normally +loaded from disk, RomWBW does include a way to launch CP/M 2.2 and +Z-System directly from ROM. + +Most RomWBW systems include a ROM disk. A running operating system +can load applications from the ROM disk just like a floppy or hard +disk. Applications loaded from the ROM disk by CP/M are considered +to be CP/M applications, **not** ROM applications. + +`\clearpage`{=latex} + +# Boot Menu + +The system start-up process is described in some detail in the RomWBW +User Guide, and for the sake of completeness there is some overlap here. + +When a RomWBW system is started the user is presented with a sign-on +message at the default console detailing the RomWBW version and build +date. The system follows this with the list of hardware that it has +discovered, a list of devices and the system units assigned to them, +before finally inviting the to select a boot device with the prompt: + +``` +Boot [H=Help]: +``` + +At this point, the user may specify a unit, optionally with a slice, +to boot from. Note that it is not possible to boot from from the serial (ASCI) +or memory disk (MD) devices. + +Alternatively the user may select one of the built-in Boot Loader commands. +A menu of which may be displayed by pressing the H or ? keys (for Help). +Furthermore, a ROM application may also be started from this prompt. + +This start-up process is described in some detailed in the RomWBW User Guide, +and there is some overlap here. + +## Help + +After pressing H or ? at the boot prompt the user will be presented with +the following list of available commands: + +``` +L - List ROM Applications +D - Device Inventory +R - Reboot System +I [] - Set Console Interface/Baud code +V [] - View/Set HBIOS Diagnostic Verbosity +[.] - Boot Disk Unit/Slice +``` + +The function performed by each command is described below: + +L: + +: Lists the applications and operating systems that are built into the + RomWBW ROM - e.g., low-level monitor utility, CP/M, or BASIC. + + +D: + +: Displays the list of system devices that was first displayed when the + system was started. + + +R: + +: Will restart the system. Note that this does not reset hardware devices + in the same way that power-on or pressing the reset button would. + + +I: + +: Allows the user to select the interface connected to the console, and + optionally the Baud rate. This could be used to allow the system to be + operated from a second console. + +V: + +: Enables the display of invalid RomWBW HBIOS API calls. This option + is very unlikely to be used by a user and is used for development + purposes. + +And, finally, the system may be booted by specifying the unit number, +and optional slice, separated by a period('.'), of where the disk operating +system software is located - eg 2, 4.1, 5.3 + +Alternatively, a RomWBW ROM application may be started by pressing the appropriate +key from the applications menu, shown in the following section. + +## List ROM Applications + +If the user presses the L key at the Boot Loader prompt then the system will +display the list of ROM applications that are built into RomWBW. If a command +letter is known, then it may be entered directly at the prompt rather than +first displaying the menu. + +The ROM applications available from the boot prompt are: + +``` +M: Monitor +C: CP/M 2.2 +Z: Z-System +B: BASIC +T: Tasty BASIC +F: Forth +P: Play a Game +N: Network Boot +X: XModem Flash Updater +U: User App +``` + +Each of these will now be described in greater detail. + +# ROM Applications + +## Monitor + +The Monitor program is a low-level utility that can be used +for testing and programming. It allows programs to be entered, +memory to be examined and modified, and input/output devices to +be read or written to. + +It's key advantage is that is available at boot up. + +Its key disadvantages are that code cannot be entered in assembly +language and there is no ability to save to persistent storage (disks). + +The available memory area for programming is `0100h-EDFFh`. +The following areas are reserved: + +Memory Area | Function +------------|----------------------------------- +`0000-00FFh`| Jump and restart (RST) vectors +`EE00-FDFFh`| Monitor +`FE00-FFFFh`| HBIOS proxy + +The monitor uses a prompt in the format of `xx>` where xx is the +RomWBW bank id number. For example, the prompt may look like this +and means that Bank Id 0x8E is currently mapped into the low 32K +of processor memory. + +`8E>` + +Please refer to Section 4 of the $doc_sys# for a description of the +RomWBW Bank Id and how it relates to the physical bank of memory being +mapped to the lower 32K of the processor. The method of assigning +banks for specific RomWBW functions is also described. + +Commands can be entered at the command prompt. +Automatic case conversion takes place on command entry and all +numeric arguments are expected to be in hex format. + +The Monitor allows access to all memory locations but ROM and +Flash memory cannot be written to. At startup, the Monitor will +select the default "User" bank. The `S` command is provided to +allow selecting alternate banks. + +There now follows a more detailed guide to using the RomWBW +Monitor program: + +### Command Summary + +**`?`** - Will display a summary of the available commands. + +``` +Monitor Commands (all values in hex): +B - Boot system +D xxxx [yyyy] - Dump memory from xxxx to yyyy +F xxxx yyyy zz - Fill memory from xxxx to yyyy with zz +H - Halt system +I xxxx - Input from port xxxx +K - Keyboard echo +L - Load Intel hex data +M xxxx yyyy zzzz - Move memory block xxxx-yyyy to zzzz +O xxxx yy - Output value yy to port xxxx +P xxxx - Program RAM at address xxxx +R xxxx [[yy] [zzzz]] - Run code at address xxxx + Pass yy and zzzz to register A and BC +S xx - Set bank to xx +U - Set bank to previous bank +T xxxx - X-modem transfer to memory location xxxx +X - Exit monitor +``` + +### Cold Boot + +**`B`** - Performs a cold boot of the RomWBW system. A complete +re-initialization of the system is performed and the system +returns to the Boot Loader prompt. + +### Dump Memory + +**`D xxxx [yyyy]`** - Dump memory from hex location xxxx to yyyy +on the screen as lines of 16 hexadecimal bytes with their +ASCII equivalents (if within a set range, else a '.' is +printed). If the end address is omitted then 256 bytes are +displayed. + +A good tool to see where code is located, check +for version id, obtain details for chip configurations and +execution paths. + +Example: `D 100 1FF` + +``` +0100: 10 0B 01 5A 33 45 4E 56 01 00 00 2A 06 00 F9 11 ...Z3ENV...*..ù. +0110: DE 38 37 ED 52 4D 44 0B 6B 62 13 36 00 ED B0 21 Þ87íRMD.kb.6.í°! +0120: 7D 32 E5 21 80 00 4E 23 06 00 09 36 00 21 81 00 }2å!..N#...6.!.. +0130: E5 CD 6C 1F C1 C1 E5 2A C9 8C E5 CD 45 05 E5 CD åÍl.ÁÁå*É.åÍE.åÍ +0140: 59 1F C3 00 00 C3 AE 01 C3 51 04 C3 4C 02 C3 57 Y.Ã..î.ÃQ.ÃL.ÃW +0150: 02 C3 64 02 C3 75 02 C3 88 02 C3 B2 03 C3 0D 04 .Ãd.Ãu.Ã..ò.Ã.. +0160: C3 19 04 C3 22 04 C3 2A 04 C3 35 04 C3 40 04 C3 Ã..Ã".Ã*.Ã5.Ã@.à +0170: 48 04 C3 50 04 C3 50 04 C3 50 04 C3 8F 02 C3 93 H.ÃP.ÃP.ÃP.Ã..Ã. +0180: 02 C3 94 02 C3 95 02 C3 85 04 C3 C7 04 C3 D1 01 .Ã..Ã..Ã..ÃÇ.ÃÑ. +0190: C3 48 02 C3 E7 04 C3 56 03 C3 D0 01 C3 D0 01 C3 ÃH.Ãç.ÃV.ÃÐ.ÃÐ.à +01A0: D0 01 C3 D0 01 C3 D0 01 C3 D0 01 01 02 01 CD 6B Ð.ÃÐ.ÃÐ.ÃÐ....Ík +01B0: 04 54 68 69 73 20 66 75 6E 63 74 69 6F 6E 20 6E .This function n +01C0: 6F 74 20 73 75 70 70 6F 72 74 65 64 2E 0D 0A 00 ot supported.... +01D0: C9 3E FF 32 3C 00 3A 5D 00 FE 20 28 14 D6 30 32 É>ÿ2<.:].þ (.Ö02 +01E0: AB 01 32 AD 01 3A 5E 00 FE 20 28 05 D6 30 32 AC «.2­.:^.þ (.Ö02¬ +01F0: 01 C5 01 F0 F8 CF E5 26 00 0E 0A CD 39 02 7D 3C .Å.ðøÏå&...Í9.}< +``` + +### Fill Memory + +**`F xxxx yyyy zz`** - Fill memory from hex xxxx to yyyy with +a single value of zz over the full range. The Dump command +can be used to confirm that the fill completed as expected. A +good way to zero out memory areas before writing machine data +for debug purposes. + +### Halt System + +**`H`** - Halt system. A Z80 HALT instruction is executed. The +system remains in the halt state until the system is +physically rebooted. Interrupts will not restart the +system. On systems that support a HALT status LED, the +LED will be illuminated. + +### Input from Port + +**`I xxxx`** - Input data from port xxxx and display to the screen. +This command is used to read values from hardware I/O ports +and display the contents in hexadecimal. + +### Keyboard Echo + +**`K`** - Echo any key-presses from the terminal. Press 'ESC' key +to quit. This facility provides that any key stroke sent to +the computer will be echoed back to the terminal. File down +loads will be echoed as well while this facility is ‘on’. + +### Load Hex + +**`L`** - Load a Intel Hex data via the terminal program. +The load address is defined in the hex file of the +assembled code. + +The terminal emulator program should be configured to +give a delay at the end of each line to allow the monitor +enough time to parse the line and move the data to memory. + +Keep in mind that this will be transient unless the +system supports battery backed memory. Saving to memory drive +is not supported. + +### Move Memory + +**`M xxxx yyyy zzzz`** - Move hex memory block xxxx to yyyy to +memory starting at hex location zzzz. Care should be taken +to insure that there is enough memory at the destination so +that code does not get over-written or memory wrapped around. + +### Output to Port + +**`O xxxx yy`** - Output data byte xx to port xxxx. This command is +used to send hexadecimal values to hardware I/O ports to +verify their operation and is the companion to the I operation. +Use clip leaded LEDs to confirm the data written. + +### Program Memory + +**`P xxxx`** - Program memory location xxxx. This routine will +allow you to program a hexadecimal value 'into memory starting +at location xxxx. Press 'Enter' on a blank line to +return to the Monitor prompt. + +The limitation around programming memory is that it must be +entered in hexadecimal. An alternative is to use the L command +to load a program that has been assembled to a hex file on the +remote computer. + +An excellent online resource for looking up opcodes for entry +can be found here: . + +### Run Program + +**`R xxxx [[yy] [zzzz]]`** - Run program at location xxxx. If optional +arguments yy and zzzz are entered they are loaded into the +A and BC register respectively. The return address of the +Monitor is saved on the stack so the program can return +to the monitor. On return to the monitor, the contents of +the A, HL, DE and BC registers are displayed. + +### Set Bank + +**`S xx`** - Set the physical memory bank to the RomWBW Bank Id +indicated by xx. Memory addresses +0x0000-0x7FFF (i.e. bottom 32k) are affected. Because the +interrupt vectors are stored in the bottom page of this +range, this function is disabled when interrupt mode 1 is +being used (IM1). Interrupt mode 2 is not affected as the +associated jump vectors are stored in high memory. + +Changing the bank also impacts the restart vectors (RST), +so executing code that calls the HBIOS using the `RST 08` +assembly code will not work. + +The monitor stack resides in high memory and is not affected +but any code that changes the stack to low memory will be +affected. + +The U command may be used to undo the change and return the +selected memory bank back to the previously selected one. + +Section 4 of the $doc_sys$ provides detail on how Bank Ids map to the +physical memory of the system and also how specific banks are utilized +by RomWBW. + +### Undo Bank + +**`U`** - Change the bank in memory back to the previously selected bank. +This command should be used in conjunction with the S command. + +### X-Modem Transfer + +**`T xxxx`** - Receive an X-modem file transfer and load it into +memory starting at location xxxx. + +128 byte blocks and checksum mode is the only supported +protocol. + +### Exit Monitor + +**`X`** - Exit the monitor program back to the main boot menu. + +## CP/M 2.2 + +This option will boot the CP/M 2.2 disk operating system +from an image contained within the ROM. Please refer to the +CPM User Manual in the Doc/CPM folder of the distribution for +CP/M usage. There are also many online resources. + +During the build process the system will create a ROM disk +containing a number of curated CP/M applications, and also a +RAM drive. The capacity of each will depend upon the size +of the ROM and RAM available to the system. A more complete +set of utilities are provided within the disk image files +provided as part of RomWBW. + +A number of the applications provided are generic to +CP/M, while others rely on particular hardware or +aspects of RomWBW itself. + +Those that are written specific to RomWBW include: ASSIGN, +CPUSPD, FDU, FORMAT, FLASH, FDISK80, MODE, REBOOT, RTC, SYSCOPY, +TALK, TIMER, XM, and COPYSL. + +The CP/M utilities supplied with RomWBW warrant more detailed descriptions, +and so are described in some detail in their own section +of this user guide. In summary they provide the initial capability +to manage and update your RomWBW system, to create other +bootable media (hardware dependent) and to write/debug +code using assembler and BASIC. + +## Z-System + +Z-System is a complete alternative, but entirely compatible, disk +operating system to CP/M. + +Z-System is comprised of ZSDOS 1.1 which is a +replacement for CP/M's Basic Disk Operating System (BDOS), and ZCPR which +is a replacement for the Console Command Processor (CCP). Either or both +may be used, although using both together will allow ZCPR to make use of +specific ZSDOS features. + +Documentation for Z-System may be found in the Doc/CPM folder of the +RomWBW distribution and the reader is referred to those. + +## BASIC + +For those who are not familiar with BASIC, it stands for Beginners All Purpose Symbolic +Instruction Code. + +RomWBW contains two versions of ROM BASIC, a full implementation and a "tiny" BASIC. + +The full implementation is a version of Microsoft BASIC from the NASCOM Computer. + +A comprehensive instruction manual is available in the Doc/Contrib directory. + +### RomWBW specific features + +- Sound +- Graphics +- Terminal Support + +### RomWBW unsupported features + +- Cassette loading +- Cassette saving + +## TastyBASIC + +TastyBASIC offers a minimal implementation of BASIC that is only 2304 +bytes in size. It originates from Li-Chen Wang's Palo Alto Tiny BASIC +from around 1976. It's small size is suited the tiny memory capacities of +the time. This implementation is by Dimitri Theulings and his original +source can be found at . + +### Features / Limitations + +- Integer arithmetic, numbers -32767 to 32767 +- Singles letter variables A-Z +- 1-dimensional array support +- Strings are not supported + +### Direct Commands + +- `LIST`,`RUN`, `NEW`, `CLEAR`, `BYE` + +### Statements + +- `LET`, `IF`, `GOTO`, `GOSUB RETURN`, `REM`, `FOR TO NEXT STEP`, `INPUT`, `PRINT`, `POKE`, `END` + +### Functions + +- `PEEK`, `RND`, `ABS`, `USR`, `SIZE` + +### Operators + +- `>=`, `#`, `>`, `=`, `<=`, `<` + +- Operator precedence is supported. + +Type ***BYE*** to return to the boot menu. + +## FORTH + +CamelForth is the version of Forth included as part of the boot ROM in +RomWBW. It has been converted from the Z80 CP/M version published at +. The +author is Brad Rodriguez who is a prolific Forth enthusiast, whose work +can be found here: . + +For those are who are not familiar with Forth, I recommend the +wikipedia article +and the Forth Interest Group website . + +### Important things to know + +Forth is case sensitive. + +To exit back to the boot loader type ***bye*** + +To get a list of available words type ***WORDS*** + +To reset Forth to its initial state type ***COLD*** + +Most of the code you find on the internet will not run unless modified or additional Forth +words are added to the dictionary. + +This implementation does not support loading or saving of programs. All programs +need to be typed in. Additionally, screen editing and code blocks are not supported. + +### Structure of Forth source files + +File | Description +--------------|----------------------------- +camel80.azm | Code Primitives + camel80d.azm | CPU Dependencies + camel80h.azm | High Level words + camel80r.azm | RomWBW additions +glosshi.txt | Glossary of high level words +glosslo.txt | Glossary of low level words +glossr.txt | Glossary of RomWBW additions + +### RomWBW Additions + +Extensions and changes to this implementation compared to the original distribution are: + +- The source code has been converted from Z80mr assembler to Hector Peraza's zsm. + +- An additional file camel80r.azm has been added for including additional words to + the dictionary at build time. However, as currently configured there is very little space + allocated for addition words. Exceeding the allocated ROM space will generate an error + message when building. + +- James Bowman's double precision words have been added from his RC2014 version: + . + +Word | Syntax | Description +--------|----------------------------|--------------------------------- +D+ | d1 d2 -- d1+d2 | Add double numbers +2>R | d -- | 2 to R +2R> | d -- | fetch 2 from R +M*/ | d1 n2 u3 -- d=(d1*n2)/u3 | double precision mult. div +SVC | hl de bc n -- hl de bc af | Execute a RomWBW function +P! | n p -- | Write a byte to a I/O port +P@ | p -- n | Read a byte from and I/O port + +## Play a Game + +### 2048 + +2048 is a puzzle game that can be both mindless and challenging. It +appears deceptively simple but failure can creep up on you suddenly. + +It requires an ANSI/VT-100 compatible colour terminal to play. + +2048 is like a sliding puzzle game except the puzzle tiles are +numbers instead of pictures. Instead of moving a single tile all +tiles are moved simultaneously in the same direction. Where two +tiles of the same number collide, they are reduced to one tile with +the combined value. After every move a new tile is added with +a starting value of 2. + +The goal is to create a tile of 2048 before all tile locations are +occupied. Reaching the highest points score, which is the sum of all +the tiles is a secondary goal. The game will automatically end when +there are no more possible moves. + +Play consists of entering a direction to move. Directions can be entered +using any of three different keyboard direction sets. + +``` +Direction | Keys +----------|---------- +Up | w ^E 8 +Down | s ^X 2 +Left | a ^S 4 +Right | d ^D 6 +``` + +The puzzle board is a 4x4 grid. At start, the grid will be populated +with two 2 tiles. An example game sequence is shown below with new +tiles to the game shown in brackets. + +``` +Start Move 1 - Up Move 2 - Left Move 3 - Left ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| | | |(2)| | | | | 4 | | 4 | | | | | 4 | | | | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| | | | | | | | | | | | | |(4)| | 4 | | | | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| | | |(2)| | | | | | | | | | | | | | | | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| | | | | | | |(2)| | | 2 | | | | | 2 | |(2)| | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ + +Move 4 - Left Move 5 - Up Move 6 - Right Move 7 - Up ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| 4 | | | | | 8 | | | 4 | | | | 8 | 4 | | | | 8 | 8 | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| 4 | | |(4)| | 4 | | | | | | | | 4 | | | | | 2 | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| | | | | | | | | | | | | | | | | | | | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +| 4 | | | | |(2)| | | | |(2)| | | 2 | |(2)| | | | ++---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +``` + +This is how I lost this game: + +``` ++---+---+---+---+ +| 4 | 2 | 16| 4 | ++---+---+---+---+ +| 32| 64| 8 | 2 | ++---+---+---+---+ +| 4 | 8 |128| 32| ++---+---+---+---+ +|(2)| 16| 8 | 4 | ++---+---+---+---+ +``` + +Press Q at any time to bring up the option to Quit or Restart the game. + +## Network Boot + +If your RomWBW system is equipped with an RCBus MT011 module, it is +possible to boot into CP/M 2.2 directly from a CP/NET network server. +This means that the operating system will be loaded directly from the +network server and all of your drive letters will be provided by the +network server. + +This function requires substantial knowledge of CP/NET and it's +implementation within RomWBW. Section 10 of the $doc_user$ provides +complete instructions for setting up a CP/NET based network under RomWBW +including a section on network booting. + +## Xmodem Flash Updater + +The RomWBW Xmodem flash updater provides the capability to update RomWBW from the boot loader using an x-modem file transfer. It offers similar capabilities to Will Sowerbutts FLASH4 utility except that the flashing process occurs during the file transfer. + +These are the key differences between the two methods are: + +Xmodem Flash Updater | FLASH.COM (aka FLASH4) +--------------------------------|----------------- +Available from the boot loader | Well proven and tested +Xmodem transfer is integrated | Wider range of supported chips and hardware +Integrated checksum utilities | Wider range of supported platforms +Capability to copy a ROM image | Only reprograms sectors that have changed +More convenient one step process | Ability save and verify ROM images +No intermediate storage required | Progress display while flashing +. | Displays chip identification information +. | Faster file transfer + +The major disadvantages of the Updater is that it is new and relatively untested. There is the risk that a failed transfer will result in a partially flashed and unbootable ROM. There are some limitations on serial transfer speeds. + +The updater utility was initially intended to support the Retrobrew SBC-V2-005 platform using Atmel 39SF040 flash chips but has now been extended to be more generic in operation. + +Supported flash chips are +39SF040, 29F040, AT49F040, AT29C040, M29F040 , MX29F040, A29010B, A29040B + +The Atmel 39SF040 chip is recommended as it can erase and write 4Kb sectors. Other chips require the whole chip to be erased. + +### Usage + +In most cases, completing a ROM update is a simple as: + +1. Booting to the boot loader prompt +2. Selecting option X - Xmodem Flash Updater +3. Selecting option U - Update +4. Initiating an X-modem transfer of your ROM image on your console device +5. Selecting option R - Reboot + +If your console device is not able to transfer a ROM image i.e. your console is a VDU then you will have to use the console options to identify which character-input/output device is to be used as the serial device for transfer. + +When your console is the serial device used for the transfer, no progress information is displayed as this would disrupt the x-modem file transfer. If you use an alternate character-input/output devices as the serial device for the transfer then progress information will be displayed on the console device. + +Due to different platform processor speeds, serials speeds and flow control capabilities the default console or serial device speed may need to be reduced for a successful transfer and flash to occur. The **Set Console Interface/Baud code** option at the Boot Loader can be used to change the speed if required. Additionally, the Updater has options to set to and revert from a recommended speed. + +See the RomWBW Applications guide for additional information on performing upgrades. + +### Console Options +Option ( C ) - Set Console Device + +Option ( S ) - Set Serial Device + +By default the updater assumes that the current console is a serial device and that the ROM file to be flashed will also be transferred across this device, so the Console and Serial device are both the same. + +Either device can be can be change to another character-input/output device but the updater will always expect to receive the x-modem transfer on the **Serial Device** + +The advantage of transferring on a different device to the console is that progress information can be displayed during the transfer. + +Option ( > ) - Set Recommended Baud Rate + +Option ( < ) - Revert to Original Baud Rate + +### Programming options + +Option ( U ) - Begin Update + +The will begin the update process. The updater will expect to start receiving +an x-modem file on the serial device unit. + +X-modem sends the file in packets of 128 bytes. The updater will cache 32 +packets which is 1 flash sector and then write that sector to the +flash device. + +If using separate console, bank and sector progress information will shown + +``` +BANK 00 s00 s01 s02 s03 s04 s05 s06 s06 s07 +BANK 01 s00 s01 s02 s03 s04 s05 s06 s06 s07 +BANK 02 s00 s01 s02 s03 s04 s05 s06 s06 s07 etc +``` + +The x-modem file transfer protocol does not provide any filename or size +information for the transfer so the updater does not perform any checks +on the file suitability. + +The updater expects the file size to be a multiple of 4 kilobytes and +will write all data received to the flash device. A system update +file (128kb .img) or complete ROM can be received and written (512kb or +1024kb .rom) + +If the update fails it is recommended that you retry before rebooting or +exiting to the Boot loader as your machine may not be bootable. + +Option ( D ) - Duplicate flash #1 to flash #2 + +This option will make a copy of flash #1 onto flash #2. The purpose of this is to enable + making a backup copy of the current flash. Intended for systems using 2x512Kb Flash devices. + +Option ( V ) - Toggle Write Verify + +By default each flash sector will be verified after being written. Slight +performance improvements can be gained if turned off and could be used if +you are experiencing reliable transfers and flashing. + +### Exit options + +Option ( R ) - Reboot + +Execute a cold reboot. This should be done after a successful update. If +you perform a cold reboot after a failed update then it is likely that +your system will be unusable and removing and reprogramming the flash +will be required. + +Option ( Q ) - Quit to boot loader. + +The SBC Boot Loader is reloaded from ROM and +executed. After a successful update a Reboot should be performed. However, +in the case of a failed update this option could be used to attempt to +load CP/M and perform the normal x-modem / flash process to recover. + +### CRC Utility options + +Option ( 1 ) and ( 2 ) - Calculate and display CRC32 of 1st or 2nd 512k ROM. +Option ( 3 ) - Calculate and display CRC32 of a 1024k (2x512Kb) ROM. + +Can be used to verify if a ROM image has been transferred and flashed correctly. Refer to the Tera Term section below for details on configuring the automatic display of a files CRC after it has been transferred. + +In Windows, right clicking on a file should also give you a context menu option CRC SHA which will allow you to select a CRC32 calculation to be done on the selected file. + +### Tera Term macro configuration + +Macros are a useful tool for automatic common tasks. There are a number of instances where using macros to facilitate the update process could be worthwhile if you are: + +* Following the RomWBW development builds. +* Doing lots of configuration changes. +* Doing development on RomWBW drivers + +Macros can be used to automate sending ROM updates or images and for my own purposed I have set up a separate macro for transferring each of the standard build ROM, my own custom configuration ROM and update ROM. + +An example macro file to send an *.upd file, using checksum mode and display the crc32 value of the transmitted file: + +``` +Xmodem send, checksum, display crc32 +xmodemsend '\\desktop\users\phillip\documents\github\romwbw\binary\sbc_std_cust.upd' 1 +crc32file crc '\\desktop\users\phillip\documents\github\romwbw\binary\sbc_std_cust.rom' +sprintf '0x%08x' crc +messagebox inputstr 'crc32' +``` + +### Serial speed guidelines + +As identified in the introduction, there are limitations on serial speed depending on processor speed and flow control settings. Listed below are some of the results identified during testing. + +Configuration | Processor Speed | Maximum Serial Speed +-----------------------|-----------------|--------------------- +UART no flow control | 2MHz | 9600 +UART no flow control | 4MHz | 19200 +UART no flow control | 5MHz | 19200 +UART no flow control | 8MHz | 38400 +UART no flow control | 10MHz | 38400 +USB-fifo 2MHz+ | | n/a +ASCI no flow control | 18.432MHz | 9600 +ASCI with flow control | 18.432MHz | 38400 + +The **Set Recommend Baud Rate** option in the Updater menu follows the following guidelines. + +Processor Speed | Baud Rate +----------------|---------- +1MHz | 4800 +2-3MHz | 9600 +4-7MHz | 19200 +8-20MHz | 38400 + +These can be customized in the updater.asm source code in the CLKTBL table if desired. +Feedback to the RomWBW developers on these guidelines would be appreciated. + +### Notes + +All testing was done with Tera Term x-modem, Forcing checksum mode using macros was found to give the most reliable transfer. +Partial writes can be completed with 39SF040 chips. Other chips require entire flash to be erased before being written. +An SBC V2-005 MegaFlash or Z80 MBC required for 1mb flash support. The Updater assumes both chips are same type +Failure handling has not been tested. +Timing broadly calibrated on a Z80 SBC-v2 +Unabios not supported + +## User Application + +RomWBW provides the facility for a user to build, include and execute their +own custom application directly from the applications menu at boot-up. All that's +needed is for the user to create their custom code ready for inclusion, +recognising that there are certain constraints in doing this. + +In order to build properly, the build process requires that the file +`usrrom.asm` be found in the /Source/HBIOS folder of the RomWBW tree. + +This source file needs to assemble using TASM and it must start at +(ORG) address 00100H as the RomWBW HBIOS reserves locations 00000H +to 000FFH for internal use. Further, the user application must assemble to +a maximum of `USR-SIZ` bytes. + +During execution, the user application may make use of HBIOS calls as necessary, +and at exit it should return to the RomWBW boot loader +using the HBIOS warm reset. Note that no disk operating system (eg CP/M) +functions will be available as no disk operating system will have been loaded. + +There is a sample `usrrom.asm` supplied in Source/HBIOS and it is recommended +that, at least initially, users create their own application based on this as +a template because it already creates the necessary variables, starts at +(ORG) 00100H, and ensures that the assembled file is padded to create a +file `USR-SIZ` in length. Equally, should the the user's application prove +too large for the space available then assembly will be terminated with an error. +Users should not remove this check from the templated code. + +If required, the user application may make use of the Z80 interrupt system +but if the user application wishes to rely on HBIOS functionality then it +must adhere to the HBIOS framework for managing interupts. Alternatively, +if the user appliction has no need for the HBIOS then it may use its own +custom code for handling interrupts. In that case, a hard reset, rather +than an HBIOS warm start, would be necessary to return control to RomWBW. + +`\clearpage`{=latex} + +# CP/M Applications - ROM-Based & Disk-Based + +There now follows a more detailed guide to using the small suite of custom +applications included with RomWBW. In general, these applications are +operating system agnostic -- they run under any of the included operating systems. However, they all require RomWBW -- they are not generic CP/M applications. Most of the applications are custom written for RomWBW. However, some are standard CP/M applications that have been adapted to run under -RomWBW (e.g., XModem). The applications are generally matched to the +RomWBW (e.g. XM/XModem). The applications are generally matched to the version of RomWBW they are distributed with. So, if you upgrade the version of RomWBW in your system ROM, you will want to copy the corresponding applications to any storage devices you are using. @@ -27,37 +883,83 @@ data on your disk media, so don't do this if you are saving any data on the media. Most of the applications are included as source code in the RomWBW -distribution and are built in the normal build process. The source -code is found in the Source\\Apps directory of the distribution. The -binary executable applications are found in the Binary\\Apps directory. - -The following table clarifies where each of the applications can be -found: - -| Application | ROM Disk | Boot Disks | Apps Dir | -| ----------- | -------- | ---------- | -------- | -| ASSIGN | Yes | Yes | Yes | -| SYSCOPY | Yes | Yes | Yes | -| MODE | Yes | Yes | Yes | -| FDU | Yes | Yes | Yes | -| FORMAT | Yes | Yes | Yes | -| XM | Yes | Yes | Yes | -| FLASH | Yes | Yes | Yes | -| FDISK80 | Yes | Yes | Yes | -| TALK | Yes | Yes | Yes | -| RTC | Yes | Yes | Yes | -| TIMER | Yes | Yes | Yes | -| CPUSPD | Yes | Yes | Yes | -| FAT | Yes | Yes | Yes | -| CLRDIR | Yes | Yes | Yes | -| INTTEST | No | Yes | Yes | -| TUNE | No | Yes | Yes | -| WDATE | No | Yes | Yes | -| HTALK | No | Yes | Yes | +distribution and are built during the normal build process. The source +code is found in the Source/Apps directory of the distribution. The +binary executable applications are found in the Binary/Apps directory. + +The table below clarifies where each of the applications may be +found. It is not an exhaustive list, with further applications existing +on both the ROM-based and disk-based versions of CP/M. All of the Applications +incuded within RomWBW may be found with in the Binary/Apps directory. + +| Application | ROM Disk | Boot Disks | +| ----------- | :------: | :--------: | +| ASSIGN | Yes | Yes | +| CLRDIR | Yes | Yes | +| COPYSL | No | Yes | +| CPUSPD | Yes | Yes | +| FAT | No | Yes | +| FDISK80 | Yes | Yes | +| FDU | Yes | Yes | +| FLASH | Yes | Yes | +| FORMAT | Yes | Yes | +| HTALK | Yes | Yes | +| MODE | Yes | Yes | +| REBOOT | Yes | Yes | +| RTC | Yes | Yes | +| SURVEY | Yes | Yes | +| SYSCOPY | Yes | Yes | +| TALK | Yes | Yes | +| TIMER | Yes | Yes | +| TUNE | No | Yes | +| VGMPLAY | No | Yes | +| WDATE | No | Yes | +| XM | Yes | Yes | + +All of the CP/M applications may be found in the RomWBW Binary/Apps directory +and a user may copy those they need to their own customised disk/slice. + +Independently of whether the CP/M system was started from ROM or a boot disk, +such as a floppy disk or a slice on a CF or uSD memory card, applications +may be located on and executed from either the ROM-disk itself or from other media. +There are multiple disk images available for CP/M (eg floppy, legacy hard-disk and new +hard-disk formats) and they all contain essentially the same set of applications. + +There are particular advantages for each method of booting into CP/M. + +ROM-based CP/M: + +- A clean and reliable copy of CP/M with no possibility of corruption +- No additional hardware required +- Fast to boot +- Rolled forward with new releases of RomWBW + +Disk-based CP/M: + +- Greater capacity allows for a larger number of applications +- Allows for user-customisation of applications available +- Allows individual disks to be tailored to a particular purpose, eg word processor + +For systems starting CP/M from a disk created from an image file, there are a small number +of additional applications stored in the ```USER 2``` area of the disk. These applications +do not form part of CP/M, but rather are small utilities used for test purposes during develpment work. +They may, or may not, fuction correctly with any given hardware or software configuration. +Documentation for these untilities is very limited, though the source files maybe found +in the /Source folder. Note that these utiltites are not available when starting CP/M +from the ROM image or from a floppy disk. + +A number of the CP/M applications available are described in more detail in +the following sections, each with an indication as to whether that application +may be found on the ROM-disk, a boot-disk, or both. `\clearpage`{=latex} -# ASSIGN +## ASSIGN + +| ASSIGN | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| RomWBW includes a flexible mechanism for associating the operating system drive letters (A: - P:) to the physical devices in the system. @@ -65,7 +967,7 @@ Drive letter assignments can be changed on a running operating system without rebooting. The ASSIGN command facilitates this by allowing you to display, assign, reassign, or remove the drive letter assignments. -## Syntax +#### Syntax | `ASSIGN /?` | `ASSIGN /L` @@ -73,7 +975,7 @@ to display, assign, reassign, or remove the drive letter assignments. | `ASSIGN `*``*`=[`*``*`:[`*``*`]],...` | `ASSIGN `*``*`=`*``*`,...` -## Usage +#### Usage `ASSIGN /?` will display brief command usage and version information. @@ -110,7 +1012,7 @@ When the command runs it will echo the resultant assignments to the console to confirm its actions. It will also display the remaining space available in disk buffers. -## Notes +#### Notes If the `ASSIGN` command encounters any rule violations or errors, it will abort with an error and **none** of the drive assignments will be @@ -183,314 +1085,467 @@ vs. CP/M 3. If you utilize an RSX that modifies the BDOS version returned, you are likely to have serious problems. In this case, be sure to use `ASSIGN` prior to loading the RSX or after it is unloaded. -## Etymology +#### Etymology The `ASSIGN` command is an original product and the source code is provided in the RomWBW distribution. `\clearpage`{=latex} -# SYSCOPY +## CLRDIR -To make disk media bootable, you must write a system boot image onto -the system tracks of the of the media. The `SYSCOPY` allows you to -read or write the system boot image of disk media. +| CLRDIR | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -## Syntax +The `CLRDIR` command is used to initialise the directory area of a drive. -| `SYSCOPY `*``*`=`*``* +#### Syntax -*``* is the drive to receive the operating system image or -alternatively a filename to save the operating system image +| `CLRDIR `*``* -*``* is the drive containing an operating system image or -alternatively a filename containing the system image to be placed on -the destination +#### Usage -## Usage +`CLRDIR `*``* will initialise the directory area of the specified drive. The +drive may take any form - eg floppy disk, hard-disk, CF, uSD etc. -Both *``* and *``* can refer to either a drive letter or a -file. If a drive letter is specified, the system boot image will be -read or written to the system tracks of the drive. If a filename is -specified, the system boot image will be read or written to the -specified filename. +The use of FDISK80 to reserve space, or slices, for CP/M use as drives will not +initialise the directory areas of those slices. The resultant directory areas will +contain garbage left over from a previous use of the disk (or media) and using +them in this state with CP/M will very likely lead to failed or corrupted data +storage. Use `CLRDIR` to initialise the directory properly. -`SYSCOPY C:=ZSYS.SYS` will read a system boot image from the file -ZSYS.SYS and write it onto the system tracks of drive C:. +FDU will initialise the directory of a floppy disk as part of the formatting process +and so `CLRDIR` is unnecessary for a floppy disk. `CLRDIR` is, therefore, primarily used +with other types such as hard-disk, CF and uSD. -`SYSCOPY A:OS.SYS=C:` will capture the system boot image from the -system tracks of drive C: and store it in the file A:OS.SYS. +The `CLRDIR` command may also be used to effectively 'reformat' a used disk +by reinitialising its directory area and effectively making it blank again. -`SYSCOPY D:=C:` will copy the system tracks from drive C: onto the -system tracks of drive D:. +Use `CLRDIR` with caution as changes made to disks by `CLRDIR` cannot be undone. -## Notes +#### Notes -The RomWBW ROM disk contains files with the system boot image for -Z-System and CP/M 2.2. These files are called CPM.SYS and ZSYS.SYS -respectively. These files can be used as the source of a `SYSCOPY` -command to make a disk bootable with the corresponding operating -system. +If `CLRDIR` is used on disk containing data then the directory area will be +reinitialised and the data previously stored will be lost. -CP/M 3 uses a two phase boot process. To make a CP/M 3 drive bootable, -you need to put "CPMLDR.SYS" on the boot tracks of the disk and be -sure that the drive also contains the "CPM.SYS" file. The "CPMLDR.SYS" -file is not included on the ROM disk, but is found on the CP/M 3 disk -image. +`\clearpage`{=latex} -ZPM3 is similar to CP/M 3. You also put "CPMLDR.SYS" on the system -tracks of the drive to make it bootable. The ZPM3 operating system is -in the file called "CPM3.SYS" on the ZPM3 disk image. It may seem -confusing that ZPM3 is in the file called CPM3.SYS, but it is normal -for ZPM3. +## CPUSPD -For the purposes of booting an operating system, each disk slice is -considered its own operating system. Each slice can be made bootable -with its own system tracks. +| CPUSPD | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -`SYSCOPY` uses drive letters to specify where to read/write the system -boot images. However, at startup, the boot loaded will require you to -enter the actual disk device and slice to boot from. So, you need to -be careful to pay attention to the device and slice that is assigned -to a drive letter so you will know what to enter at the boot loader -prompt. By way of explanation, the boot loader does not know about -drive letters because the operating system is not loaded yet. +The `CPUSPD` application is used to change the running speed and wait +states of a RomWBW system. It can also be used to invoke a warm or +cold reboot of the system. -If you want to put a boot system image on a device and slice that is -not currently assigned to a drive letter, you will need to assign a -drive letter first. +The functionality is highly dependent on the capabilities of your system. -Not all disk formats include space for system tracks. Such disk -formats cannot contains a system boot image and, therefore, cannot be -made bootable. The best example of such disk formats are the ROM and -RAM disks. To maximize usable file space on these drives, they do not -have system tracks. Obviously, ROM operating system is supported by -choosing a ROM operating system at the boot loader prompt. Any attempt -to write a system boot image to disk media with no system tracks will -cause SYSCOPY to fail with an error message. +At present, all Z180 systems can change their CPU speed and their +wait states. SBC and MBC systems may be able to change their CPU +speed if the hardware supports it and it is enabled in the HBIOS +configuration. -The system boot images are paired with the ROM version in your system. -So, you must take care to update the system tracks of any bootable -disk when you upgrade your ROM firmware. +#### Syntax -The system boot images are **not** tied to specific hardware -configurations. System boot images and operating systems provided with -RomWBW will work with any supported RomWBW platform or hardware as -long as they are the same version as the RomWBW firmware. +| `CPUSPD [`*``*`[,[`*``*`][,[`*``*`]]]` +| `CPUSPD (W)armBoot` +| `CPUSPD (C)oldBoot` -## Etymology +*``* is one of (H)alf, (F)ull, (D)ouble, or (Q)uad. +*``* is a number specifying the desired memory wait states. +*``* is a number specifying the desired I/O wait states. -The `SYSCOPY` command is an original product and the source code is -provided in the RomWBW distribution. +#### Usage + +Entering `CPUSPD` with no parameters will display the current CPU speed +and wait state information of the running system. Wait state +information is not available for all systems. + +To modify the running speed of a system, you can specify the +`*``*` parameter. To modify either or both of the wait +states, you can enter the desired number. Either or both of the wait +state parameters may be omitted and the current wait state settings +will remain in effect. + +#### Notes + +The ability to modify the running speed and wait states of a system +varies widely depending on the hardware capabilities and the HBIOS +configuration settings. + +Note that it is frequently impossible to tell if a system is capable +of dynamic speed changes. This function makes the changes blindly. +If an attempt is made to change the speed of a system +that is definitely incapable of doing so, then an error result is +returned. + +The `CPUSPD` command makes no attempt to ensure that the new CPU +speed will actually work on the current hardware. Setting a CPU +speed that exceeds the capabilities of the system will result in +unstable operation or a system stall. + +Some peripherals are dependent on the CPU speed. For example, the Z180 +ASCI baud rate and system timer are derived from the CPU speed. The +CPUSPD application will attempt to adjust these peripherals for +correct operation after modifying the CPU speed. However, in some +cases this may not be possible. The baud rate of ASCI ports have a +limited set of divisors. If there is no satisfactory divisor to +retain the existing baud rate under the new CPU speed, then the baud +rate of the ASCI port(s) will be affected. + +#### Etymology + +The `CPUSPD` application was custom written for RomWBW. All of the +hardware interface code is specific to RomWBW and the application will +not operate correctly on non-RomWBW systems. + +The source code is provided in the RomWBW distribution. `\clearpage`{=latex} -# MODE +## COPYSL -The MODE command allows you to adjust the operating characteristics -such as baud rate, data bits, stop bits, and parity bits of serial -ports dynamically. +| COPYSL | | +| --------------------|---| +| ROM-based |No | +| Disk-based |Yes| -## Syntax +The purpose of this utility is to allow the copying of whole disk slices +from one disk slice to another slice -`MODE /?` -`MODE COM`*``*`: [`*``*`[,`*``*`[,`*``*`[,`*``*`]]]] [/P]` +This tool is only supported by RomWBW HBIOS, it uses HDIOS for all its +disk IO. UNA UBIOS is not supported by this tool. -`/?` displays command usage and version information +This tool is running on CP/M 2.2 or 3.0 and has access to full 64kb of +RAM, with a minimum of 48kb TPA -*``* is the character device unit number +This tool only works with hard disk devices, other media types like +floppy, are not supported at this time. This tool works across different +hard disk device types, even of different physical type -*``* is numerical baudrate +Both hd1k and hd512 are fully supported, however copying from one layout +type to the other is not supported. -*``* is (N)one, (O)dd, (E)ven, (M)ark, or (S)pace +During operation data is copied in a single read/write pass, data is not +verified by default. If there is a write error, it will be reported, and +operation will stop. -*``* is number of data bits, typically 7 or 8 +#### Syntax -*``* is number of stop bits, typically 1 or 2 +This tool operates at the disk level via RomWBW, thus all disk identifiers +are in the RomWBW \.\ format. -`/P` prompts user prior to setting new configuration +The syntax (similar to copy) for the command is: -## Usage +| `COPYSL `*\*[`.`*\*]`=`*\*[`.`*\*] [`/`*\*] + +E.g. + +| COPYSL 3.3=2.10 /U -`MODE /?` will display basic command usage and version information. +Means copy from slice 10 on disk 2, onto disk 3 slice 3. This is in unattended +mode, so you will not be asked to confirm the copy operation. -`MODE` with no parameters will list all devices and their current -configuration. +#### Options -`MODE <`*n*`>` will display the current configuration of the specified -character device unit. +F - Full disk copy. Copies the complete disk slice, all sectors. \ +U - Unattended. Will complete copy without confirmation from the user. \ +V - Verify. Does an additional read and verify after write. -`MODE COM`*``*`: [`*``*`[,`*``*`[,`*``*`[,` -*``*`]]]] [/P]` requests that the specified configuration -be set on the character device unit. You can use commas with no values -to leave some values unchanged. As an example, `MODE COM0: 9600,,,2` -will setup character device unit 0 for 9600 baud and 2 stop bits while -leaving data bits and stop bits as is. +#### Usage -Appending `/P` in a command specifying a new configuration will cause -the terminal output to pause and wait for the user to press a key. -This allows the user to change the local terminal setup before -continuing. +When run COPYSL will perform command line argument validation and display +an error if they are illegal. Also any disk IO errors will cause COPYSL +to exit. -## Notes +When specifying slice number(s) a check is made that the slice number is +valid, i.e. not too large that it would extend past the end of the +partition (hd1k), or the end of the media (hd512). For hd512 a check is +also performed to ensure that the slice would not extend into the first +defined partition. -Specified baud rate and line characteristics must be supported by the -serial unit. Any parameters not specified will remain unchanged. +The copy operation will be faster if the source disk has been formatted +with the CP/M file system, since during copy the CP/M directory is scanned, +and unused blocks are not copied. -Changes are not persisted and will revert to system defaults at next -system boot. +If a filesystem is not found, (or the /F option is chosen) all data is +copied. -Not all character devices support all `MODE` options. Some devices -(notably ASCI devices) have limited baud rate divisors. An attempt to -set a baud rate that the device cannot support will fail with an error -message. +Verification (if option chosen) will do an aditional read (after write) +and compare the data read matches what was written. This compare is only +on every 32'nd byte. This is done for efficiency. -## Etymology +During copy dots "." will be displayed to indicate progress of the copy. +Each "." represents 16 kBytes of data. Each line of "." 's is 1 mBytes. -The `MODE` command is an original product and the source code is -provided in the RomWBW distribution. +#### Notes + +This tool has been tested on both SD and CF media types and with hd1k and hd512 +formatted media. + +You cannot copy slices between different hard disk formats (hd512 and +hd1k) because the slices are incompatible. + +#### Etymology + +The `COPYSL` application was custom written for RomWBW and contributed +by Mark Pruden. `\clearpage`{=latex} -# FDU +## FAT -The FDU application is a Floppy Disk Utility that provides functions -to format and test floppy disk media. +| FAT | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -## Syntax +The operating systems included with RomWBW do not have any native +ability to access MS-DOS FAT filesystems. The FAT application can be +used overcome this. It will allow you to transfer files between CP/M +and FAT filesystems (wildcards supported). It can also erase files, +format, and list directories of FAT filesystems. -`FDU` +#### Syntax -## Usage +| `FAT DIR `*``* +| `FAT COPY `*` `* +| `FAT REN `*` `* +| `FAT DEL `*`[|]`* +| `FAT MD `*``* +| `FAT FORMAT `*``* -This application has an interactive user interface. At startup, you -will be prompted to select the floppy interface hardware in your -system. Following this, you will see the main menu of the program with -many functions to manage floppy disk drives. +| *``* is a FAT path +| *``*, *``* are FAT or CP/M filenames +| *``*, *``* are FAT filenames +| *``* is a FAT filename +| *``* is a FAT directory name +| *``* is a RomWBW disk unit number -The primary documentation for this application is in a file called -"FDU.txt" in the Doc directory of the RomWBW distribution. Please -consult this file for usage information. +| CP/M filespec: *``*`:FILENAME.EXT` (*``* is CP/M drive letter A-P) +| FAT filespec: *``*`:/DIR/FILENAME.EXT` (*``* is RomWBW disk unit #) -## Notes +#### Usage -This application interfaces directly to the floppy hardware in your -system. It does not use the RomWBW HBIOS. This means that even if your -system is not configured for floppy drives, you can still use `FDU` -to test your floppy drives and format floppy media. This also means it -is critical that you choose the correct hardware interface from the -initial selection when starting the application. +The `FAT` application determines whether you are referring to a CP/M +filesystem or a FAT filesystem based on the way you specify the file +or path. If the file or path is prefixed with a number (n:), then it +is assumed this is a FAT filesystem reference and is referring to the +FAT filesystem on RomWBW disk unit 'n'. Otherwise, the file +specification is assumed to be a normal CP/M file specification. -## Etymology +If you wanted to list the directory of the FAT filesystem on RomWBW +disk unit 2, you would use `FAT DIR 2:`. If you only wanted to see the +".TXT" files, you would use `FAT DIR 2:*.TXT`. -The `FDU` command is an original product and the source code is -provided in the RomWBW distribution. +If you wanted to copy all of the files on CP/M drive B: to the FAT +filesystem on RomWBW disk unit 4, you would use the command `FAT COPY +B:*.* 4:` If you wanted to copy the files to the "FOO" directory, then +you would use `FAT COPY B:*.* 4:\FOO`. To copy files in the opposite +direction, you just reverse the parameters. -`\clearpage`{=latex} +To rename the file "XXX.DAT" to "YYY.DAT" on a FAT filesystem, you +could use a command like "FAT REN 2:XXX.DAT 2:YYY.DAT". -# FORMAT +To delete a file "XXX.DAT" on a FAT filesystem in directory "FOO", you +would use a command like `FAT DEL 2:\FOO\XXX.DAT`. -This application is just a placeholder for a future version that will -make it simpler to format media including floppy disks. +To make a directory called "FOO2" on a FAT filesystem, you would use a +command line `FAT MD 2:\FOO2`. -## Syntax +To format the filesystem on a FAT partition, you would use a command +like `FAT FORMAT 2:`. Use this with caution because it will destroy +all data on any pre-existing FAT filesystem on disk unit 2. -`FORMAT` +#### Notes -## 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. -This application currently just displays a few lines of information -briefly instructing a user how to format media. It performs no actual -function beyond this display currently. +Although RomWBW-style CP/M media does not know anything about +partition tables, it is entirely possible to have media that +has both CP/M and FAT file systems on it. This is accomplished +by creating a FAT filesystem on the media that starts on a track +beyond the last track used by CP/M. Each CP/M slice can occupy +up to 8MB. So, make sure to start your FAT partition beyond +(slice count) * 9MB. -## Etymology +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: -The `FORMAT` command is an original product and the source code is -provided in the RomWBW distribution. +| `2:README.TXT` refers to FAT file "README.TXT" on disk unit #2 +| `C:README.TXT` refers to CP/M file "README.TXT" on CP/M drive C +| `README.TXT` refers to CP/M file "README.TXT" on the current CP/M drive + +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. + +Only the first 8 RomWBW disk units (0-7) can be referenced. + +Files written are not verified. + +Wildcard matching in FAT filesystems is a bit unusual as implemented by +FatFs. See FatFs documentation. + +#### Etymology + +The `FAT` application is an original RomWBW work, but utilizes the +FsFat library for all of the FAT filesystem work. This application is +written in C and requires SDCC to compile. As such it is not part of +the RomWBW build process. However, the full project and source code is +found in the [FAT GitHub Repository](https://github.com/wwarthen/FAT). + +#### Known Issues + +CP/M (and workalike) OSes have significant restrictions on filename +characters. The FAT application will block any attempt to create a +file on the CP/M filesystem containing any of these prohibited +characters: + +| `< > . , ; : ? * [ ] |/ \` + +The operation will be aborted with "`Error: Invalid Path Name`" if such +a filename character is encountered. + +Since MS-DOS does allow some of these characters, you can have +issues when copying files from MS-DOS to CP/M if the MS-DOS filenames +use these characters. Unfortunately, FAT is not yet smart enough to +substitute illegal characters with legal ones. So, you will need to +clean the filenames before trying to copy them to CP/M. + +The FAT application does try to detect the scenario where you are +copying a file to itself. However, this detection is not perfect and +can corrupt a file if it occurs. Be careful to avoid this. `\clearpage`{=latex} -# XM +## FDISK80 -An adaptation of Ward Christensen's X-Modem protocol for transferring -files between systems using a serial port. +| FDISK80 | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -## Syntax +`FDISK80` allows you to create and manage traditional partitions on +your hard disk media. Depending on the hard disk format and features +you are using, RomWBW may need hard disk partitions defined. -| `XM S `*``* -| `XM SK `*``* -| `XM L `*` `* -| `XM LK `*` `* -| `XM R `*``* +Please refer to the $doc_user$ for more information on the use of +partitions within RomWBW. It is very important to understand that +RomWBW slices are completely different from disk partitions. -`S`: Send a file -`L`: Send a file from a library -`R`: Receive a file -`K`: Use 1K blocksize for transfer +This application is provided by John Coffman. The primary +documentation is in the file "FDisk Manual.pdf" found in the +Doc directory of the RomWBW distribution. -*``* is the name of a file to send or receive +#### Usage -*``* is the name of a library (.lbr) to extract a file to send +`FDISK80` is an interactive application. At startup it will ask you +for the disk unit that you want to partition. When your RomWBW system +boots, it will display a table with the disk unit numbers. Use the +disk unit numbers from that table to enter the desired disk unit to +partition. -## Usage +`FDISK80` operates very much like other FDISK disk partitioning +applications. Please refer to the file called "FDisk Manual.pdf" in +the Doc directory of the RomWBW distribution for further instructions. -To transfer a file from your host computer to your RomWBW computer, do -the following: +If 'slices' for CP/M have been created using `FDISK80`, then these will +need to have their directory areas initialised properly using `CLRDIR`. +Failure to do this will likely result in corrupted data. -1. Enter one of the `XM` receive commands specifying the name you want -to give to the received file. +There is also more information on using FAT partitions with RomWBW in +the $doc_user$ document in the Doc directory of the distribution. -2. On your host computer select a file to send and initiate the XModem -send operation. +#### Notes -To transfer a file from your RomWBW computer to your host computer, do -the following: +Hard disk partition tables allow a maximum of 1024 cylinders when +defining partitions. However, RomWBW uses exclusively Logical Block +Addressing (LBA) which does not have this limitation. When defining +partitions is usually best to define the start and size of of the +partition using bytes or sectors. -1. Enter one of the `XM` send commands specifying the name of the file -to be sent. +#### Etymology -2. On your host computer, specify the name to assign to the received -file and initiate and XModem receive operation. +The source for this application was provided directly by John Coffman. +It is a C program and requires a build environment that includes the +SDCC compiler. As such, it is not included in the RomWBW build +process, only the binary executable is included. -Please refer to the documentation of your host computer's terminal -emulation software for specific instructions on how to use XModem. +Please contact John Coffman if you would like a copy of the source. -## Notes +`\clearpage`{=latex} -The XModem adaptation that comes with RomWBW will automatically use -the primary character device unit (character device unit 0) for the -file transfer. +## FDU -`XM` attempts to determine the best way to drive the serial port based -on your hardware configuration. When possible, it will bypass the -HBIOS for faster operation. However, in many cases, it will use HBIOS -so that flow control can be used. +| FDU | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -`XM` is dependent on a reliable communications channel. You must -ensure that the serial port can be serviced fast enough by either -using a baud rate that is low enough or ensuring that hardware flow -control is fully functional (end to end). +The FDU application is a Floppy Disk Utility that provides functions +to format and test floppy disk media. -## Etymology +#### Syntax -The `XM` application provided in RomWBW is an adaptation of a -pre-existing XModem application. Based on the source code comments, it -was originally adapted from Ward Christensen's MODEM2 by Keith -Petersen and is labelled version 12.5. +`FDU` -The original source of the application was found in the Walnut Creek -CD-ROM and is called XMDM125.ARK dated 7/15/86. +#### Usage -The actual application is virtually untouched in the RomWBW -adaptation. The majority of the work was in the modem driver which was -enhanced to detect the hardware being used and dynamically choose the -appropriate driver. +This application has an interactive user interface. At startup, you +will be prompted to select the floppy interface hardware in your +system. Following this, you will see the main menu of the program with +many functions to manage floppy disk drives. -The source code is provided in the RomWBW distribution. +The primary documentation for this application is in a file called +"FDU.txt" in the Doc directory of the RomWBW distribution. Please +consult this file for usage information. + +#### Notes + +This application interfaces directly to the floppy hardware in your +system. It does not use the RomWBW HBIOS. This means that even if your +system is not configured for floppy drives, you can still use `FDU` +to test your floppy drives and format floppy media. This also means it +is critical that you choose the correct hardware interface from the +initial selection when starting the application. + +#### Etymology + +The `FDU` command is an original product and the source code is +provided in the RomWBW distribution. `\clearpage`{=latex} -# FLASH +## FLASH + +| FLASH | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| Most of the hardware platforms that run RomWBW support the use of EEPROMs -- Electronically Erasable Programmable ROMs. The `FLASH` @@ -500,7 +1555,7 @@ removing the ROM from your system. This application is provided by Will Sowerbutts. -## Syntax +#### Syntax | `FLASH READ `*``*` [options]` | `FLASH VERIFY `*``*` [options]` @@ -523,172 +1578,242 @@ Options: | `/P112`: Force P112 bank switching | `/N8VEMSBC`: Force N8VEM SBC (v1, v2), Zeta (v1) SBC bank switching -## Usage +#### Usage + +To program your EEPROM ROM chip, first transfer the file to your +RomWBW system. Then use the command `FLASH WRITE *``*. The +application will auto-detect the type of EEPROM chip you have, +program it, and verify it. + +You can use the `FLASH READ` form of the command to read the ROM image +from your system into a file. This is useful if you want to save a +copy of your current ROM before reprogramming it. + +Although `FLASH WRITE` automatically performs a verification, you can +manually perform a verification function with the `FLASH VERIFY` form +of the command. + +The author's documentation for the application is found in the RomWBW +distribution in the Doc/Contrib directory. + +#### Notes + +The application supports a significant number of EEPROM parts. It +should automatically detect your part. If it does not recognize your +chip, make sure that you do not have a write protect jumper set -- +this jumper can prevent the ROM chip from being recognized. + +Reprogramming a ROM chip in-place is inherently dangerous. If anything +goes wrong, you will be left with a non-functional system and no +ability to run the `FLASH` application again. Use this application +with caution and be prepared to use a hardware ROM programmer to +restore your system if needed. + +#### Etymology + +This application was written and provided by Will Sowerbutts. He +provides it in binary format and is included in the RomWBW +distribution as a binary file. + +The source code for this application can be found at the [FLASH4 +GitHub repository](https://github.com/willsowerbutts/flash4). + +`\clearpage`{=latex} + +## FORMAT + +| FORMAT | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| + +This application is just a placeholder for a future version that will +make it simpler to format media including floppy disks. + +#### Syntax + +`FORMAT` + +#### Notes + +This application currently just displays a few lines of information +briefly instructing a user how to format media. It performs no actual +function beyond this display currently. + +#### Etymology + +The `FORMAT` command is an original product and the source code is +provided in the RomWBW distribution. + +`\clearpage`{=latex} + +## HTALK -To program your EEPROM ROM chip, first transfer the file to your -RomWBW system. Then use the command `FLASH WRITE *``*. The -application will auto-detect the type of EEPROM chip you have, -program it, and verify it. +| HTALK | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -You can use the `FLASH READ` form of the command to read the ROM image -from your system into a file. This is useful if you want to save a -copy of your current ROM before reprogramming it. +`HTALK` is a variation of the `TALK` utility, but it works directly +against HBIOS Character Units. -Although `FLASH WRITE` automatically performs a verification, you can -manually perform a verification function with the `FLASH VERIFY` form -of the command. +#### Syntax -The author's documentation for the application is found in the RomWBW -distribution in the Doc/Contrib directory. +`HTALK COMn:` -## Notes +#### Usage -The application supports a significant number of EEPROM parts. It -should automatically detect your part. If it does not recognize your -chip, make sure that you do not have a write protect jumper set -- -this jumper will prevent the ROM chip from being recognized. +`HTALK` operates at the HBIOS level. -Reprogramming a ROM chip in-place is inherently dangerous. If anything -goes wrong, you will be left with a non-functional system and no -ability to run the `FLASH` application again. Use this application -with caution and be prepared to use a hardware ROM programmer to -restore your system if needed. +The parameter to `TALK` refers to a HBIOS character unit. Upon +execution all characters typed at the console will be sent to the +device specified and all characters received by the specified device +will be echoed on the console. -## Etymology +Press Control+Z on the console to terminate the application. -This application was written and provided by Will Sowerbutts. He -provides it in binary format and is included in the RomWBW -distribution as a binary file. +#### Notes -The source code for this application can be found at the [FLASH4 -GitHub repository](https://github.com/willsowerbutts/flash4). -`\clearpage`{=latex} +#### Etymology -# FDISK80 +The `TALK` command was created and donated to RomWBW by Tom Plano. It +is an original product designed specifically for RomWBW. -`FDISK80` allows you to create and manage traditional partitions on -your hard disk media. Depending on the hard disk format and features -you are using, RomWBW may need hard disk partitions defined. +`\clearpage`{=latex} -Please refer to the $doc_user$ for more information on the use of -partitions within RomWBW. It is very important to understand that -RomWBW slices are completely different from disk partitions. +## MODE -This application is provided by John Coffman. The primary -documentation is in the file "FDisk Manual.pdf" found in the -Doc directory of the RomWBW distribution. +| MODE | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -## Usage +The MODE command allows you to adjust the operating characteristics +such as baud rate, data bits, stop bits, and parity bits of serial +ports dynamically. -`FDISK80` is an interactive application. At startup it will ask you -for the disk unit that you want to partition. When your RomWBW system -boots, it will display a table with the disk unit numbers. Use the -disk unit numbers from that table to enter the desired disk unit to -partition. +#### Syntax -`FDISK80` operates very much like other FDISK disk partitioning -applications. Please refer to the file called "FDisk Manual.pdf" in -the Doc directory of the RomWBW distribution for further instructions. +`MODE /?` +`MODE COM`*``*`: [`*``*`[,`*``*`[,`*``*`[,`*``*`]]]] [/P]` -There is also more information on using FAT partitions with RomWBW in -the $doc_user$ document in the Doc directory of the distribution. +`/?` displays command usage and version information -## Notes +*``* is the character device unit number -Hard disk partition tables allow a maximum of 1024 cylinders when -defining partitions. However, RomWBW uses exclusively Logical Block -Addressing (LBA) which does not have this limitation. When defining -partitions is usually best to define the start and size of of the -partition using bytes or sectors. +*``* is numerical baudrate -## Etymology +*``* is (N)one, (O)dd, (E)ven, (M)ark, or (S)pace -The source for this application was provided directly by John Coffman. -It is a C program and requires a build environment that includes the -SDCC compiler. As such, it is not included in the RomWBW build -process, only the binary executable is included. +*``* is number of data bits, typically 7 or 8 -Please contact John Coffman if you would like a copy of the source. +*``* is number of stop bits, typically 1 or 2 -`\clearpage`{=latex} +`/P` prompts user prior to setting new configuration -# TALK +#### Usage -It is sometimes useful to direct your console input/output to a -designated serial port. For example, if you were to connect a modem -to your second serial port, you might want to connect directly to it -and have everything you type sent to it and everything it sends be -shown on your console. The `TALK` application does this. +`MODE /?` will display basic command usage and version information. -## Syntax +`MODE` with no parameters will list all devices and their current +configuration. -`TALK [TTY:|CRT:|BAT:UC1:]` +`MODE <`*n*`>` will display the current configuration of the specified +character device unit. -## Usage +`MODE COM`*``*`: [`*``*`[,`*``*`[,`*``*`[,` +*``*`]]]] [/P]` requests that the specified configuration +be set on the character device unit. You can use commas with no values +to leave some values unchanged. As an example, `MODE COM0: 9600,,,2` +will setup character device unit 0 for 9600 baud and 2 stop bits while +leaving data bits and stop bits as is. -`TALK` operates at the operating system level (not HBIOS). +Appending `/P` in a command specifying a new configuration will cause +the terminal output to pause and wait for the user to press a key. +This allows the user to change the local terminal setup before +continuing. -The parameter to `TALK` refers to logical CP/M serial devices. Upon -execution all characters typed at the console will be sent to the -device specified and all characters received by the specified device -will be echoed on the console. +#### Notes -Press Control+Z on the console to terminate the application. +Specified baud rate and line characteristics must be supported by the +serial unit. Any parameters not specified will remain unchanged. -## Notes +Changes are not persisted and will revert to system defaults at next +system boot. -This application is designed for CP/M 2.2 or Z-System. Use on later -operating systems such as CP/M 3 is not supported. +Not all character devices support all `MODE` options. Some devices +(notably ASCI devices) have limited baud rate divisors. An attempt to +set a baud rate that the device cannot support will fail with an error +message. -## Etymology +#### Etymology -The `TALK` command is an original product and the source code is +The `MODE` command is an original product and the source code is provided in the RomWBW distribution. `\clearpage`{=latex} -# HTALK +## REBOOT -`HTALK` is a variation of the `TALK` utility, but it works directly -against HBIOS Character Units. +| REBOOT | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -## Syntax +The `REBOOT` application is used to restart a running system from an +operating system prompt. It can invoke either a warm or cold restart +via command line switches. -`HTALK COMn:` +#### Syntax -## Usage +| `REBOOT /W` +| `REBOOT /C` +| `REBOOT /?` -`HTALK` operates at the HBIOS level. +- /C initiates a cold restart +- /W initiates a warm restart +- /? displays command line usage -The parameter to `TALK` refers to a HBIOS character unit. Upon -execution all characters typed at the console will be sent to the -device specified and all characters received by the specified device -will be echoed on the console. +#### Usage -Press Control+Z on the console to terminate the application. +Entering `REBOOT` with no parameters will display the usage and +version information. Use /C or /W to immediately initiate a +cold or warm restart. -## Notes +#### Notes +A warm restart just returns to the Boot Loader menu. -## Etymology +A cold restart will reinitialize the system as though power had +been recycled. -The `TALK` command was created and donated to RomWBW by Tom Plano. It -is an original product designed specifically for RomWBW. +#### Etymology + +The `REBOOT` application was custom written for RomWBW by MartinR. All +of the hardware interface code is specific to RomWBW and the application +will not operate correctly on non-RomWBW systems. + +The source code is provided in the RomWBW distribution. `\clearpage`{=latex} -# RTC +## RTC + +| RTC | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |yes| Many RomWBW systems provide real time clock hardware. The RTC application is a simple, interactive program allowing you to display and set the time and registers of the RTC. -## Syntax +#### Syntax `RTC` -## Usage +#### Usage After startup, the application provides the following options: @@ -709,7 +1834,7 @@ After startup, the application provides the following options: | `B)oot` | will reboot your system. | | `H)elp` | displays brief help. | -## Notes +#### Notes When using Get and Put options, the register number to read/write is entered in hex. The non-volatile ram register numbers are 0x20-0x3F. @@ -721,7 +1846,7 @@ the two hex characters. Yes, this should be improved. The `RTC` application interacts directly with the RTC hardware bypassing HBIOS. -## Etymology +#### Etymology The `RTC` application was originally written by Andrew Lynch as part of the original ECB SBC board development. It has since been modified to @@ -729,308 +1854,254 @@ support most of the hardware variations included with RomWBW. `\clearpage`{=latex} -# TIMER - -Most RomWBW systems have a 50Hz periodic system timer. A counter is -incremented every time a timer tick occurs. The `TIMER` application -displays the value of the counter. - -## Syntax - -`TIMER` -`TIMER /?` -`TIMER /C` +## SURVEY -## Usage +| SURVEY | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -Use `TIMER` to display the current value of the counter. +The `SURVEY` command interrogates the system for information on disk +usage, memory usage and I/O ports used, and reports it to the user. -Use `TIMER /C` to display the value of the counter continuously. +#### Syntax -The display of the counter will be something like this: +The `SURVEY` command takes no arguments. -`00045444 Ticks, 0000162A.10 Seconds` +| `SURVEY` -The first number is the total number of ticks since system startup. -The second number is the total number of seconds since system startup. +#### Usage -## Notes +The results presented by `SURVEY` include: -The seconds value is displayed with a fractional value which is not a -an actual fraction, but rather the number of ticks past the seconds -rollover. All values are in hex. +1. Information about any drives, within the first eight (ie A: to H:), +which have been logged by the system. This includes: the total number +of files; the storage capacity occupied by those files; and the capacity +remaining on that drive. -The primary use of the `TIMER` application is to test the system -timer functionality of your system. +1. Information about the the 64KByte CP/M memory map, which is shown +diagramatically, and includes: locations and sizes of the TPA (Transient Program Area), +CP/M's CCP (Console Command Processor),and BDOS (Basic Disk Operating System). -In theory, you could capture the value before and after some process -you want to time. +1. The addresses of active CPU I/O ports. -## Etymology +#### Notes -The `TIMER` command is an original product and the source code is -provided in the RomWBW distribution. +The mechanism by which `SURVEY` discovers I/O ports is very conservative and +therefore the list returned may not be exhaustive. In particular, it may fail to +discover ports that are 'write-only'. `\clearpage`{=latex} -# INTTEST - -RomWBW includes an API allowing applications to "hook" interrupts. -The `INTTEST` application allows you to test this functionality. - -## Syntax - -`INTTEST` - -## Usage - -`INTTEST` is an interactive application. At startup, it will display -a list of the interrupt vector slots in your system along with the -current vector address for each of them. +## SYSCOPY -It then prompts you to enter the slot number (in hex) of a vector to -hook. After entering this, the application will watch the hooked -vector and countdown from 0xFF to 0x00 as interrupts are noted. +| SYSCOPY | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -When the counter reaches 0x00, the interrupt is unhooked and the -application terminates. The application can also be terminated by -pressing . - -## Notes - -If your system is running without interrupts active, the application -will terminate immediately. - -All slots have vectors even if the corresponding interrupt is not -doing anything. In this case, the vector is pointing to the "bad -interrupt" handler. - -If you hook a vector that is not receiving any interrupts, the -downcounter will not do anything. - -## Etymology - -The `INTTEST` command is an original product and the source code is -provided in the RomWBW distribution. - -`\clearpage`{=latex} +To make disk media bootable, you must write a system boot image onto +the system tracks of the of the media. The `SYSCOPY` allows you to +read or write the system boot image of disk media. -# FAT +#### Syntax -The operating systems included with RomWBW do not have any native -ability to access MS-DOS FAT filesystems. The FAT application can be -used overcome this. It will allow you to transfer files between CP/M -and FAT filesystems (wildcards supported). It can also erase files, -format, and list directories of FAT filesystems. +| `SYSCOPY `*``*`=`*``* -## Syntax +*``* is the drive to receive the operating system image or +alternatively a filename to save the operating system image -| `FAT DIR `*``* -| `FAT COPY `*` `* -| `FAT REN `*` `* -| `FAT DEL `*`[|]`* -| `FAT MD `*``* -| `FAT FORMAT `*``* +*``* is the drive containing an operating system image or +alternatively a filename containing the system image to be placed on +the destination -| *``* is a FAT path -| *``*, *``* are FAT or CP/M filenames -| *``*, *``* are FAT filenames -| *``* is a FAT filename -| *``* is a FAT directory name -| *``* is a RomWBW disk unit number +#### Usage -| CP/M filespec: *``*`:FILENAME.EXT` (*``* is CP/M drive letter A-P) -| FAT filespec: *``*`:/DIR/FILENAME.EXT` (*``* is RomWBW disk unit #) +Both *``* and *``* can refer to either a drive letter or a +file. If a drive letter is specified, the system boot image will be +read or written to the system tracks of the drive. If a filename is +specified, the system boot image will be read or written to the +specified filename. -## Usage +`SYSCOPY C:=ZSYS.SYS` will read a system boot image from the file +ZSYS.SYS and write it onto the system tracks of drive C:. -The `FAT` application determines whether you are referring to a CP/M -filesystem or a FAT filesystem based on the way you specify the file -or path. If the file or path is prefixed with a number (n:), then it -is assumed this is a FAT filesystem reference and is referring to the -FAT filesystem on RomWBW disk unit 'n'. Otherwise, the file -specification is assumed to be a normal CP/M file specification. +`SYSCOPY A:OS.SYS=C:` will capture the system boot image from the +system tracks of drive C: and store it in the file A:OS.SYS. -If you wanted to list the directory of the FAT filesystem on RomWBW -disk unit 2, you would use `FAT DIR 2:`. If you only wanted to see the -".TXT" files, you would use `FAT DIR 2:*.TXT`. +`SYSCOPY D:=C:` will copy the system tracks from drive C: onto the +system tracks of drive D:. -If you wanted to copy all of the files on CP/M drive B: to the FAT -filesystem on RomWBW disk unit 4, you would use the command `FAT COPY -B:*.* 4:` If you wanted to copy the files to the "FOO" directory, then -you would use `FAT COPY B:*.* 4:\FOO`. To copy files in the opposite -direction, you just reverse the parameters. +#### Notes -To rename the file "XXX.DAT" to "YYY.DAT" on a FAT filesystem, you -could use a command like "FAT REN 2:XXX.DAT 2:YYY.DAT". +The RomWBW ROM disk contains files with the system boot image for +Z-System and CP/M 2.2. These files are called CPM.SYS and ZSYS.SYS +respectively. These files can be used as the source of a `SYSCOPY` +command to make a disk bootable with the corresponding operating +system. -To delete a file "XXX.DAT" on a FAT filesystem in directory "FOO", you -would use a command like `FAT DEL 2:\FOO\XXX.DAT`. +CP/M 3 uses a two phase boot process. To make a CP/M 3 drive bootable, +you need to put "CPMLDR.SYS" on the boot tracks of the disk and be +sure that the drive also contains the "CPM.SYS" file. The "CPMLDR.SYS" +file is not included on the ROM disk, but is found on the CP/M 3 disk +image. -To make a directory called "FOO2" on a FAT filesystem, you would use a -command line `FAT MD 2:\FOO2`. +ZPM3 is similar to CP/M 3. You also put "CPMLDR.SYS" on the system +tracks of the drive to make it bootable. The ZPM3 operating system is +in the file called "CPM3.SYS" on the ZPM3 disk image. It may seem +confusing that ZPM3 is in the file called CPM3.SYS, but it is normal +for ZPM3. -To format the filesystem on a FAT partition, you would use a command -like `FAT FORMAT 2:`. Use this with caution because it will destroy -all data on any pre-existing FAT filesystem on disk unit 2. +For the purposes of booting an operating system, each disk slice is +considered its own operating system. Each slice can be made bootable +with its own system tracks. -## Notes +`SYSCOPY` uses drive letters to specify where to read/write the system +boot images. However, at startup, the boot loaded will require you to +enter the actual disk device and slice to boot from. So, you need to +be careful to pay attention to the device and slice that is assigned +to a drive letter so you will know what to enter at the boot loader +prompt. By way of explanation, the boot loader does not know about +drive letters because the operating system is not loaded yet. -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. +If you want to put a boot system image on a device and slice that is +not currently assigned to a drive letter, you will need to assign a +drive letter first. -Although RomWBW-style CP/M media does not know anything about -partition tables, it is entirely possible to have media that -has both CP/M and FAT file systems on it. This is accomplished -by creating a FAT filesystem on the media that starts on a track -beyond the last track used by CP/M. Each CP/M slice can occupy -up to 8MB. So, make sure to start your FAT partition beyond -(slice count) * 9MB. +Not all disk formats include space for system tracks. Such disk +formats cannot contains a system boot image and, therefore, cannot be +made bootable. The best example of such disk formats are the ROM and +RAM disks. To maximize usable file space on these drives, they do not +have system tracks. Obviously, ROM operating system is supported by +choosing a ROM operating system at the boot loader prompt. Any attempt +to write a system boot image to disk media with no system tracks will +cause SYSCOPY to fail with an error message. -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: +The system boot images are paired with the ROM version in your system. +So, you must take care to update the system tracks of any bootable +disk when you upgrade your ROM firmware. -| `2:README.TXT` refers to FAT file "README.TXT" on disk unit #2 -| `C:README.TXT` refers to CP/M file "README.TXT" on CP/M drive C -| `README.TXT` refers to CP/M file "README.TXT" on the current CP/M drive +The system boot images are **not** tied to specific hardware +configurations. System boot images and operating systems provided with +RomWBW will work with any supported RomWBW platform or hardware as +long as they are the same version as the RomWBW firmware. -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. +#### Etymology -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. +The `SYSCOPY` command is an original product and the source code is +provided in the RomWBW distribution. -Accessing FAT filesystems on a floppy requires the use of RomWBW HBIOS -v2.9.1-pre.13 or greater. +`\clearpage`{=latex} -Only the first 8 RomWBW disk units (0-7) can be referenced. +## TALK -Files written are not verified. +| TALK | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -Wildcard matching in FAT filesystems is a bit unusual as implemented by -FatFs. See FatFs documentation. +It is sometimes useful to direct your console input/output to a +designated serial port. For example, if you were to connect a modem +to your second serial port, you might want to connect directly to it +and have everything you type sent to it and everything it sends be +shown on your console. The `TALK` application does this. -The `FAT FORMAT` command will not perform a physical format on floppy -disks. You must use FDU to do this prior to using `FAT FORMAT`. +#### Syntax -Formatting (`FAT FORMAT`) of floppies does not work well. The -underlying FatFs library uses some non-standard fields. The resulting -floppy may or may not be useable on other systems. It is best to format -a FAT floppy on a Windows or DOS system. You should have no problems -copying files to/from such a floppy using `FAT`. +`TALK [TTY:|CRT:|BAT:UC1:]` -## Etymology +#### Usage -The `FAT` application is an original RomWBW work, but utilizes the -FsFat library for all of the FAT filesystem work. This application is -written in C and requires SDCC to compile. As such it is not part of -the RomWBW build process. However, the full project and source code is -found in the [FAT GitHub Repository](https://github.com/wwarthen/FAT). +`TALK` operates at the operating system level (not HBIOS). -## Known Issues +The parameter to `TALK` refers to logical CP/M serial devices. Upon +execution all characters typed at the console will be sent to the +device specified and all characters received by the specified device +will be echoed on the console. -CP/M (and workalike) OSes have significant restrictions on filename -characters. The FAT application will block any attempt to create a -file on the CP/M filesystem containing any of these prohibited -characters: +Press Control+Z on the console to terminate the application. -| `< > . , ; : ? * [ ] |/ \` +#### Notes -The operation will be aborted with "`Error: Invalid Path Name`" if such -a filename character is encountered. +This application is designed for CP/M 2.2 or Z-System. Use on later +operating systems such as CP/M 3 is not supported. -Since MS-DOS does allow some of these characters, you can have -issues when copying files from MS-DOS to CP/M if the MS-DOS filenames -use these characters. Unfortunately, FAT is not yet smart enough to -substitute illegal characters with legal ones. So, you will need to -clean the filenames before trying to copy them to CP/M. +#### Etymology -The FAT application does try to detect the scenario where you are -copying a file to itself. However, this detection is not perfect and -can corrupt a file if it occurs. Be careful to avoid this. +The `TALK` command is an original product and the source code is +provided in the RomWBW distribution. `\clearpage`{=latex} -# CLRDIR - -`CLRDIR` is used to initialize a CP/M filesystem. This is frequently -used to prepare RomWBW disk slices for use. If there is any data -on the filesystem, it will be destroyed. `CLRDIR` works on CP/M -drive letters. To initialize a RomWBW slice, the slice must first be -assigned to a CP/M drive letter. +## TIMER +| TIMER | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| -This application is provided by Max Scane. - -## Syntax +Most RomWBW systems have a 50Hz periodic system timer. A counter is +incremented every time a timer tick occurs. The `TIMER` application +displays the value of the counter. -| `CLRDIR `*``*` [options]` +#### Syntax -*``* is the CP/M drive letter to be cleared (e.g., "A:") +`TIMER` +`TIMER /?` +`TIMER /C` +#### Usage -Options: +Use `TIMER` to display the current value of the counter. -| `-D`: Enable debug output -| `-Y`: Do not ask for confirmation +Use `TIMER /C` to display the value of the counter continuously. -## Usage +The display of the counter will be something like this: -This application has a command line interface only. Type an -appropriately formatted command at the command prompt at any of the -RomWBW CP/M operatings systems (CP/M 2.2, ZSDOS, CP/M 3, etc.). +`13426 Ticks 268.52 Seconds` -You will be prompted for confirmation to continue. You must type a -**capital** 'Y' to proceed. The application will confirm that the -drive has been cleared. +The first number is the total number of ticks since system startup, where +there are 50 ticks per second. The second number is the total number of +seconds since system startup. Numbers are displayed in decimal format. -If used under ZSDOS, you should issue a `RELOG` command after using -`CLRDIR` to ensure that CP/M relogs the cleared drive. +#### Notes -## Notes +The seconds value is displayed with a fractional value which is not a +an actual fraction, but rather the number of ticks past the seconds +rollover. All values are in hex. -This command is inherently dangerous. It will completely destroy the -directory area of the target drive. Be very careful to ensure you do -not target a drive that contains useful data. +The primary use of the `TIMER` application is to test the system +timer functionality of your system. -`CLRDIR` understands the directory formats of all of the RomWBW -CPM-like operating systems and devices including floppy disks, CF/SD -Cards, etc. +In theory, you could capture the value before and after some process +you want to time. -## Etymology +#### Etymology -This application was written and provided by Max Scane. He -provides it in binary format and is included in the RomWBW -distribution as a binary file. +The `TIMER` command is an original product and the source code is +provided in the RomWBW distribution. `\clearpage`{=latex} -# TUNE +## TUNE + +| TUNE | | +| --------------------|---| +| ROM-based |No | +| Disk-based |Yes| If your RomWBW system has a sound card based on either an AY-3-8190 or YM2149F sound chip, you can use the `TUNE` application to play PT or MYM sound files. -## Syntax +#### Syntax `TUNE `*``* *``* is the name of a sound file ending in .PT2, .PT3, or .MYM -## Usage +#### Usage The TUNE application supports PT and YM sound file formats. It determines the format of the file from the extension of the file, so @@ -1040,7 +2111,7 @@ To play a sound file, just use the command and specify the file to play after the command. So, for example, `TUNE ATTACK.PT2` will immediately begin playing the PT sound file "ATTACK.PT2". -## Notes +#### Notes The `TUNE` application automatically probes for compatible hardware at well known port addresses at startup. It will auto-configure itself @@ -1078,7 +2149,7 @@ The HBIOS mode also support other switch as described below. All RomWBW operating system boot disks include a selection of sound files in user area 3. -## Etymology +#### Etymology The `TUNE` application was custom written for RomWBW. All of the hardware interface code is specific to RomWBW. The sound file decoding @@ -1088,77 +2159,14 @@ is (c)2004-2007 S.V.Bulba . The source code is provided in the RomWBW distribution. -# CPUSPD - -The `CPUSPD` application is used to change the running speed and wait -states of a RomWBW system. - - The functionality is highly dependent on -the capabilities of your system. - -At present, all Z180 systems can change their CPU speed and their -wait states. SBC and MBC systems may be able to change their CPU -speed if the hardware supports it and it is enabled in the HBIOS -configuration. - -## Syntax - -| `CPUSPD [`*``*`[,[`*``*`][,[`*``*`]]]` - -*``* is one of HALF, FULL, or DOUBLE. -*``* is a number specifying the desired memory wait states. -*``* is a number specifying the desired I/O wait states. - -## Usage - -Entering `CPUSPD` with no parameters will display the current CPU speed -and wait state information of the running system. Wait state -information is not available for all systems. - -To modify the running speed of a system, you can specify the -`*``*` parameter. To modify either or both of the wait -states, you can enter the desired number. Either or both of the wait -state parameters may be omitted and the current wait state settings -will remain in effect. - -## Notes - -The ability to modify the running speed and wait states of a system -varies widely depending on the hardware capabilities and the HBIOS -configuration settings. - -Note that it is frequently impossible to tell if a system is capable -of dynamic speed changes. This function makes the changes blindly. -If an attempt is made to change the speed of a system -that is definitely incapable of doing so, then an error result is -returned. - -The `CPUSPD` command makes no attempt to ensure that the new CPU -speed will actually work on the current hardware. Setting a CPU -speed that exceeds the capabilities of the system will result in -unstable operation or a system stall. - -Some peripherals are dependent on the CPU speed. For example, the Z180 -ASCI baud rate and system timer are derived from the CPU speed. The -CPUSPD application will attempt to adjust these peripherals for -correct operation after modifying the CPU speed. However, in some -cases this may not be possible. The baud rate of ASCI ports have a -limited set of divisors. If there is no satisfactory divisor to -retain the existing baud rate under the new CPU speed, then the baud -rate of the ASCI port(s) will be affected. - -## Etymology - -The `CPUSPD` application was custom written for RomWBW. All of the -hardware interface code is specific to RomWBW and the application will -not operate correctly on non-RomWBW systems. - -The source code is provided in the RomWBW distribution. - - `\clearpage`{=latex} -# VGMPLAY +## VGMPLAY + +| VGMPLAY | | +| --------------------|---| +| ROM-based |No | +| Disk-based |Yes| This application will allow you to play Video Game Music files. VGM files contain music samples from a range of different sound chips @@ -1189,17 +2197,18 @@ Sound chips currently supported are: VGMPLAY supports playback of files with multiple combinations of these chips. -## Syntax +#### Syntax `VGMPLAY `*``* *``* is the name of a sound file ending in .VGM -## Usage +#### Usage VGMPLAY does not automatically detect the hardware platform or sound hardware that you are using. This means a version customized for your -system must be assembled before use. +system must be assembled before use. However, the version as distributed +will work with ECB bus SBC systems. To play a sound file, just use the VGMPLAY command and specify the file to play after the command. So, for example, `VGMPLAY TEDDY` will load @@ -1208,7 +2217,7 @@ the TEDDY.VGM sound file into memory and begin playing it. Playback can be stopped by pressing a key. There may be a delay before playback stops. -## Notes +#### Notes The default build configuration for VGMPLAY is: @@ -1235,16 +2244,21 @@ RomWBW distribution. `\clearpage`{=latex} -# WDATE +## WDATE + +| WDATE | | +| --------------------|---| +| ROM-based |No | +| Disk-based |Yes| `wdate` is a utility for CP/M systems that have Wayne Warthen's -ROMWBW firmware. It reads or sets the real-time clock, using function +RomWBW firmware. It reads or sets the real-time clock, using function calls in the BIOS. It should work on any RTC device that is supported by -ROMWBW, including the internal interrupt-driven timer that is is available +RomWBW, including the internal interrupt-driven timer that is is available on some systems. `wdate` differs from the `rtc.com` utility that is provided with the -ROMWBW version of CP/M in that it only gets and sets the date/time. +RomWBW version of CP/M in that it only gets and sets the date/time. `rtc.com` can also manipulate the nonvolatile RAM in certain clock devices, and modify the charge controller. However, `wdate` is (I would argue) easier to use, as it takes its input from the command line, which @@ -1259,14 +2273,14 @@ application for two reasons: first, the BIOS does not expose it. Second, there is no universally-accepted way to interpret it (which day does the week start on? Is '0' a valid day of the week?) -## Syntax +#### Syntax | `WDATE` | `WDATE ` *`
`* | `WDATE ` *`
`* | `WDATE ` *`
`* -## Usage +#### Usage A> wdate Saturday 27 May 13:14:39 2023 @@ -1292,25 +2306,112 @@ two-digit year starts at 2000. Show a summary of the command-line usage. -## Notes +#### Notes I've tested this utility with the DS1302 clock board designed by Ed Brindly, and on the interrupt-driven timer built into my Z180 board. However, it does not interact with hardware, only BIOS; I would expect it to work with other hardware. -wdate checks for the non-existence of ROMWBW, and also for failing +wdate checks for the non-existence of RomWBW, and also for failing operations on the RTC. It will display the terse "No RTC" message in both cases. -The ROMWBW functions that manipulate the date and time operate on BCD +The RomWBW functions that manipulate the date and time operate on BCD numbers, as RTC chips themselves usually do. wdate works in decimal, so that it can check that the user input makes sense. A substantial part of the program's code is taken up by number format conversion and range checking. -## Etymology +#### Etymology The `WDATE` application was written and contributed by Kevin Boone. The source code is available on GitHub at -[https://github.com/kevinboone/wdate-cpm/blob/main/README.md](https://github.com/kevinboone/wdate-cpm/blob/main/README.md). +. + +`\clearpage`{=latex} + +## XM + +| XM | | +| --------------------|---| +| ROM-based |Yes| +| Disk-based |Yes| + +An adaptation of Ward Christensen's X-Modem protocol for transferring +files between systems using a serial port. + +#### Syntax + +| `XM S `*``* +| `XM SK `*``* +| `XM L `*` `* +| `XM LK `*` `* +| `XM R `*``* + +`S`: Send a file +`L`: Send a file from a library +`R`: Receive a file +`K`: Use 1K blocksize for transfer + +*``* is the name of a file to send or receive + +*``* is the name of a library (.lbr) to extract a file to send + +#### Usage + +To transfer a file from your host computer to your RomWBW computer, do +the following: + +1. Enter one of the `XM` receive commands specifying the name you want +to give to the received file. + +2. On your host computer select a file to send and initiate the XModem +send operation. + +To transfer a file from your RomWBW computer to your host computer, do +the following: + +1. Enter one of the `XM` send commands specifying the name of the file +to be sent. + +2. On your host computer, specify the name to assign to the received +file and initiate and XModem receive operation. + +Please refer to the documentation of your host computer's terminal +emulation software for specific instructions on how to use XModem. + +#### Notes + +The XModem adaptation that comes with RomWBW will automatically use +the primary character device unit (character device unit 0) for the +file transfer. + +`XM` attempts to determine the best way to drive the serial port based +on your hardware configuration. When possible, it will bypass the +HBIOS for faster operation. However, in many cases, it will use HBIOS +so that flow control can be used. + +`XM` is dependent on a reliable communications channel. You must +ensure that the serial port can be serviced fast enough by either +using a baud rate that is low enough or ensuring that hardware flow +control is fully functional (end to end). + +#### Etymology + +The `XM` application provided in RomWBW is an adaptation of a +pre-existing XModem application. Based on the source code comments, it +was originally adapted from Ward Christensen's MODEM2 by Keith +Petersen and is labelled version 12.5. + +The original source of the application was found in the Walnut Creek +CD-ROM and is called XMDM125.ARK dated 7/15/86. + +The actual application is virtually untouched in the RomWBW +adaptation. The majority of the work was in the modem driver which was +enhanced to detect the hardware being used and dynamically choose the +appropriate driver. + +The source code is provided in the RomWBW distribution. + +`\clearpage`{=latex} diff --git a/Source/Doc/Basic.h b/Source/Doc/Basic.h index 87447530..def9b838 100644 --- a/Source/Doc/Basic.h +++ b/Source/Doc/Basic.h @@ -1,6 +1,7 @@ $define{doc_ver}{Version 3.5}$ $define{doc_product}{RomWBW}$ -$define{doc_root}{https://github.com/wwarthen/RomWBW/raw/dev/Doc}$ +$define{file_root}{https://github.com/wwarthen/RomWBW/raw/master}$ +$define{doc_root}{$file_root$/Doc}$ $ifndef{doc_title}$ $define{doc_title}{Document Title}$ $endif$ $ifndef{doc_author}$ $define{doc_author}{Wayne Warthen}$ $endif$ $define{doc_date}{$date{%d %b %Y}$}$ @@ -10,7 +11,6 @@ $define{doc_orgurl}{www.retrobrewcomputers.org}$ $define{doc_user}{[RomWBW User Guide]($doc_root$/RomWBW User Guide.pdf)}$ $define{doc_sys}{[RomWBW System Guide]($doc_root$/RomWBW System Guide.pdf)}$ $define{doc_apps}{[RomWBW Applications]($doc_root$/RomWBW Applications.pdf)}$ -$define{doc_romapps}{[RomWBW ROM Applications]($doc_root$/RomWBW ROM Applications.pdf)}$ $define{doc_catalog}{[RomWBW Disk Catalog]($doc_root$/RomWBW Disk Catalog.pdf)}$ $define{doc_errata}{[RomWBW Errata]($doc_root$/RomWBW Errata.pdf)}$ diff --git a/Source/Doc/Build.cmd b/Source/Doc/Build.cmd index 14ac1187..3736b6b5 100644 --- a/Source/Doc/Build.cmd +++ b/Source/Doc/Build.cmd @@ -2,8 +2,12 @@ setlocal :: -:: NOTE: Pandoc and Latex (MiKTeX or TexLive) must be installed -:: and available on commandline for this build to work!!! +:: NOTE: Pandoc, LuaLatex (MiKTeX or TexLive), and Roboto Font +:: must be installed and available on commandline for this build to work!!! +:: +:: - Pandoc (https://pandoc.org/) +:: - MiKTeX (https://miktex.org/) +:: - Install Roboto font from MiKTeX Console :: set TOOLS=..\..\Tools @@ -11,20 +15,18 @@ set PATH=%TOOLS%\gpp;%PATH% if not "%1"=="" (call :GenDoc %1 & goto :eof) -call :GenDoc ReadMe -call :GenDoc UserGuide -call :GenDoc SystemGuide -call :GenDoc Applications -call :GenDoc ROM_Applications -call :GenDoc Catalog -call :GenDoc Errata +call :GenDoc ReadMe || exit /b +call :GenDoc UserGuide || exit /b +call :GenDoc SystemGuide || exit /b +call :GenDoc Applications || exit /b +call :GenDoc Catalog || exit /b +call :GenDoc Errata || exit /b if exist ReadMe.gfm copy Readme.gfm ..\..\ReadMe.md || exit /b if exist ReadMe.txt copy ReadMe.txt ..\..\ReadMe.txt || exit /b if exist UserGuide.pdf copy UserGuide.pdf "..\..\Doc\RomWBW User Guide.pdf" || exit /b if exist SystemGuide.pdf copy SystemGuide.pdf "..\..\Doc\RomWBW System Guide.pdf" || exit /b if exist Applications.pdf copy Applications.pdf "..\..\Doc\RomWBW Applications.pdf" || exit /b -if exist ROM_Applications.pdf copy ROM_Applications.pdf "..\..\Doc\RomWBW ROM Applications.pdf" || exit /b if exist Catalog.pdf copy Catalog.pdf "..\..\Doc\RomWBW Disk Catalog.pdf" || exit /b if exist Errata.pdf copy Errata.pdf "..\..\Doc\RomWBW Errata.pdf" || exit /b @@ -37,9 +39,6 @@ echo. echo Processing document %1... -::gpp -o %1.tmp %1.md -::gpp -o %1.tmp -U "\\" "" "{" "}{" "}" "{" "}" "#" "" %1.md -::gpp -o %1.tmp -U "" "" "(" "," ")" "(" ")" "#" "" -M "#" "\n" " " " " "\n" "(" ")" %1.md gpp -o %1.tmp -U "$" "$" "{" "}{" "}$" "{" "}" "@@@" "" -M "$" "$" "{" "}{" "}$" "{" "}" %1.md || exit /b ::pandoc %1.tmp -f markdown -t latex -s -o %1.tex --default-image-extension=pdf || exit /b diff --git a/Source/Doc/Catalog.md b/Source/Doc/Catalog.md index 8250a8b8..47afb6a0 100644 --- a/Source/Doc/Catalog.md +++ b/Source/Doc/Catalog.md @@ -1,5 +1,5 @@ $define{doc_title}{Disk Catalog}$ -$define{doc_author}{Mykl Orders}$ +$define{doc_author}{Mark Pruden \& Mykl Orders}$ $define{doc_authmail}{}$ $include{"Book.h"}$ @@ -10,17 +10,20 @@ distributed with RomWBW. Specifically, RomWBW provides a set of floppy and hard disk images in the Binary directory of the distribution. The contents of these images is listed here. -**NOTE:** This document has become somewhat out-of-date. I apologize -for this. It is very difficult to maintain due to the volume of -disk content updates and the way that files are dynamically merged -into disk images during the build process. - The files on the disk images were sourced from a variety of locations. The primary sources of these files are listed below. Note that the primary documentation for each of these sources is listed. You are strongly encouraged to refer to this documentation for more information on using the applications and files listed. +This document primarily describes to contents of the hard disk images. +Floppy disk images may contain a cut down (sub-set) of the files on +a hard disk. This is of course to conserve disk space + +Note: This document received a major update in October 2024, when +while still not fully complete, most of the core operating system +disks should now be fully described. + ## Sources - **RomWBW**: RomWBW Custom Applications @@ -75,718 +78,1255 @@ on using the applications and files listed. `\clearpage`{=latex} -# CPM 2.2 Boot Disk +# Operating System Boot Disks + +RomWBW contains several ready-to-run disks, that have been +adapted for RomWBW. Theses disks are bootable as is +(the operating system image is already embedded in the system tracks) +and can be launched from the RomWBW Loader prompt. + +Each Disk contains the following file + +| **File** | **Description** | +|--------------------------|---------------------------------------------| +| `README.TXT` | Information about the Operating System | + +## CP/M 2.2 + +A vanilla distribution of DRI's CP/M-80 2.2 adapted for RomWBW. | Floppy Disk Image: **fd_cpm22.img** | Hard Disk Image: **hd_cpm22.img** | Combo Disk Image: **Slice 0** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ASM.COM` | CPM22 | DRI 8080 Assembler | -| `CR.COM` | -- | Crunch archiver | -| `DDT.COM` | CPM22 | DRI Dynamic Debugger | -| `DDTZ.DOC` | -- | Z80 replacement for DDT | -| `DIRX.COM` | -- | Directory lister with file sizes | -| `DUMP.COM` | CPM22 | DRI type contents of disk file in hex | -| `ED.COM` | CPM22 | DRI context editor | -| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application | -| `LBREXT.COM` | -- | Extract library files | -| `LIB.COM` | -- | DRI Library manager | -| `LINK.COM` | -- | DRI CPM relocatable linker | -| `LOAD.COM` | -- | DRI hex file loader into memory | -| `MAC.COM` | -- | DRI CPM macro assembler | -| `MBASIC.COM` | -- | Microsoft Basic | -| `PIP.COM` | CPM22 | DRI Periperal Interchange Program | -| `PMARC.COM` | -- | LHA file compressor | -| `PMEXT.COM` | -- | Extractor for PMARC archives | -| `RMAC.COM` | -- | DRI Relocatable Macro Assembler | -| `STAT.COM` | CPM22 | DRI statistices about file storage and device assignment | -| `SUBMIT.COM` | CPM22 | DRI batch processor | -| `UNCR.COM` | -- | NZCOM Uncrunch decompression | -| `UNZIP.COM` | -- | Extractor for ZIP archives | -| `XSUB.COM` | CPM22 | DRI eXtended submit | -| `ZSID.COM` | -- | DRI Z80 symbolic instruction debugger | -| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper | -| `FAT.COM` | RomWBW | RomWBW FAT filesystem access | -| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility | -| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) | -| `INTTEST.COM` | RomWBW | RomWBW Interrupt test | -| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics | -| `RTC.COM` | RomWBW | RomWBW Display and set RTC | -| `SURVEY.COM` | RomWBW | System survey | -| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image | -| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive | -| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port | -| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter | -| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files | -| `XM.COM` | RomWBW | RomWBW XMODEM file transfer | -| `CPM.SYS` | RomWBW | CPM2.2 system image | -| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner | -| `COMPARE.COM` | -- | FoxHollow compare two files | -| `DDTZ.COM` | -- | Z80 replacement for DDT | -| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem | -| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer | -| `NULU.COM` | -- | NZCOM new library utility | -| `UNARC.COM` | -- | Extractor for ARC archives | -| `ZAP.COM` | -- | Disk editor/patcher | -| `ZDE.COM` | -- | Z-system display editor | -| `ZDENST.COM` | -- | ZDE Installer | - -| **User 1** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `SAMPKEY.DOC` | -- | ZDE Distribution File | -| `SAMPKEY.ZDK` | -- | ZDE Distribution File | -| `SAMPKEY.ZDT` | -- | ZDE Distribution File | -| `ZDE10.DOC` | -- | ZDE Distribution File | -| `ZDE10.FOR` | -- | ZDE Distribution File | -| `ZDE10.NEW` | -- | ZDE Distribution File | -| `ZDE10.QRF` | -- | ZDE Distribution File | -| `ZDE10.TOC` | -- | ZDE Distribution File | -| `ZDE13.FOR` | -- | ZDE Distribution File | -| `ZDE13.NEW` | -- | ZDE Distribution File | -| `ZDE16.COM` | -- | ZDE Distribution File | -| `ZDE16.DIR` | -- | ZDE Distribution File | -| `ZDE16.FIX` | -- | ZDE Distribution File | -| `ZDE16.FOR` | -- | ZDE Distribution File | -| `ZDE16.NEW` | -- | ZDE Distribution File | -| `ZDE16A.COM` | -- | ZDE Distribution File | -| `ZDE16A.PAT` | -- | ZDE Distribution File | -| `ZDENST16.COM` | -- | ZDE Distribution File | -| `ZDEPROP.DOC` | -- | ZDE Distribution File | -| `ZDEPROP.Z80` | -- | ZDE Distribution File | -| `ZDKCOM13.COM` | -- | ZDE Distribution File | -| `ZDKCOM13.DOC` | -- | ZDE Distribution File | - -| **User 3** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ATTACK.PT3` | -- | Sound File | -| `BACKUP.PT3` | -- | Sound File | -| `BADMICE.PT3` | -- | Sound File | -| `DEMO.MYM` | -- | Sound File | -| `DEMO1.MYM` | -- | Sound File | -| `DEMO3.MYM` | -- | Sound File | -| `DEMO3MIX.MYM` | -- | Sound File | -| `DEMO4.MYM` | -- | Sound File | -| `HOWRU.PT3` | -- | Sound File | -| `ITERATN.PT3` | -- | Sound File | -| `LOOKBACK.PT3` | -- | Sound File | -| `LOUBOUTN.PT3` | -- | Sound File | -| `NAMIDA.PT3` | -- | Sound File | -| `RECOLL.PT3` | -- | Sound File | -| `SANXION.PT3` | -- | Sound File | -| `SYNCH.PT3` | -- | Sound File | -| `TOSTAR.PT3` | -- | Sound File | -| `VICTORY.PT3` | -- | Sound File | -| `WICKED.PT3` | -- | Sound File | -| `YEOLDE.PT3` | -- | Sound File | -| `YEOVIL.PT3` | -- | Sound File | +### CP/M 2.2 OS Files + +These are built and provide the OS. CP/M 2.2 Typically has no boot files +stored on the disk. It entirely boots from the system track + +The following files appear in User Area 0 + +| **File** | **Source** | **Description** | +|-----------------|-----------------|------------------------------------| +| `CPM.SYS` | RomWBW | DRI CPM 2.2 Boot Image for SYSCOPY | + +### CP/M 2.2 Files + +The following CP/M 2.2 files were distributed by DRI with the operating +system or as supplemental add-on programs. They are documented in the +"CP/M Manual.pdf" document in the Doc/CPM directory of the Rom WBW +distribution. + +The following files appear in User Area 0 + +| **File** | **Description** | +|-----------------|------------------------------------------------------| +| `ASM.COM` | DRI 8080 assembler | +| `DDT.COM` | 8080 dynamic debugger | +| `DUMP.COM` | DRI type contents of file in hex | +| `ED.COM` | DRI line editor | +| `HELP.COM` | CP/M 3 derived HELP display | +| `HELP.HLP` | CP/M 3 derived HELP data file | +| `LIB.COM` | DRI object file library manager | +| `LINK.COM` | DRI object file linker | +| `LOAD.COM` | DRI loader for Intel hex files | +| `MAC.COM` | DRI 8080 macro assembler | +| `PIP.COM` | DRI periperal interchange program | +| `RMAC.COM` | DRI 8080 relocating macro assembler | +| `STAT.COM` | DRI file/disk/device info & config | +| `SUBMIT.COM` | DRI batch file submission tool | +| `XREF.COM` | DRI assembler cross reference listing utility | +| `XSUB.COM` | DRI batch file resident extension | +| `ZSID.COM` | DRI Z80 symbolic debugger | + +**NOTE:** The above files are also included in the NZCOM disk image. + +MAC, RMAC, XREF, and ZSID are supplemental programs from DRI +with separate standalone documentation which is not included in the +RomWBW package (but easily found on the Internet via Google search). + +### Additional Files + +| **File** | **Documentation** | **User Area** | +|----------|------------------------------------|---------------| +| | [OS General Files] | 0 | +| | [General Purpose Applications] | 0 | +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [CP/NET 1.2] | 4 | +| | [SIMH Simulator] | 13 | `\clearpage`{=latex} -# ZSDOS 1.1 Boot Disk +## ZSDOS 1.1 + +It contains a customized version of ZSDOS 1.1 for RomWBW. +The disk is bootable as is (the operating system image is already +embedded in the system tracks) and can be launched from the RomWBW +Loader prompt. + +The starting point for the disk content was the final public release of +ZSDOS which is generally available on the Internet. | Floppy Disk Image: **fd_zsdos.img** | Hard Disk Image: **hd_zsdos.img** | Combo Disk Image: **Slice 1** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ASM.COM` | CPM22 | DRI 8080 Assembler | -| `CLOCKS.DAT` | ZSDOS | ZSDOS Library of clock drivers | -| `COPY.CFG` | ZSDOS | ZSDOS Configuration file for COPY.COM | -| `COPY.COM` | ZSDOS | ZSDOS File copier with file dates and archiving | -| `COPY.UPD` | ZSDOS | ZSDOS ??? | -| `CR.COM` | -- | Crunch archiver | -| `DATSWEEP.COM` | ZSDOS | ZSDOS Comprehensive file management utility | -| `DDT.COM` | CPM22 | DRI Dynamic Debugger | -| `DDTZ.DOC` | -- | Z80 replacement for DDT | -| `DIRX.COM` | -- | Directory lister with file sizes | -| `DSCONFIG.COM` | ZSDOS | ZSDOS DATSWEEP configuration tool | -| `DUMP.COM` | CPM22 | DRI type contents of disk file in hex | -| `ED.COM` | CPM22 | DRI context editor | -| `FA16.CFG` | ZSDOS | ZSDOS FILEATTR.COM v1.6 configuration file | -| `FA16.DOC` | ZSDOS | ZSDOS FILEATTR.COM v1.6 documentation | -| `FA16A.FOR` | ZSDOS | ZSDOS FILEATTR.COM v1.6a information | -| `FA16CFG.TXT` | ZSDOS | ZSDOS FILEATTR.COM v1.6 configuration instructions | -| `FILEATTR.COM` | ZSDOS | ZSDOS Modify file attributes | -| `FILEDATE.CFG` | ZSDOS | ZSDOS Configuration file for FILEDATE.COM | -| `FILEDATE.COM` | ZSDOS | ZSDOS Disk directory that allows sorting and selecting by date and name | -| `FILEDATE.COM` | ZSDOS | ZSDOS Disk directory that allows sorting and selecting by date and name | -| `INITDIR.CFG` | ZSDOS | ZSDOS Configuration file for INITDIR.COM | -| `INITDIR.COM` | ZSDOS | ZSDOS Prepare disks for P2DOS Stamps | -| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application | -| `LBREXT.COM` | -- | Extract library files | -| `LDDS.COM` | ZSDOS | Clock driver | -| `LDNZT.COM` | ZSDOS | Clock driver | -| `LDP2D.COM` | ZSDOS | Clock driver | -| `LIB.COM` | -- | DRI Library manager | -| `LINK.COM` | -- | DRI CPM relocatable linker | -| `LOAD.COM` | -- | DRI hex file loader into memory | -| `MAC.COM` | -- | DRI CPM macro assembler | -| `MBASIC.COM` | -- | Microsoft Basic | -| `PIP.COM` | CPM22 | DRI Periperal Interchange Program | -| `PMARC.COM` | -- | LHA file compressor | -| `PMEXT.COM` | -- | Extractor for PMARC archives | -| `PUTBG.COM` | ZSDOS | ZSDOS Prepare disk for backgrounder | -| `PUTDS.COM` | ZSDOS | ZSDOS Prepare disk for datestamper | -| `RELOG.COM` | ZSDOS | ZSDOS relog disks after program that bypasses BDOS | -| `RMAC.COM` | -- | DRI Relocatable Macro Assembler | -| `SETTERM.COM` | ZSDOS | ZSDOS Installs terminal control codes into DateSamper utilities | -| `SETUPZST.COM` | ZSDOS | ZSDOS Select clock driver | -| `STAMPS.DAT` | ZSDOS | ZSDOS Library of stamping routines | -| `STAT.COM` | CPM22 | DRI statistices about file storage and device assignment | -| `SUBMIT.COM` | CPM22 | DRI batch processor | -| `SUPERSUB.COM` | ZSDOS | | -| `TD.CFG` | ZSDOS | ZSDOS Configuration file for TD.COM | -| `TD.COM` | ZSDOS | ZSDOS Time/Date utility | -| `TERMBASE.DAT` | ZSDOS | ZSDOS Terminal information library for SETTERM | -| `TESTCLOK.COM` | ZSDOS | ZSDOS Test various clock drivers | -| `UNCR.COM` | -- | NZCOM Uncrunch decompression | -| `UNZIP.COM` | -- | Extractor for ZIP archives | -| `XSUB.COM` | CPM22 | DRI eXtended submit | -| `ZCAL.COM` | ZSDOS | ZSDOS Show month calendar | -| `ZCNFG.COM` | ZSDOS | ZSDOS Configure various utilities | -| `ZCNFG24.CFG` | ZSDOS | ZSDOS Configuration file for ZCNFG.COM | -| `ZPATH.COM` | ZSDOS | ZSDOS Set BDOS and/or ZCPR command path | -| `ZSCONFIG.COM` | ZSDOS | ZSDOS Dynamically regulate many of ZSDOS features | -| `ZSID.COM` | -- | DRI Z80 symbolic instruction debugger | -| `ZSVSTAMP.COM` | ZSDOS | ZSDOS Save/restore file timestamp | -| `ZSVSTAMP.DOC` | ZSDOS | ZSDOS ZSVSTAMP.COM documentation | -| `ZXD.CFG` | ZSDOS | ZSDOS Configuration file for ZXD.COM | -| `ZXD.COM` | ZSDOS | ZSDOS Extended directory utility | -| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper | -| `FAT.COM` | RomWBW | RomWBW FAT filesystem access | -| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility | -| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) | -| `INTTEST.COM` | RomWBW | RomWBW Interrupt test | -| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics | -| `RTC.COM` | RomWBW | RomWBW Display and set RTC | -| `SURVEY.COM` | RomWBW | System survey | -| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image | -| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive | -| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port | -| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter | -| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files | -| `XM.COM` | RomWBW | RomWBW XMODEM file transfer | -| `ZSYS.SYS` | RomWBW | ZSDOS system image | -| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner | -| `COMPARE.COM` | -- | FoxHollow compare two files | -| `DDTZ.COM` | -- | Z80 replacement for DDT | -| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem | -| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer | -| `NULU.COM` | -- | NZCOM new library utility | -| `UNARC.COM` | -- | Extractor for ARC archives | -| `ZAP.COM` | -- | Disk editor/patcher | -| `ZDE.COM` | -- | Z-system display editor | -| `ZDENST.COM` | -- | ZDE Installer | - -| **User 1** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `SAMPKEY.DOC` | -- | ZDE Distribution File | -| `SAMPKEY.ZDK` | -- | ZDE Distribution File | -| `SAMPKEY.ZDT` | -- | ZDE Distribution File | -| `ZDE10.DOC` | -- | ZDE Distribution File | -| `ZDE10.FOR` | -- | ZDE Distribution File | -| `ZDE10.NEW` | -- | ZDE Distribution File | -| `ZDE10.QRF` | -- | ZDE Distribution File | -| `ZDE10.TOC` | -- | ZDE Distribution File | -| `ZDE13.FOR` | -- | ZDE Distribution File | -| `ZDE13.NEW` | -- | ZDE Distribution File | -| `ZDE16.COM` | -- | ZDE Distribution File | -| `ZDE16.DIR` | -- | ZDE Distribution File | -| `ZDE16.FIX` | -- | ZDE Distribution File | -| `ZDE16.FOR` | -- | ZDE Distribution File | -| `ZDE16.NEW` | -- | ZDE Distribution File | -| `ZDE16A.COM` | -- | ZDE Distribution File | -| `ZDE16A.PAT` | -- | ZDE Distribution File | -| `ZDENST16.COM` | -- | ZDE Distribution File | -| `ZDEPROP.DOC` | -- | ZDE Distribution File | -| `ZDEPROP.Z80` | -- | ZDE Distribution File | -| `ZDKCOM13.COM` | -- | ZDE Distribution File | -| `ZDKCOM13.DOC` | -- | ZDE Distribution File | - -| **User 3** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ATTACK.PT3` | -- | Sound File | -| `BACKUP.PT3` | -- | Sound File | -| `BADMICE.PT3` | -- | Sound File | -| `DEMO.MYM` | -- | Sound File | -| `DEMO1.MYM` | -- | Sound File | -| `DEMO3.MYM` | -- | Sound File | -| `DEMO3MIX.MYM` | -- | Sound File | -| `DEMO4.MYM` | -- | Sound File | -| `HOWRU.PT3` | -- | Sound File | -| `ITERATN.PT3` | -- | Sound File | -| `LOOKBACK.PT3` | -- | Sound File | -| `LOUBOUTN.PT3` | -- | Sound File | -| `NAMIDA.PT3` | -- | Sound File | -| `RECOLL.PT3` | -- | Sound File | -| `SANXION.PT3` | -- | Sound File | -| `SYNCH.PT3` | -- | Sound File | -| `TOSTAR.PT3` | -- | Sound File | -| `VICTORY.PT3` | -- | Sound File | -| `WICKED.PT3` | -- | Sound File | -| `YEOLDE.PT3` | -- | Sound File | -| `YEOVIL.PT3` | -- | Sound File | +### ZSDOS 1.1 OS Files + +These are built and provide the OS. ZSDOS Typically has no boot files +stored on the disk. It entirely boots from the system track + +The following files appear in User Area 0 + +| **File** | **Source** | **Description** | +|-------------------|----------------------|------------------------------| +| `ZSYS.SYS` | RomWBW | ZSDOS Boot Image for SYSCOPY | + +### ZSDOS 1.1 Files + +The following files came from the official ZSDOS distribution. These +are generally documented in the "ZSDOS Manual.pdf" document in the Doc/CPM +directory of the RomWBW distribution. + +Note: Some of the files included in the ZSDOS distribution are not listed +below because they have been superseded by more recent versions listed in +other sections below. + +The following files appear in User Area 0 + +| **File** | **Description** | +|----------------|--------------------------------------------------------| +| `BGPATCH.HEX` | Patches BackGrounder II for ZSDOS 1.1 compatibility | +| `CLOCKS.DAT` | Library of clock drivers | +| `COPY.UPD` | Document describing updates to COPY program | +| `DATSWEEP.COM` | Comprehensive file management w/ date stamp awareness | +| `DSCONFIG.COM` | Program to configure DATSWEEP | +| `FA16.CFG` | ZCNFG configuration file for FILEATTR.COM | +| `FA16.DOC` | Documentation for FILEATTR.COM | +| `FA16A.FOR` | Summary Information for FILEATTR.COM | +| `FA16CFG.TXT` | describes configuration options for FILEATTR.COM | +| `FILEATTR.COM` | Set and/or display file attributes | +| `FILEDATE.COM` | Date/time stamping aware disk directory utility | +| `FILEDATE.CFG` | ZCNFG configuration fie for FILEDATE | +| `INITDIR.COM` | Prepare disk for P2DOS date/time stamping | +| `INITDIR.CFG` | ZCNFG configuration file for INITDIR | +| `LDDS.COM` | Load DateStamper date/time stamping resident extension | +| `LDNZT.COM` | Load NZT date/time stamping resident extension | +| `LDP2D.COM` | Load P2DOS date/time stamping resident extension | +| `PUTBG.COM` | Updated replacement for BackGrounder II PUTBG program | +| `PUTDS.COM` | Prepare disk for datestamper date/time stamping | +| `RELOG.COM` | Clear fixed disk login vector in ZSDOS | +| `SETTERM.COM` | Terminal configuration utility for DATSWEEP & DSCONFIG | +| `SETUPZST.COM` | Creates date/time stamping resident extensions | +| `STAMPS.DAT` | Library of date/time stamping modules for SETUPZST | +| `TD.COM` | Read and set system real-time clock | +| `TD.CFG` | ZCNFG Configuration file for TD.COM | +| `TERMBASE.DAT` | Library of terminals used by SETTERM | +| `TESTCLOK.COM` | Test a selected clock driver | +| `ZCAL.COM` | Display a small one-month calendar to the screen | +| `ZPATH.COM` | Set or display ZSDOS and ZCPR search paths | +| `ZSCONFIG.COM` | Configure features of ZSDOS operating systems | +| `ZSVSTAMP.COM` | Preserves file date/time stamp across modifications | +| `ZSVSTAMP.DOC` | Document describes the use and operation of ZSVSTAMP | + +**NOTE:** The above files are also included in the NZ-COM disk image distribution + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|------------------------------------|---------------| +| | [CP/M 2.2 Files] | 0 | +| | [OS General Files] | 0 | +| | [General Purpose Applications] | 0 | +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [SIMH Simulator] | 13 | `\clearpage`{=latex} -# NZCOM Boot Disk +## NZCOM + +This disk contains NZ-COM, which is an implementation of the +Z-System. You may also see NZ-COM referred to as ZCPR 3.4. This is +a powerful replacement for CP/M 2.2 w/ full backward compatibility. +NZ-COM is extremely configurable and far more powerful than +DRI CP/M. It is almost mandatory that you read the NZ-COM manual to +use the system effectively. | Floppy Disk Image: **fd_nzcom.img** | Hard Disk Image: **hd_nzcom.img** | Combo Disk Image: **Slice 2** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `!(C)1988` | NZCOM | | -| `!NZ-COM` | NZCOM | | -| `!VERS--1.2H` | NZCOM | | -| `ALIAS.CMD` | NZCOM | NZCOM Aliases file for ARUNZ.COM | -| `ARUNZ.COM` | NZCOM | NZCOM Invoke an alias in ALIAS.CMD | -| `BGZRDS19.LBR` | NZCOM | | -| `CLEDINST.COM` | NZCOM | Command line editing and history shell installer | -| `CLEDSAVE.COM` | NZCOM | Write command line history to disk | -| `CONFIG.LBR` | NZCOM | | -| `COPY.COM` | NZCOM | ZSDOS File copier with file dates and archiving | -| `CPSET.COM` | NZCOM | NZCOM Create multiple definitions for CRT and PRT | -| `CRUNCH.COM` | NZCOM | NZCOM Text compression | -| `DOCFILES.LBR` | NZCOM | | -| `EDITNDR.COM` | NZCOM | NZCOM Associate names with directories | -| `FCP.LBR` | NZCOM | NZCOM ??? Flow control | -| `FF.COM` | NZCOM | NZCOM File finder | -| `HELP.COM` | NZCOM | DRI CPM+ | -| `HLPFILES.LBR` | NZCOM | | -| `IF.COM` | NZCOM | NZCOM Flow condition tester for FCP | -| `JETLDR.COM` | NZCOM | NZCOM General-purpose module loader | -| `KERMIT.COM` | -- | Generic CP/M 2.2 Kermit communication application | -| `LBREXT.COM` | NZCOM | Extract library files | -| `LBRHELP.COM` | NZCOM | | -| `LDIR.COM` | NZCOM | NZCOM Display the directory of a library | -| `LPUT.COM` | NZCOM | NZCOM Put files into a library | -| `LSH-HELP.COM` | NZCOM | | -| `LSH.COM` | NZCOM | | -| `LSH.WZ` | NZCOM | | -| `LSHINST.COM` | NZCOM | | -| `LX.COM` | NZCOM | NZCOM Extract and execute a memeber of a library | -| `MKZCM.COM` | NZCOM | NZCOM NZCOM system defining utility | -| `NAME.COM` | NZCOM | NZCOM Name a drive/user | -| `NZ-DBASE.INF` | NZCOM | NZCOM Dbase information | -| `NZBLITZ.COM` | NZCOM | | -| `NZBLTZ14.CFG` | NZCOM | | -| `NZBLTZ14.HZP` | NZCOM | | -| `NZCOM.COM` | NZCOM | NZCOM system loader from CP/M | -| `NZCOM.LBR` | NZCOM | NZCOM Library of NZCOM system modules | -| `NZCPR.LBR` | NZCOM | NZCOM Default command processor | -| `PATH.COM` | NZCOM | NZCOM Set/display command search path | -| `PUBLIC.COM` | NZCOM | | -| `PWD.COM` | NZCOM | | -| `RCP.LBR` | NZCOM | NZCOM Resident command package | -| `RELEASE.NOT` | NZCOM | | -| `SAINST.COM` | NZCOM | | -| `SALIAS.COM` | NZCOM | NZCOM Screen alias | -| `SAVENDR.COM` | NZCOM | NZCOM Save named directory assignments to a file | -| `SDZ.COM` | NZCOM | NZCOM Super directory | -| `SHOW.COM` | NZCOM | NZCOM Show resident commands | -| `SUB.COM` | NZCOM | | -| `SUBMIT.COM` | -- | DRI batch processor | -| `TCAP.LBR` | NZCOM | NZCOM Terminal capability descriptor library | -| `TCJ.INF` | NZCOM | | -| `TCJ25.WZ` | NZCOM | | -| `TCJ26.WZ` | NZCOM | | -| `TCJ27.WZ` | NZCOM | | -| `TCJ28.WZ` | NZCOM | | -| `TCJ29.WZ` | NZCOM | | -| `TCJ30.WZ` | NZCOM | | -| `TCJ31UPD.WZ` | NZCOM | | -| `TCJ32.WZ` | NZCOM | | -| `TCJ33UPD.WZ` | NZCOM | | -| `TCSELECT.COM` | NZCOM | NZCOM Create terminal capability file | -| `TY3ERA.COM` | NZCOM | NZCOM Type-3 transient program to erase a file | -| `TY3REN.COM` | NZCOM | NZCOM Type-3 transient program to rename a file | -| `TY4ERA.COM` | NZCOM | NZCOM Type-4 transient program to erase a file | -| `TY4REN.COM` | NZCOM | NZCOM Type-4 transient program to rename a file | -| `TY4SAVE.COM` | NZCOM | NZCOM Type-4 transient program to save memory to a file | -| `TY4SP.COM` | NZCOM | NZCOM Type-4 transient program ti display disk space | -| `UNCRUNCH.COM` | NZCOM | NZCOM Text decompressor | -| `VIEW.COM` | NZCOM | | -| `XTCAP.COM` | NZCOM | | -| `Z3LOC.COM` | NZCOM | NZCOM Display the addresses of the ZCPR3 CCP, BDOS, and BIOS | -| `Z3TCAP.TCP` | NZCOM | NZCOM Database of terminal descriptors | -| `ZCNFG.COM` | NZCOM | ZSDOS Configure various utilities | -| `ZERR.COM` | NZCOM | | -| `ZEX.COM` | NZCOM | NZCOM Memory-based batch processor | -| `ZF-DIM.COM` | NZCOM | NZCOM ZFILER shell for dim-video terminals | -| `ZF-REV.COM` | NZCOM | NZCOM ZFILER shell for reverse-video terminals | -| `ZFILEB38.LZT` | NZCOM | | -| `ZFILER.CMD` | NZCOM | NZCOM Macro script file for ZFILER | -| `ZHELPERS.LZT` | NZCOM | | -| `ZLT.COM` | NZCOM | | -| `ZNODES66.LZT` | NZCOM | | -| `ZSDOS.ZRL` | NZCOM | | -| `ZSYSTEM.IZF` | NZCOM | | -| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper | -| `FAT.COM` | RomWBW | RomWBW FAT filesystem access | -| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility | -| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) | -| `INTTEST.COM` | RomWBW | RomWBW Interrupt test | -| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics | -| `RTC.COM` | RomWBW | RomWBW Display and set RTC | -| `SURVEY.COM` | RomWBW | System survey | -| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image | -| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive | -| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port | -| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter | -| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files | -| `XM.COM` | RomWBW | RomWBW XMODEM file transfer | -| `CPM.SYS` | RomWBW | | -| `ZSYS.SYS` | RomWBW | | -| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner | -| `COMPARE.COM` | -- | FoxHollow compare two files | -| `DDTZ.COM` | -- | Z80 replacement for DDT | -| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem | -| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer | -| `NULU.COM` | -- | NZCOM new library utility | -| `UNARC.COM` | -- | Extractor for ARC archives | -| `ZAP.COM` | -- | Disk editor/patcher | -| `ZDE.COM` | -- | Z-system display editor | -| `ZDENST.COM` | -- | ZDE Installer | - -| **User 3** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ATTACK.PT3` | -- | Sound File | -| `BACKUP.PT3` | -- | Sound File | -| `BADMICE.PT3` | -- | Sound File | -| `DEMO.MYM` | -- | Sound File | -| `DEMO1.MYM` | -- | Sound File | -| `DEMO3.MYM` | -- | Sound File | -| `DEMO3MIX.MYM` | -- | Sound File | -| `DEMO4.MYM` | -- | Sound File | -| `HOWRU.PT3` | -- | Sound File | -| `ITERATN.PT3` | -- | Sound File | -| `LOOKBACK.PT3` | -- | Sound File | -| `LOUBOUTN.PT3` | -- | Sound File | -| `NAMIDA.PT3` | -- | Sound File | -| `RECOLL.PT3` | -- | Sound File | -| `SANXION.PT3` | -- | Sound File | -| `SYNCH.PT3` | -- | Sound File | -| `TOSTAR.PT3` | -- | Sound File | -| `VICTORY.PT3` | -- | Sound File | -| `WICKED.PT3` | -- | Sound File | -| `YEOLDE.PT3` | -- | Sound File | -| `YEOVIL.PT3` | -- | Sound File | +### NZ-COM OS Files + +NZ-COM is not designed to load directly from the boot tracks of a +disk. Instead, it expects to be loaded from an already running OS. + +This disk has been configured to boot using ZSDOS with a PROFILE.SUB +command file that automatically loads NZ-COM. So, NZ-COM will load completely +without any intervention, but you may notice that ZSDOS loads first, +then ZSDOS loads NZ-COM. + +The following files appear in User Area 0 + +| **File** | **Source** | **Description** | +|----------------|------------|----------------------------------------------------| +| `!(C)1988` | NZCOM | Original copyright (since placed in public domain) | +| `!NZ-COM` | NZCOM | Software marker directory entry (empty file) | +| `!VERS--1.2H` | NZCOM | Version marker directory entry (empty file) | +| `NZCOM.COM` | NZCOM | Loads and launches NZ-COM system | +| `NZCOM.ENV` | RomWBW | Z-System environment descriptor | +| `NZCOM.LBR` | NZCOM | Library of NZCOM system modules | +| `NZCOM.ZCM` | RomWBW | Environment descriptor (alternate format) | +| `NZCPR.LBR` | NZCOM | Library of alternative ZCPR modules | +| `PROFILE.SUB` | RomWBW | Command file to auto-start NZ-COM at system boot | +| `RCP.LBR` | NZCOM | Library of alternative RCP modules | +| `STARTZCM.COM` | RomWBW | Commands to execute after NZ-COM is launched | +| `ZRDOS.ZRL` | ZRDOS | Relocatable version of ZRDOS BDOS module | +| `ZSDOS.ZRL` | ZSDOS | Relocatable version of ZSDOS 1.1 BDOS module | +| `ZSYS.SYS` | RomWBW | ZSDOS Boot Image for SYSCOPY | + +### NZ-COM Files + +The following files came from the official NZ-COM distribution. These +are generally documented in the "NZCOM Users Manual.pdf" document in +the Doc/CPM directory of the RomWBW distribution. + +NOTE: It may appear theat there are not many files, this is because most of the OS +files are shared with Z3PLUS. See here for a list [NZ-COM Z3PLUS OS Files] + +The following file are in User Area 15, and where noted +10 for help files, or 14 for config files. + +| **File** | **Description** | +|----------------|----------------------------------------------------------| +| `ALIAS.CMD` | Sample alias definitions for use with ARUNZ | +| `BGZRDS19.LBR` | Patch for Backgrounder II (U10) | +| `CMDRUN.COM` | Extended Command Processor (copied from ARUNZ) | +| `MKZCM.COM` | Create/update NZ-COM load environment | +| `NZBLITZ.COM` | Rapid coldboot of complete NZ-COM system image | +| `NZBLTZ14.CFG` | ZCNFG configuration file for NZBLITZ. (U14) | +| `NZBLTZ14.HZP` | Help file for NZBLITZ (U10) | +| `NZ-DBASE.INF` | dBase II application note regarding SUBMIT files (U10) | +| `PUBLIC.COM` | Specify ZRDOS public directories/user areas | +| `RELEASE.NOT` | Update information on NZ-COM (U10) | +| `SUB.COM` | Enhanced version of SUBMIT | + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|--------------------------------|---------------| +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [CP/NET 1.2] | 4 | +| | [SIMH Simulator] | 13 | +| | [CP/M 2.2 Files] | 15 | +| | [ZSDOS 1.1 Files] | 15, 14, 10 | +| | [NZ-COM Z3PLUS OS Files] | 15, 14, 10 | +| | [OS General Files] | 15, 14, 10 | +| | [General Purpose Applications] | 15, 10 | `\clearpage`{=latex} -# CP/M 3 Boot Disk +## CP/M 3 + +A vanilla distribution of DRI's CP/M 3, also known as CP/M Plus adapted for RomWBW. | Floppy Disk Image: **fd_cpm3.img** | Hard Disk Image: **hd_cpm3.img** | Combo Disk Image: **Slice 3** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `DATE.COM` | CPM3 | DRI CPM+ Set or display the date and time | -| `DEVICE.COM` | CPM3 | DRI CPM+ Assign logical devices with one or more physical devices | -| `DIR.COM` | CPM3 | DRI CPM+ DIR with options | -| `DUMP.COM` | CPM3 | DRI type contents of disk file in hex | -| `ED.COM` | CPM3 | DRI context editor | -| `ERASE.COM` | CPM3 | DRI file deletion | -| `GENCOM.COM` | CPM3 | DRI CPM+ Generate special COM file with attached RSX files | -| `GET.COM` | CPM3 | DRI CPM+ Temporarily get console input form a disk file | -| `HELP.COM` | CPM3 | DRI CPM+ Display information on how to use commands | -| `HELP.HLP` | CPM3 | DRI CPM+ Databse of help information for HELP.COM | -| `HEXCOM.CPM` | CPM3 | DRI CPM+ Create a COM file from a nex file output by MAC | -| `INITDIR.COM` | CPM3 | DRI CPM+ Initializes a disk to allow time and date stamping | -| `KERMIT.COM` | -- | Generic CP/M 3 Kermit communication application | -| `PATCH.COM` | CPM3 | DRI CPM+ Display or install patch to the CPM+ system or command files | -| `PIP.COM` | CPM3 | DRI Periperal Interchange Program | -| `PUT.COM` | CPM3 | DIR CPM+ Temporarily redirect printer or console output to a disk file | -| `RENAME.COM` | CPM3 | DRI CPM+ Rename a file | -| `ROMWBW.TXT` | RomWBW | | -| `SAVE.COM` | CPM3 | DRI CPM+ Copy the contents of memory to a file | -| `SET.COM` | CPM3 | DIR CPM+ Set file options | -| `SETDEF.COM` | CPM3 | DIR CPM+ Set system options including the drive search chain | -| `SHOW.COM` | CPM3 | DIR CPM+ Display disk and drive statistics | -| `SUBMIT.COM` | CPM3 | DRI batch processor | -| `TYPE.COM` | CPM3 | DIR CPM+ Display the contents of an ASCII character file | -| `ZSID.COM` | CPM3 | DRI Z80 symbolic instruction debugger | -| `CPMLDR.COM` | RomWBW | DRI CPM 3.0 loader | -| `CPMLDR.SYS` | RomWBW | DRI CPM 3.0 loader | -| `CCP.COM` | CPM3 | DRI CPM+ Console Command Processor | -| `GENCPM.COM` | CPM3 | DRI CPM+ Create a memory image of CPM3.SYS | -| `GENRES.DAT` | RomWBW | | -| `GENBNK.DAT` | RomWBW | | -| `BIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for non-banked BIOS | -| `BNKBIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for banked BIOS | +### CP/M 3 OS Files + +The following files appear in User Area 0 + +| **File** | **Source** | **Description** | +|----------------|------------|----------------------------------------------------| | `BDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for the non-banked BDOS | -| `BNKBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for banked BDOS | -| `RESBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for resident BDOS | -| `CPM3RES.SYS` | RomWBW | DRI CPM+ (non-banked) memory image | -| `CPM3BNK.SYS` | RomWBW | DRI CPM+ (banked) memory image | -| `GENCPM.DAT` | RomWBW | DRI CPM+ System generation tool data file | -| `CPM3.SYS` | RomWBW | DRI CPM+ (non-banked) memory image | -| `README.1ST` | CPM3 | | -| `CPM3FIX.PAT` | CPM3 | | -| `ASSIGN.COM` | RomWBW | RomWBW Drive/Slice mapper | -| `FAT.COM` | RomWBW | RomWBW FAT filesystem access | -| `FDU.COM` | RomWBW | RomWBW Floppy Disk Utility | -| `FORMAT.COM` | RomWBW | RomWBW media formatter (placeholder) | -| `INTTEST.COM` | RomWBW | RomWBW Interrupt test | -| `MODE.COM` | RomWBW | RomWBW Modify serial port characteristics | -| `RTC.COM` | RomWBW | RomWBW Display and set RTC | -| `SURVEY.COM` | RomWBW | System survey | -| `SYSCOPY.COM` | RomWBW | RomWBW Read/write system boot image | -| `SYSGEN.COM` | RomWBW | DRI CPM SYSGEN to put CPM onto a new drive | -| `TALK.COM` | RomWBW | RomWBW Direct console I/O to a serial port | -| `TIMER.COM` | RomWBW | RomWBW Display timer tick counter | -| `TUNE.COM` | RomWBW | RomWBW Play PT or MYM sound files | -| `XM.COM` | RomWBW | RomWBW XMODEM file transfer | -| `CLRDIR.COM` | -- | Max Scane's disk directory cleaner | -| `COMPARE.COM` | -- | FoxHollow compare two files | -| `DDTZ.COM` | -- | Z80 replacement for DDT | -| `FDISK80.COM` | -- | John Coffman's Partition editor for FAT filesystem | -| `FLASH.COM` | -- | Will Sowerbutts' in-situ EEPROM programmer | -| `NULU.COM` | -- | NZCOM new library utility | -| `UNARC.COM` | -- | Extractor for ARC archives | -| `ZAP.COM` | -- | Disk editor/patcher | -| `ZDE.COM` | -- | Z-system display editor | -| `ZDENST.COM` | -- | ZDE Installer | - -| **User 3** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ATTACK.PT3` | -- | Sound File | -| `BACKUP.PT3` | -- | Sound File | -| `BADMICE.PT3` | -- | Sound File | -| `DEMO.MYM` | -- | Sound File | -| `DEMO1.MYM` | -- | Sound File | -| `DEMO3.MYM` | -- | Sound File | -| `DEMO3MIX.MYM` | -- | Sound File | -| `DEMO4.MYM` | -- | Sound File | -| `HOWRU.PT3` | -- | Sound File | -| `ITERATN.PT3` | -- | Sound File | -| `LOOKBACK.PT3` | -- | Sound File | -| `LOUBOUTN.PT3` | -- | Sound File | -| `NAMIDA.PT3` | -- | Sound File | -| `RECOLL.PT3` | -- | Sound File | -| `SANXION.PT3` | -- | Sound File | -| `SYNCH.PT3` | -- | Sound File | -| `TOSTAR.PT3` | -- | Sound File | -| `VICTORY.PT3` | -- | Sound File | -| `WICKED.PT3` | -- | Sound File | -| `YEOLDE.PT3` | -- | Sound File | -| `YEOVIL.PT3` | -- | Sound File | +| `BIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for non-banked BIOS | +| `BNKBIOS3.SPR` | RomWBW | DRI CPM+ GENCPM input file for banked BIOS | +| `BNKBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for banked BDOS | +| `CCP.COM` | CPM3 | DRI CPM+ Console Command Processor | +| `CPM3.SYS` | RomWBW | DRI CPM+ (non-banked) memory image | +| `CPM3RES.SYS` | RomWBW | DRI CPM+ (non-banked) memory image | +| `CPM3BNK.SYS` | RomWBW | DRI CPM+ (banked) memory image | +| `CPM3FIX.PAT` | CPM3 | DRI CPM+ patch list | +| `CPMLDR.COM` | RomWBW | DRI CPM 3.0 Boot Loader Application | +| `CPMLDR.SYS` | RomWBW | DRI CPM 3.0 Boot Loader for SYSCOPY | +| `GENBNK.DAT` | RomWBW | GENCPM config data file (banked) | +| `GENRES.DAT` | RomWBW | GENCPM config data file (non-banked) | +| `GENCPM.DAT` | RomWBW | Current GENCPM config data file | +| `GENCPM.COM` | CPM3 | DRI CPM+ Create a memory image of CPM3.SYS | +| `RESBDOS3.SPR` | CPM3 | DRI CPM+ GENCPM input file for resident BDOS | + +### CP/M 3 Files + +The following CP/M 3 files were distributed by DRI with the operating +system or as supplemental add-on programs. They are documented in the +"CPM3 Command Summary.pdf" document in the Doc/CPM directory of the Rom WBW +distribution. + +The following files appear in User Area 0 + +| **File** | **Description** | +|---------------|------------------------------------------------------------------------| +| `DATE.COM` | DRI CPM+ Set or display the date and time | +| `DEVICE.COM` | DRI CPM+ Assign logical devices with one or more physical devices | +| `DIR.COM` | DRI CPM+ DIR with options | +| `DUMP.COM` | DRI type contents of disk file in hex | +| `ED.COM` | DRI CPM+ line editor | +| `ERASE.COM` | DRI CPM+ file deletion | +| `GENCOM.COM` | DRI CPM+ Generate special COM file with attached RSX files | +| `GET.COM` | DRI CPM+ Temporarily get console input form a disk file | +| `HELP.COM` | DRI CPM+ Display information on how to use commands | +| `HELP.HLP` | DRI CPM+ Databse of help information for HELP.COM | +| `HEXCOM.COM` | DRI CPM+ Create a COM file from a hex file output by MAC | +| `INITDIR.COM` | DRI CPM+ Initializes a disk to allow time and date stamping | +| `LIB.COM` | DRI object file library manager | +| `LINK.COM` | DRI object file linker | +| `LOAD.COM` | DRI loader for Intel hex files | +| `MAC.COM` | DRI 8080 macro assembler | +| `PATCH.COM` | DRI CPM+ Display or install patch to the CPM+ system or command files | +| `PIP.COM` | DRI CPM+ Periperal Interchange Program | +| `PUT.COM` | DIR CPM+ Temporarily redirect printer or console output to a disk file | +| `RENAME.COM` | DRI CPM+ Rename a file | +| `RMAC.COM` | DRI 8080 relocating macro assembler | +| `SAVE.COM` | DRI CPM+ Copy the contents of memory to a file | +| `SET.COM` | DIR CPM+ Set file options | +| `SETDEF.COM` | DIR CPM+ Set system options including the drive search chain | +| `SHOW.COM` | DIR CPM+ Display disk and drive statistics | +| `SUBMIT.COM` | DRI CPM+ batch processor | +| `TYPE.COM` | DRI CPM+ Display the contents of an ASCII character file | +| `XREF.COM` | DRI assembler cross reference listing utility | +| `ZSID.COM` | DRI Z80 symbolic instruction debugger | | + +**NOTE:** The above files are also included in the ZPM3 and Z3PLUS disk images. + +ZSID is a supplemental program from DRI +with separate standalone documentation which is not included in the +RomWBW package (but easily found on the Internet via Google search). + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|------------------------------------|---------------| +| | [OS General Files] | 0 | +| | [General Purpose Applications] | 0 | +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [CP/NET 1.2] | 4 | +| | [SIMH Simulator] | 13 | `\clearpage`{=latex} -# ZPM3 Boot Disk +## Z3PLUS + +### Z3PLUS OS Files + +Z3PLUS is not designed to load directly from the boot tracks of a +disk. Instead, it expects to be loaded from an already running OS. + +This disk has been configured to boot using CP/M 3 with a PROFILE.SUB +command file that automatically loads Z3PLUS. So, Z3PLUS will load completely +without any intervention, but you may notice that CP/M 3 loads first. + +The following Z3PLUS files appear in User Area 0 + +| **File** | **Source** | **Description** | +|----------------|-------------|----------------------------------------------------| +| `!(C)1988` | Z3PLUS | Original copyright (since placed in public domain) | +| `!VERS--1.02F` | Z3PLUS | Version marker directory entry (empty file) | +| `!Z3PLUS` | Z3PLUS | Software marker directory entry (empty file) | +| `NAMES.NDR` | RomWBW | Default Directory Names loaded at boot | +| `RCP.LBR` | Z3PLUS | Library of alternative RCP modules | +| `PROFILE.SUB` | RomWBW | Command file to auto-start Z3PLUS at system boot | +| `STARTZ3P.COM` | RomWBW | Commands to execute after Z3PLUS is launched | +| `Z3PLUS.COM` | Z3PLUS | Loads and launches Z3PLUS system | +| `Z3PLUS.LBR` | Z3PLUS | Library of Z3PLUS system modules | + +### Z3PLUS Files + +The following files came from the official Z3PLUS distribution. These +are generally documented in the "Z3PLUS Users Manual.pdf" document in +the Doc/CPM directory of the RomWBW distribution. Note: + +NOTE: It may appear theat there are not many files, this is because most of the OS +files are shared with NZCOM. See here for a list [NZ-COM Z3PLUS OS Files] + +The following file are in User Area 15, and where noted 10 for help files. + +| **File** | **Description** | +|----------------|---------------------------------------------| +| `ALIAS.CMD` | Sample alias definitions for use with ARUNZ | +| `PATCHSK.SUB` | Patch smartkey II v. 1.0A (U10) | +| `PATCH4SK.HEX` | Patch smartkey II v. 1.0A - Hex File (U10) | +| `RELEASE.NOT` | Update information on Z3PLUS (U10) | + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|--------------------------------|---------------| +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [CP/NET 1.2] | 4 | +| | [SIMH Simulator] | 13 | +| | [CP/M 3 Files] | 15 | +| | [NZ-COM Z3PLUS OS Files] | 15, 14, 10 | +| | [OS General Files] | 15, 14, 10 | +| | [General Purpose Applications] | 15, 10 | + +`\clearpage`{=latex} + +## ZPM3 + +This is a generic ZPM3 adaptation for RomWBW. | Floppy Disk Image: **fd_zpm3.img** | Hard Disk Image: **hd_zpm3.img** | Combo Disk Image: **Slice 4** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `HELP.HLP` | ZPM3 | | -| `ROMWBW.TXT` | RomWBW | | -| `ZPMLDR.COM` | RomWBW | | -| `ZPMLDR.SYS` | RomWBW | | -| `CPMLDR.COM` | RomWBW | | -| `CPMLDR.SYS` | RomWBW | | -| `CPM3.SYS` | RomWBW | | -| `ZCCP.COM` | ZPM3 | | -| `ZINSTAL.ZPM` | ZPM3 | | -| `STARTZPM.COM` | ZPM3 | | -| `MAKEDOS.COM` | ZPM3 | | -| `GENCPM.DAT` | RomWBW | | -| `BNKBIOS3.SPR` | RomWBW | | -| `BNKBDOS3.SPR` | ZPM3 | | -| `RESBDOS3.SPR` | ZPM3 | | - -| **User 3** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ATTACK.PT3` | -- | Sound File | -| `BACKUP.PT3` | -- | Sound File | -| `BADMICE.PT3` | -- | Sound File | -| `DEMO.MYM` | -- | Sound File | -| `DEMO1.MYM` | -- | Sound File | -| `DEMO3.MYM` | -- | Sound File | -| `DEMO3MIX.MYM` | -- | Sound File | -| `DEMO4.MYM` | -- | Sound File | -| `HOWRU.PT3` | -- | Sound File | -| `ITERATN.PT3` | -- | Sound File | -| `LOOKBACK.PT3` | -- | Sound File | -| `LOUBOUTN.PT3` | -- | Sound File | -| `NAMIDA.PT3` | -- | Sound File | -| `RECOLL.PT3` | -- | Sound File | -| `SANXION.PT3` | -- | Sound File | -| `SYNCH.PT3` | -- | Sound File | -| `TOSTAR.PT3` | -- | Sound File | -| `VICTORY.PT3` | -- | Sound File | -| `WICKED.PT3` | -- | Sound File | -| `YEOLDE.PT3` | -- | Sound File | -| `YEOVIL.PT3` | -- | Sound File | - -| **User 10** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ALIAS.HLP` | -- | | -| `HP-RPN.HLP` | -- | | -| `HP-ZP.HLP` | -- | | -| `IF.HLP` | -- | | -| `MENU.HLP` | -- | | -| `VLU.HLP` | -- | | -| `ZFHIST.HLP` | -- | | -| `ZFILER.HLP` | -- | | -| `ZFMACRO.HLP` | -- | | -| `ZP.HLP` | -- | | - -| **User 14** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `COPY.CFG` | -- | | -| `ERASE.CFG` | -- | | -| `HELPC15.CFG` | -- | | -| `ZCNFG24.CFG` | -- | | -| `ZEX.CFG` | -- | | -| `ZF11.CFG` | -- | | -| `ZP17.CFG` | -- | | - -| **User 15** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ALIAS.COM` | -- | | -| `ARUNZ.COM` | -- | | -| `COPY.COM` | -- | | -| `DATE.COM` | CPM3 | | -| `DEV.COM` | -- | | -| `DEVICE.COM` | CPM3 | | -| `DIR.COM` | CPM3 | | -| `DISKINFO.COM` | -- | | -| `DU.COM` | -- | | -| `DUMP.COM` | CPM3 | | -| `ED.COM` | CPM3 | | -| `ERASE.COM` | CPM3 | | -| `GENCOM.COM` | CPM3 | | -| `GENCPM.COM` | CPM3 | | -| `GET.COM` | CPM3 | | -| `GOTO.COM` | -- | | -| `HELP.COM` | CPM3 | | -| `HEXCOM.COM` | CPM3 | | -| `IF.COM` | -- | | -| `INITDIR.COM` | CPM3 | | -| `KERMIT.COM` | CPM3 | | -| `LBREXT.COM` | -- | | -| `LIB.COM` | -- | | -| `LINK.COM` | -- | | -| `LOADSEG.COM` | -- | | -| `MAC.COM` | -- | | -| `MBASIC.COM` | -- | | -| `NAMES.NDR` | -- | | -| `PATCH.COM` | CPM3 | | -| `PIP.COM` | CPM3 | | -| `PUT.COM` | CPM3 | | -| `REMOVE.COM` | -- | | -| `RENAME.COM` | CPM3 | | -| `RMAC.COM` | -- | | -| `RSXDIR.COM` | -- | | -| `SAINST.COM` | -- | | -| `SALIAS.COM` | -- | | -| `SAVE.COM` | CPM3 | | -| `SET.COM` | CPM3 | | -| `SETDEF.COM` | CPM3 | | -| `SETPATH.COM` | -- | | -| `SHOW.COM` | CPM3 | | -| `SUBMIT.COM` | CPM3 | | -| `TCAP.Z3T` | -- | | -| `TYPE.COM` | CPM3 | | -| `VERROR.COM` | -- | | -| `VLU.COM` | -- | | -| `XREF.COM` | -- | | -| `ZCNFG.COM` | -- | | -| `ZERASE.COM` | -- | | -| `ZEX.COM` | -- | | -| `ZFILER.COM` | -- | | -| `ZHELP.COM` | -- | | -| `ZP.COM` | -- | | -| `ZSHOW.COM` | -- | | -| `ZSID.COM` | -- | | -| `ZXD.COM` | -- | | -| `AUTOTOG.COM` | ZPM3 | | -| `CLRHIST.COM` | ZPM3 | | -| `SETZ3.COM` | ZPM3 | | -| `ASSIGN.COM` | RomWBW | | -| `FAT.COM` | RomWBW | | -| `FDU.COM` | RomWBW | | -| `FORMAT.COM` | RomWBW | | -| `INTTEST.COM` | RomWBW | | -| `MODE.COM` | RomWBW | | -| `RTC.COM` | RomWBW | | -| `SURVEY.COM` | RomWBW | | -| `SYSCOPY.COM` | RomWBW | | -| `SYSGEN.COM` | RomWBW | | -| `TALK.COM` | RomWBW | | -| `TIMER.COM` | RomWBW | | -| `TUNE.COM` | RomWBW | | -| `XM.COM` | RomWBW | | -| `CLRDIR.COM` | -- | | -| `COMP.COM` | -- | | -| `DDTZ.COM` | -- | | -| `FDISK80.COM` | -- | | -| `FLASH.COM` | -- | | -| `NULU.COM` | -- | | -| `TCVIEW.COM` | -- | | -| `UNARC.COM` | -- | | -| `Z3LOC.COM` | -- | | -| `ZAP.COM` | -- | | -| `ZDE.COM` | -- | | -| `ZDENST.COM` | -- | | +Per ZPM3 standard, files are distributed across different user areas +depending on their usage. Normal applications are in user area 15. Help +files in user area 10. Configuration files in user area 14. + +### ZPM3 OS Files + +The following files appear in User Area 0 + +| **File** | **Source** | **Description** | +|----------------| ---------- |-----------------------------------------------| +| `BNKBIOS3.SPR` | RomWBW | Banked BIOS | +| `BNKBDOS3.SPR` | ZPM3 | Banked BDOS | +| `CPM3.SYS` | RomWBW | ZPM3 system file (See Note) | +| `GENCPM.DAT` | RomWBW | DRI CPM+ System generation tool data file | +| `HELP.HLP` | ZPM3 | System Help File | +| `MAKEDOS.COM` | ZPM3 | Utility to overlay your system file with ZPM3 | +| `STARTZPM.COM` | RomWBW | Commands to execute after ZPM is launched | +| `RESBDOS3.SPR` | ZPM3 | Resident BDOS | +| `ZCCP.COM` | ZPM3 | ZCCP replacement for CCP.COM | +| `ZINSTAL.ZPM` | ZPM3 | Segment containing environment information | +| `ZPMLDR.COM` | RomWBW | ZPM3 Boot Loader Application | +| `ZPMLDR.SYS` | RomWBW | ZPM3 Boot Loader for SYSCOPY | + +**NOTE:** Currently `GENCPM.COM` is located in User Area 15 + +**NOTE:** The ZPM3 system file is called CPM3.SYS. This is the ZPM3 +default configuration. It is done to maximize compatibility with CP/M 3. + +Either ZPMLDR or CPMLDR can be used to launch ZPM3. CPMLDR is equivalent to ZPMLDR. + +The following files appear in User Area 15 + +| **File** | **Source** | **Description** | +|---------------| ---------- |-----------------| +| `AUTOTOG.COM` | ZPM3 | | +| `CLRHIST.COM` | ZPM3 | | +| `SETZ3.COM` | ZPM3 | | + +### ZPM3 Files + +This is a generic ZPM3 adaptation for RomWBW. + +| **File** | **User Area** | **Description** | +|----------------|---------------|--------------------------------------------------------------| +| `ARUNZ.COM` | 15 | Alias-RUN-forZ-System command alias exec (v1.1 Type3) | +| `DEV.COM` | 15 | | +| `DISKINFO.COM` | 15 | ZCPR utility which gives information about your disks. | +| `DU.COM` | 15 | | +| `ERASE.CFG` | 14 | | +| `GENCPM.COM` | 15 | DRI CPM3 Utility to Create a memory image of CPM3.SYS | +| `GOTO.COM` | 15 | | +| `HELPC15.CFG` | 14 | | +| `HP-RPN.HLP` | 10 | Help File for HP RPN Calculators ? | +| `HP-ZP.HLP` | 10 | Help File for HP ZP Calculators ? | +| `IF.COM` | 15 | Extended flow control tester for FCP (v1.6 Type 3) | +| `IF.HLP` | 10 | | +| `LOADSEG.COM` | 15 | ZCCP Utility to Load RSXes, TCAPs and Named Directory files. | +| `MENU.HLP` | 10 | | +| `NAMES.NDR` | 15 | Default Directory Names loaded at boot | +| `REMOVE.COM` | 15 | | +| `RSXDIR.COM` | 15 | ZCPR Utility which displays RSXes in memory | +| `SETPATH.COM` | 15 | used to set the command search path. | +| `VERROR.COM` | 15 | Installs a resident error handler | +| `VLU.COM` | 15 | Video Library Utility views or extracts files from libraries | +| `VLU.HLP` | 10 | | +| `XREF.COM` | 15 | | +| `ZERASE.COM` | 15 | | +| `ZFHIST.HLP` | 10 | | +| `ZFILER.COM` | 15 | File management shell, with GUI. | +| `ZFILER.HLP` | 10 | Help file for ZFILER.COM | +| `ZF11.CFG` | 14 | | +| `ZFMACRO.HLP` | 10 | | +| `ZHELP.COM` | 15 | | +| `ZP.COM` | 15 | Patch utility edits files, disk sectors, or memory | +| `ZP.HLP` | 10 | Help File for ZP.COM | +| `ZP17.CFG` | 14 | | +| `ZSHOW.COM` | 15 | displays amount of information about your Z-System | + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|------------------------------------|---------------| +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [SIMH Simulator] | 13 | +| | [CP/M 3 Files] | 15 | +| | [OS General Files] | 15, 14, 10 | +| | [General Purpose Applications] | 15, 10 | + +## QPM 2.7 + +The following files came from from Microcode Consulting. The official +distribution files can be found on the Microcode Consulting website at +[https://www.microcodeconsulting.com/z80/qpm.htm]. +Also included in this image are debugz, and linkz frm the same company. + +This disk includes the standard DRI CP/M 2.2 files in addition to the +QP/M files. QP/M generally assumes you already had DRI CP/M 2.2 +prior to adding QP/M features. + +### QPM 2.7 OS Files + +These are built and provide the OS. +QPM Typically has no boot files stored on the disk. +It entirely boots from the system track + +The following files appear in User Area 0 + +| **File** | **Description** | +|------------|------------------------------------------------------------| +| `QPM.SYS` | RomWBW configured QP/M system image (for use with SYSCOPY) | + +The qpm.sys file and the QP/M image on the system +tracks was created using QINSTALL with default settings EXCEPT +for the two settings described under Notes (current drive/user +storage address and TIMDAT vector). + +### QPM 2.7 Files + +The following files appear in User Area 0 + +| **File** | **Description** | +|----------------|-----------------------------------------------------------| +| `D.COM` | Directory lister | +| `DBGINST.COM` | Configures DEBUGZ debugger | +| `DEBUGZ.COM` | Symbolic debugger for Z80 | +| `DEBUGZ.HLP` | Symbolic debugger help file | +| `DHORIZ.COM` | Version of directory lister for horizontal file sorting | +| `HELLO.QPM` | Text file with QP/M version information | +| `LZ.COM` | Z80 Linking Loader | +| `QBACKUP.COM` | Data backup application | +| `QINSTALL.COM` | QP/M installer / configurator | +| `QPATCH.COM` | Patches (customizes) a few QP/M applications | +| `QPIP.COM` | QP/M enhanced version of CP/M 2.2 PIP application | +| `QPMCLK.MAC` | Example of QP/M clock assembler routine | +| `QPMCMDS.TXT` | Brief summary of QP/M commands | +| `QPMUTILS.TXT` | Brief summary of QP/M utilities | +| `QSTAMP.COM` | Initializes disk for date/time stamping | +| `QSTAMPV.COM` | Initializes disk for date/time stamping (vertical sort) | +| `QSTAMPX.COM` | Initializes disk for date/time stamping (horizontal sort) | +| `QSTAT.COM` | QP/M enhanced version of CP/M 2.2 STAT application | +| `QSUB.COM` | QP/M batch file submission program - Like SUBMIT | +| `QSWEEP.COM` | QP/M directory sweep utility | +| `QTERM.DAT` | Terminal control codes used by DEBUGZ | +| `QTERMS.LIB` | Library of available terminal definitions | +| `SETQTERM.COM` | Configures QTERM.DAT | +| `TDCNFG.COM` | Configures date/time directory display preferences | + +There are two text files (QPMCMDS.TXT and QPMUTILS.TXT) included. +These files have escape sequences imbedded in them which makes them +look a little strange depending on the terminal emulation you are using. + +### Additional Files + +| | **Documentation** | **User Area** | +|-----|------------------------------------|---------------| +| | [CP/M 2.2 Files] | 0 | +| | [OS General Files] | 0 | +| | [General Purpose Applications] | 0 | +| | [Testing Applications] | 2 | +| | [Sample Audio Files] | 3 | +| | [SIMH Simulator] | 13 | `\clearpage`{=latex} -# WordStar 4 Application Disk +# Common Disk Contents + +## CP/NET 1.2 + +User area 4 contains a full implementation of the CP/NET 1.2 client +provided by Doug Miller. Please refer to +[https://github.com/durgadas311/cpnet-z80] for more information, +complete documentation and the latest source code. + +Please refer to the RomWBW User Guide for instructions on installing +and using these these packages. Either the MT011 RCBus module or the +Duodyne Disk I/O board is required. In general, to use CP/NET on RomWBW, +it is intended that you will extract the appropriate set of files +into your default directory in user area 0. + +The following are found in + +* /Binary/CPNET + +| **File** | **CP/NET Version** | **OS** | **Hardware** | +|-----------------|---------------------|-----------------|-------------------------| +| CPN12MT.LBR | CP/NET 1.2 | CP/M 2.2 | RCBus w/ MT011 | +| CPN3MT.LBR | CP/NET 3 | CP/M 3 | RCBus w/ MT011 | +| CPN12DUO.LBR | CP/NET 1.2 | CP/M 2.2 | Duodyne w/ Disk I/O | +| CPN3DUO.LBR | CP/NET 3 | CP/M 3 | Duodyne w/ Disk I/O | + +## General Purpose Applications + +The following files are general purpose an provided in (mostly) all OS images + +The following files are found in + +* /Source/Apps/* +* /Source/Images/Common/All +* /Source/TastyBasic + +The following files provide specific functionality enabled by +RomWBW enhancements. These applications are typically documented in the +"RomWBW Applications.pdf" document in the Doc directory of the +RomWBW Distribution. + +| **File** | **Source** | **Description** | +|----------------|-----------------|---------------------------------------------------------------| +| `ASSIGN.COM` | RomWBW | Assign,remove,swap drive letters of RomWBW disk slices | +| `CLRDIR.COM` | Max Scane | Initializes the directory area of a disk | +| `COPYSL.COM` | M.Pruden | Copy CPM Hard Disk Slices | +| `COPYSL.DOC` | M.Pruden | Documentation for COPYSL.COM | +| `CPUSPD.COM` | RomWBW | CPU Speed | +| `FAT.COM` | RomWBW | MS-DOS FAT filesystem tool (list, copy, delete, format, etc.) | +| `FDISK80.COM` | John Coffman | Hard disk partitioning tool | +| `FDU.COM` | RomWBW | Floppy Disk Utility, Test and format floppy disks | +| `FDU.DOC` | RomWBW | Documentation for FDU | +| `FLASH.COM` | Will Sowerbutts | Program FLASH chips in-situ | +| `FLASH.DOC` | Will Sowerbutts | Documentation for FLASH | +| `FORMAT.COM` | RomWBW | Placeholder application with formatting instructions | +| `HTALK.COM` | Tom Plano | Terminal utility talking directly to HBIOS Character Units | +| `MODE.COM` | RomWBW | Change serial line characteristics (baud rate, etc.) | +| `REBOOT.COM` | MartinR | Cold or Warm Boot the RomWBW System | +| `RTC.COM` | Andrew Lynch | Test real time clock hardware on your system | +| `SURVEY.COM` | RomWBW | Display system resources summary | +| `SYSCOPY.COM` | RomWBW | Copy system tracks to disks (make bootable) | +| `TALK.COM` | RomWBW | Route console I/O to & from specified serial port | +| `TIMER.COM` | RomWBW | Test and display system timer ticks | +| `TUNE.COM` | RomWBW | Play .PT2, .PT3, and .MYM audio files on supported hardware | +| `VGMPLAY.COM` | | Simple player for VGM (Video Game Music) files. | +| `WDATE.COM` | Kevin Boone | Utility to configure RTC Date. | +| `XM.COM` | RomWBW | XModem file transfer application | + +Then we have some more general purpose applcations. +In general, there is no documentation for these applications included with the RomWBW +distribution. Some provide command line help themselves. Some are fairly obvious. + +| **File** | **Source** | **Description** | +|----------------|-------------------|--------------------------------------------------------| +| `BBCBASIC.COM` | R.T.Russell | BBC BASIC CP/M Version | +| `BBCBASIC.TXT` | R.T.Russell | Help file for BBC BASIC | +| `COMPARE.COM` | | Compare content of two files (binary) | +| `CRUNCH.COM` | | Compress file(s) using Crunch algorithmn | +| `CRUNCH28.CFG` | | ZCNFG configuration file for CRUNCH & UNCR | +| `DDTZ.COM` | | Z80 debug tool (modified to use RST 6) | +| `DDTZ.DOC` | | Documentation for DDTZ | +| `EX.COM` | | Batch file processor (alternative to DRI SUBMIT) | +| `FIND.COM` | Jay Cotton | Search all drives for a file () | +| `GENHEX.COM` | | Generates an Intel Hex file from the input file | +| `LS.COM` | | An alternative file listing to DIR | +| `LSWEEP.COM` | | Extract and view member files of an .LBR archive | +| `MBASIC.COM` | Microsoft | Microsoft BASIC language interpreter | +| `NULU.COM` | | NZCOM new library utility (.LBR) management tool | +| `PMARC.COM` | | Create or add file(s) to LHA .PMA archive | +| `PMEXT.COM` | | Extract file(s) from .PMA/.LZH/.LHA archive | +| `RMXSUB1.COM` | Lars Nelson | Remove XSUB1 RSX from memory | +| `SUPERSUB.COM` | | Enhanced replacement for DRI SUBMIT | +| `SUPERSUB.DOC` | | Documentation for SUPERSUB | +| `SYSGEN.COM` | DRI | Copy system tracks to disks | +| `TBASIC.COM` | Dimitri Theulings | Tasty Basic. This also exists as a Rom appication | +| `TDLBASIC.COM` | | TDL Zapple 12K BASIC language interpreter | +| `UNARC.COM` | | Extract file(s) from .ARC or .ARK archive | +| `UNARC.DOC` | | Documentation for UNARC | +| `UNCR.COM` | | Decompress Crunched file(s). See CRUNCH.COM | +| `UNZIP.COM` | Lars Nelson | UNZIP extracts from MS-DOS ZIP files | +| `UNZIP.DOC` | | Documentation for UNZIP | +| `XSUB1.COM` | Lars Nelson | Replacement for DRI XSUB | +| `ZAP.COM` | | Interactive disk & file utility | +| `ZDE.COM` | | Compact WordStar-like editor | +| `ZDE.DOC` | | ZDE Documentation | +| `ZDENST.COM` | | Installation/configuration tool for ZDE | +| `ZMRX.COM` | | | +| `ZMTX.COM` | | | +| `ZMD.COM` | R.W.K | Z80 RCP/M File Transfer Program (Robert W. Kramer III) | +| `ZMP.COM ` | | ZModem communications program (dedicated port) | +| `ZMP.DOC` | | Documentation for ZMP | +| `ZMP.HLP` | | Help file for ZMP | +| `ZMXFER.OVR` | | Overlay file for ZMP | +| `ZMTERM.OVR` | | Overlay file for ZMP | +| `ZMINIT.OVR` | | Overlay file for ZMP | +| `ZMCONFIG.OVR` | | Overlay file for ZMP | + +## OS General Files + +The following files are spcific files share across several OS's. +In general, there is no documentation for these applications included with +the RomWBW distribution. Some provide command line help themselves. +Some are fairly obvious. + +The following files are found in + +* /Source/Images/Common/CPM22 +* /Source/Images/Common/CPM3 +* /Source/Images/Common/Z +* /Source/Images/Common/Z3 + +| **File** | **Applicability** | **Description** | +|----------------|-------------------|-------------------------------------------------------| +| `ALIAS.COM` | Z3 | Create an Alias (v1.1) | +| `ALIAS.HLP` | Z3 | Help File for ALIAS.COM | +| `COPY.COM` | Z | File copier with ZSDOS date stamping awareness | +| `COPY.CFG` | Z | ZCNFG configuration file for COPY application | +| `EDITNDR.COM` | Z3 | Edit named directory register in memory. | +| `KERCPM22.COM` | CPM22 | Kermit communication application | +| `KERCPM3.COM` | CPM3 | Kermit communication application | +| `LBREXT.COM` | Z | Extract file from .LBR libraries | +| `LBREX36.CFG` | Z | ZCNFG configuration file for LBREXT | +| `RZ.COM` | CPM3 | Receive files with X/Y/ZModem (experimental) | +| `RZSC.FOR` | CPM3 | Description of RZ/SZ programs | +| `SAINST.COM` | Z3 | Install/configure SALIAS. | +| `SALIAS.COM` | Z3 | Screen oriented alias editor. (v1.6) | +| `SAVENDR.COM` | Z3 | Writes the named directory to disk. | +| `SDZ.COM` | Z3 | Enhanced directory lister. | +| `SCOPY.COM` | Z3 | Screen-oriented file copy for ZCPR3 | +| `SCOPY10.CFG` | Z3 | ZCNFG configuration file for SCOPY | +| `SCOPY.HLP` | Z3 | Primary help file for SCOPY | +| `SCOPY10F.HLP` | Z3 | Secondary help file for SCOPY | +| `SZ.COM` | CPM3 | Send files with X/Y/ZModem (experimental) | +| `TCAP.Z3T` | Z3 | Terminal capabilities for ZCPR3 (VT100) | +| `TCSELECT.COM` | Z3 | NZCOM Create terminal capability file (newer version) | +| `TCVIEW.COM` | Z3 | View zcpr3 terminal capabilities | +| `UMAP.COM` | Z3 | Shows directory usage | +| `UMAP18.CFG` | Z3 | ZCNFG configuration file for UMAP program | +| `UNARCU1.CFG` | Z | ZCNFG configuration file for UNARC program | +| `ZCNFG.COM` | Z | Configuration tool for programs with .CFG files | +| `ZCNFG24.CFG` | Z | Configuration file for ZCNFG.COM | +| `ZEX.COM` | Z3 | A memory-based command file processor, like SUBMIT | +| `ZEX.CFG` | Z3 | ZCNFG configuration file for ZEX program | +| `ZXD.CFG` | Z | Configuration file for ZXD.COM | +| `ZXD.COM` | Z | Extended directory utility w/ date/time stamp support | +| `Z3LOC.COM` | Z3 | Display info of the ZCPR3 CCP, BDOS, and BIOS | +| `Z3TCAP.LBR` | Z3 | Database of terminal descriptions | + +Applicability: + +* CPM22 - Included in all CP/M 2.2 OS's (CPM2.2, ZSDOS, NZ-COM, QPM) +* CPM3 - Included in all CP/M 3 OS's (CPM3, Z3PLUS, ZPM3) +* Z - Included in All Z OS's (ZSDOS, NZ-COM, Z3PLUS, ZPM3) +* Z3 - Included in ZCPR3 OS's (NZ-COM, Z3PLUS, ZPM3) + +## NZ-COM Z3PLUS OS Files + +The following files are specific files share across two operating systems. + +* NZ-COM - The Automatic Z-System - Alpha Systems +* Z3PLUS - The Z-System for CP/M-Plus - Plu*Perfect Systems + +These 2 operating systems are identical in all respects, except for the underlying +operating system that they run on. + +The following files are found in + +* /Source/Images/Common/NZ3PLUS + +The following file are in User Area 15, and where noted 14 for config files. + +| **File** | **Description** | +|----------------|----------------------------------------------------------| +| `ARUNZ.COM` | Alias-RUN-forZ-System command alias exec (v0.9u Type4) | +| `CLEDINST.COM` | Command line editing and history shell installer | +| `CLEDSAVE.COM` | Save RCP-resident command line editor history | +| `CONFIG.LBR` | Various configuration files for use with ZCNFG. (U14) | +| `CPSET.COM` | Displays/defines CRT/PRT characteristics | +| `FCP.LBR` | Library of alternative FCP modules | +| `FF.COM` | File finder utility | +| `IF.COM` | Extended flow control tester for FCP (v1.5 Type4) | +| `JETLDR.COM` | Z-System General-purpose module loader | +| `LBRHELP.COM` | Help file viewer for use with help file libraries (.LBR) | +| `LDIR.COM` | Directory lister for libraries (.LBR) | +| `LPUT.COM` | Puts file(s) into a library (.LBR) | +| `LSH.COM` | Command history shell and command line editor | +| `LSH-HELP.COM` | Display LSH help when LSH is running | +| `LSHINST.COM` | LSH configuration editor | +| `LX.COM` | Execute programs directly from a library (.LBR) | +| `NAME.COM` | Quickly add or remove a name for a single directory | +| `PATH.COM` | Set/display command search path | +| `PWD.COM` | Displays DU and Directory Names with paging | +| `TY3ERA.COM` | Type-3 program to erase a file | +| `TY3REN.COM` | Type-3 program to rename a file | +| `TY4ERA.COM` | Type-4 program to erase a file | +| `TY4REN.COM` | Type-4 program to rename a file | +| `TY4SAVE.COM` | Type-4 program to save memory to a file | +| `TY4SP.COM` | Type-4 program to display disk space | +| `VIEW.COM` | Quad directional file viewer | +| `XTCAP.COM` | Interactive Extended TCAP Installer | +| `ZERR.COM` | Z34 Error Handler | +| `ZF-DIM.COM` | ZFILER shell for dim-video terminals | +| `ZF-REV.COM` | ZFILER shell for reverse-video terminals | +| `ZFILER.CMD` | Macro script file for ZFILER | +| `ZHELP.COM` | (HELPC14) is an improved version of the help utility | +| `ZLT.COM` | File lister with support for compressed files | +| `ZSHOW.COM` | Display Z-System configuration information | + +The following documentation files are in User Area 10 + +| **File** | **Description** | +|----------------|---------------------------------------------------------| +| `DOCFILES.LBR` | Documentation and help files collected into an LBR file | +| `HLPFILES.LBR` | Various app help files for use with LBRHELP | +| `LSH.WZ` | User manual for LSH | +| `TCJ.INF` | Subscription information for The Computer Journal | +| `TCJ*.WZ` | Selected articles from The Computer Journal | +| `ZFILEB38.LZT` | Brief listing of Z-System support programs | +| `ZHELPERS.LZT` | List of volunteers who will help installing Z-System | +| `ZNODES66.LZT` | List of Z-Node remote access systems | +| `ZSYSTEM.IZF` | Information on Z-System and related products | + +## Sample Audio Files + +User area 3 contains sample audio files that can be played using +the TUNE or VGMPLAY applications. + +**NOTE** These files are NOT present on floppy disk images + +The following files are found in + +* /Binary/Apps/Tunes + +| **File** | **File** | **File** | **File** | +|-------------------|-------------------|------------------|----------------| +| `ATTACK.PT3` | `DEMO4.MYM` | `NAMIDA.PT3` | `VICTORY.PT3` | +| `BACKUP.PT3` | `ENDING.VGM` | `RECOLL.PT3` | `WICKED.PT3` | +| `BADMICE.PT3` | `HOWRU.PT3` | `SANXION.PT3` | `WONDER01.VGM` | +| `DEMO.MYM` | `INCHINA.VGM` | `SHIRAKAW.VGM` | `YEOLDE.PT3` | +| `DEMO1.MYM` | `ITERATN.PT3` | `STARTDEM.VGM` | `YEOVIL.PT3` | +| `DEMO3.MYM` | `LOOKBACK.PT3` | `SYNCH.PT3` | | +| `DEMO3MIX.MYM` | `LOUBOUTN.PT3` | `TOSTAR.PT3` | | + +## SIMH Simulator + +Files for use with the SIMH Simulator + +The following files are found in + +* /Source/Images/Common/SIMH + +| **File** | **Description** | +|----------------|-----------------------------------------------------------| +| HDIR.COM | | +| R.COM | transfer files between the simulator and host file system | +| RSETSIMH.COM | -- | +| TIMER.COM | -- | +| URL.COM | -- | +| W.COM | transfer files between the simulator and host file system | + +## Testing Applications + +User area 2 contains a variety of hardware testing applications. +These are generally user contributed and have no documentation. + +These applications are frequently not compatible with all RomWBW +hardware. They are included here as a convenience. If applicable, +your hardware documentation should refer to them and provide usage +instructions. + +**NOTE** These files are NOT present on floppy disk images + +The following files are found in + +* /Binary/Apps/Test +* /Source/Images/Common/Test + +| **File** | **Description** | +|---------------------|---------------------------------------------------------| +| `2PIOTST.COM` | ECB-ZILOG PERIPHERALS BOARD TEST 2 PIO's | +| `AY-TEST.COM` | AY-3-8910 Sound Test Program (SOUND) | +| `BANKTEST.COM` | Test RomWBW bank management API | +| `DMAMON.COM` | Verify operation of the Z80 MBC DMA board | +| `I2CLCD.COM` | PCF8584 HD44780 I2C LCD UTILITY | +| `I2CSCAN.COM` | I2C BUS SCANNER | +| `INTTEST.COM` | Test HBIOS interrupt API functions | +| `KBDTEST.COM` | test program to work with the Z80 KBDMSE board | +| `PIOMON.COM` | Zilog PIO Monitor & Hardware Testing Application | +| `PORTSCAN.COM` | Reads all ports and displays values read | +| `PPIDETST.COM` | PPI IDE test for checkout of all 8255 IDE drives | +| `PS2INFO.COM` | PS/2 Keyboard/Mouse Information Utility | +| `RAMTEST.COM` | RAM_TEST_PROGRAM | +| `RTCDS7.COM` | PCF8584/DS1307 I2C DATE AND TIME UTILITY (I2C) | +| `RZ.COM` | Receive Zmodem disassembly of CP/M 3 binaries | +| `SOUND.COM` | RomWBW HBIOS Sound Device Test Tool (SOUND) | +| `SROM.COM` | I2C Serial ROM Read/Write Utility (I2C) | +| `SZ.COM` | Send Zmodem is a disassembly of CP/M 3 binaries | +| `TESTH8P.COM` | H8 Panel Test | +| `TSTDSKNG.COM` | DSKY NEXT GENERATION TEST APPLICATION | +| `VDCONLY.COM` | COLOR VDU TEST | +| `VDCTEST.COM` | COLOR VDU TEST | +| `ZEXALL.COM` | Z80 Instruction Set Exerciser | +| `ZEXDOC.COM` | Z80 Instruction Set Exerciser | + +And The following CPU Tests - Which are probably originally from this source. +[https://github.com/raxoft/z80test] + +| **File** | **Description** | +|----------------|---------------------------------------------------------------| +| `Z80CCF.COM` | tests flags after executing CCF after each instruction. | +| `Z80DOC.COM` | tests registers, but only officially documented flags | +| `Z80DOCF.COM` | | +| `Z80FLAGS.COM` | tests flags, ignores registers. | +| `Z80FULL.COM` | tests flags and registers | +| `Z80MPTR.COM` | tests flags after executing BIT N,(HL) after each instruction | + +# Application Standalone Disks + +## Aztec C Compiler + +| Floppy Disk Image: **fd_aztecc.img** +| Hard Disk Image: **hd_aztecc.img** + +Aztec C is a discontinued programming language for a variety of platforms +including MS-DOS, Apple II DOS 3.3 and PRoDOS, Commodore 64, Macintosh and +Amiga. This disk contains the CP/M version of that compiler. A cross-compiler +for MS-DOS or Windows XP is also available. + +For full documentation, see [https://www.aztecmuseum.ca] +The user manual is available in the Doc/Language directory +Aztec_C_1.06_User_Manual_Mar84.pdf + +The following files are found in + +* /Source/Images/d_aztec + +| **File** | **Description** | +|----------|-----------------| +| -- | -- | + +NOTE : The above is incomplete + +## Microsoft Basic Compiler + +| Floppy Disk Image: **fd_bascomp.img** +| Hard Disk Image: **hd_bascomp.img** + +The Microsoft BASIC Compiler is a highly efficient programming tool that +converts BASIC programs from BASIC source code into machine code. This +provides much faster BASIC program execution than has previously been +possible. It can make programs run an average of 3 to 10 times faster than +programs run under BASIC-80. Compiled programs can be up to 30 times +faster than interpreted programs if maximum use of integer variables is +made. + +View BASCOM.HLP included in the disk image using HELP.COM for documentation. + +The following files are found in + +* /Source/Images/d_bascomp + +| **File** | **Description** | +|----------|-----------------| +| -- | -- | + +NOTE : The above is incomplete + +## Cowgol Compiler + +| Floppy Disk Image: **fd_cowgol.img** +| Hard Disk Image: **hd_cowgol.img** + +The Cowgol 2.0 compiler and related tools. +These files were provided by Ladislau Szilagyi and were sourced +from his GitHub repository at [https://github.com/Laci1953/Cowgol_on_CP_M]. + +The primary distribution site for Cowgol 2.0 is at +[https://github.com/davidgiven/cowgol]. +The user manual is available in the Doc/Language directory +Cowgol Language.pdf + +The following files are found in + +* /Source/Images/d_cowgol + +| **File** | **Description** | +|--------------|--------------------------------------------| +| ADVENT.COW | Adventure game program source | +| ADVENT.SUB | Submit file to build ADVENT | +| ADVENT?.TXT | Adventure game program resource | +| ADVMAIN.COW | Adventure game program source | +| RAND.AS | Assembler Library File | +| COWBE.COM | | +| COWFE.COM | RomWBW specific (Memory Manage) version | +| COWLINK.COM | | +| DYNMSORT.COW | demonstrates a sort algorithm | +| DYNMSORT.SUB | Submit file to build DYNMSORT | +| HEXDUMP.COW | a simple hex dump utility, purely a Cowgol | +| HEXDUMP.SUB | Submit file to build HEXDUMP | +| HMERGES.C | C Library File | +| XRND.AS | Assembler Library File | +| - | - | + +NOTE : The above is incomplete + +## Microsoft Fortran 80 (Fortran) + +| Floppy Disk Image: **fd_fortran.img** +| Hard Disk Image: **hd_fortran.img** + +This is Microsoft's implementation of the FORTRAN scientific-oriented high level +programming language. It was one of their early core languages developed for the +8-bit computers and later brought to the 8086 and IBM PC. In 1993 Microsoft +rebranded the product as Microsoft Fortran Powerstation. (Note: -80 refers to +the 8080/Z80 platform, not the language specification version) + +The user manual is available in the Doc/Language directory, +Microsoft_FORTRAN-80_Users_Manual_1977.pdf + +The following files are found in + +* /Source/Images/d_fortram + +| **File** | **Description** | +|----------|-----------------| +| -- | -- | + +NOTE : The above is incomplete + +## Games + +| Floppy Disk Image: **fd_games.img** +| Hard Disk Image: **hd_games.img** + +This disk contains several games for CP/M including the Infocom games +Zork 1 through 3, Planetfall and Hitchhiker's Guide to the Galaxy. + +Nemesis and Dungeon Master is a Rogue-like game released in 1981. It is playable +on a text terminal using ASCII graphics to represent the dungeon. Only a few +thousand copies of the game were ever made, making it very rare. See +[http://crpgaddict.blogspot.com/2019/03/game-322-nemesis-1981.html] + +Colossal Cave Adventure is a CP/M port of the 1976 classic game originally +written by Will Crowther for the PDP-10 mainframe. See +[https://en.wikipedia.org/wiki/Colossal_Cave_Adventure] and +[https://if50.substack.com/p/1976-adventure] + +The following files are found in + +* /Source/Images/d_games + +| **File** | **Description** | +|----------|-----------------| +| -- | -- | + +NOTE : The above is incomplete + +## HI-TECH C Compiler + +| Floppy Disk Image: **fd_hitechc.img** +| Hard Disk Image: **hd_hitechc.img** + +The HI-TECH C Compiler is a set of software which +translates programs written in the C language to executable +machine code programs. Versions are available which compile +programs for operation under the host operating system, or +which produce programs for execution in embedded systems +without an operating system. + +This is the Mar 21, 2023 update 17 released by Tony Nicholson who currently +maintains HI-TECH C at [https://github.com/agn453/HI-TECH-Z80-C] + +The manual is available in the Doc/Language directory, +HI-TECH Z80 C Compiler Manual.txt + +A good blog post about the HI-TECH C Compiler is available at +[https://techtinkering.com/2008/10/22/installing-the-hi-tech-z80-c-compiler-for-cpm] + +The following files are found in + +* /Source/Images/d_hitechc + +| **File** | **Description** | +|----------|-----------------| +| -- | -- | + +NOTE : The above is incomplete + +## MSX ROMS + +| Hard Disk Image: **hd_msxroms1.img** +| Hard Disk Image: **hd_msxroms2.img** + +The collection of MSX ROMs (2 disks) as provided by Les Bird. +These ROMs are "run" by using the +appropriate variant of Les' MSX8 ROM loader. You can download the +loader binaries from [https://github.com/lesbird/MSX8]. You will need +appropriate hardware to run the loader. + +Please review the file ROMLIST.TXT for information on the current +operational status of the ROM and it's long file name/description. + +This disk (RomWBW slice) is not automatically included with the +RomWBW "combo" disk images. You can simply add it to a combo +image by appending it to the end. After booting your system, +you can use the ASSIGN command to map the slice to a drive letter. +Refer to the RomWBW User Guide for more information on this +process. + +The ROM files are found in + +* /Source/Images/d_msxroms1 +* /Source/Images/d_msxroms2 + +## Turbo Pascal Compiler + +| Floppy Disk Image: **fd_tpascal.img** +| Hard Disk Image: **hd_tpascal.img** + +The Borland Turbo Pascal Compiler. +Pascal is a general-purpose, high level programming language originally +designed by Professor Niklaus Wirth of the Technical University of Zurich, +Switzerland and named in honor of Blise Pascal, the famous French philosopher +and mathematician. + +Turbo Pascal closely follows the definition of Standard Pascal as defined in +the Pascal User Manual and Report with a few minor differences. + +The manual can be found in the Docs/Language directory, +Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf + +A good overview of using Turbo Pascal in CP/M is available at +[https://techtinkering.com/2013/03/05/turbo-pascal-a-great-choice-for-programming-under-cpm] + +The following files are found in + +* /Source/Images/d_tpascal + +| **File** | **Description** | +|--------------|--------------------------------| +| ART.TXT | Part of the Example program | +| SA.PAS | Example Program | +| TINST.COM | Installation and Configuration | +| TINST.DTA | Part of TINST | +| TINST.MSG | Part of TINST | +| TURBO.COM | The main Turbo Pascal program | +| TURBO.MSG | Part of TURBO tascal | +| TURBO.OVR | Part of TURBO tascal | +| TURBOMSG.OVR | Part of TURBO tascal | + +## WordStar 4 | Floppy Disk Image: **fd_ws4.img** | Hard Disk Image: **hd_ws4.img** | Combo Disk Image: **Slice 5** -| **User 0** | **Source** | **Description** | -| -------------- | ---------- | ------------------------------------------------------------ | -| `ANAGRAM.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `CHAPTER1.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `CHAPTER2.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `CHAPTER3.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `DIARY.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `DICTSORT.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `FIND.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `HOMONYMS.TXT` | WS4 | MicroPro WordStar 4 Distribution File | -| `HYEXCEPT.TXT` | WS4 | MicroPro WordStar 4 Distribution File | -| `HYPHEN.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `LOOKUP.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `MAINDICT.CMP` | WS4 | MicroPro WordStar 4 Distribution File | -| `MARKFIX.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `MOVEPRN.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `PATCH.LST` | WS4 | MicroPro WordStar 4 Distribution File | -| `PRINT.TST` | WS4 | MicroPro WordStar 4 Distribution File | -| `READ.ME` | WS4 | MicroPro WordStar 4 Distribution File | -| `README.` | WS4 | MicroPro WordStar 4 Distribution File | -| `REVIEW.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `RULER.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `SAMPLE1.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `SAMPLE2.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `SAMPLE3.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `SPELL.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `TABLE.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `TEXT.DOC` | WS4 | MicroPro WordStar 4 Distribution File | -| `TW.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WC.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WINSTALL.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WORDFREQ.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WS.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WS.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSCHANGE.COM` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSCHANGE.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSCHHELP.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSHELP.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSINDEX.XCL` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSMSGS.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSPRINT.OVR` | WS4 | MicroPro WordStar 4 Distribution File | -| `WSSHORT.OVR` | WS4 | MicroPro WordStar 4 Distribution File | +The following files are found in + +* /Source/Images/d_ws4 + +| **File** | **Description** | +|----------------|-----------------| +| `ANAGRAM.COM` | | +| `CHAPTER1.DOC` | | +| `CHAPTER2.DOC` | | +| `CHAPTER3.DOC` | | +| `DIARY.DOC` | | +| `DICTSORT.COM` | | +| `FIND.COM` | | +| `HOMONYMS.TXT` | | +| `HYEXCEPT.TXT` | | +| `HYPHEN.COM` | | +| `LOOKUP.COM` | | +| `MAINDICT.CMP` | | +| `MARKFIX.COM` | | +| `MOVEPRN.COM` | | +| `PATCH.LST` | | +| `PRINT.TST` | | +| `READ.ME` | | +| `README.` | | +| `REVIEW.COM` | | +| `RULER.DOC` | | +| `SAMPLE1.DOC` | | +| `SAMPLE2.DOC` | | +| `SAMPLE3.DOC` | | +| `SPELL.COM` | | +| `TABLE.DOC` | | +| `TEXT.DOC` | | +| `TW.COM` | | +| `WC.COM` | | +| `WINSTALL.COM` | | +| `WORDFREQ.COM` | | +| `WS.COM` | | +| `WS.OVR` | | +| `WSCHANGE.COM` | | +| `WSCHANGE.OVR` | | +| `WSCHHELP.OVR` | | +| `WSHELP.OVR` | | +| `WSINDEX.XCL` | | +| `WSMSGS.OVR` | | +| `WSPRINT.OVR` | | +| `WSSHORT.OVR` | | + +Also contained on this image in User Area 1 are. + +| **File** | **Description** | +|----------------|-----------------------| +| `SAMPKEY.DOC` | ZDE Distribution File | +| `SAMPKEY.ZDK` | ZDE Distribution File | +| `SAMPKEY.ZDT` | ZDE Distribution File | +| `ZDE10.DOC` | ZDE Distribution File | +| `ZDE10.FOR` | ZDE Distribution File | +| `ZDE10.NEW` | ZDE Distribution File | +| `ZDE10.QRF` | ZDE Distribution File | +| `ZDE10.TOC` | ZDE Distribution File | +| `ZDE13.FOR` | ZDE Distribution File | +| `ZDE13.NEW` | ZDE Distribution File | +| `ZDE16.COM` | ZDE Distribution File | +| `ZDE16.DIR` | ZDE Distribution File | +| `ZDE16.FIX` | ZDE Distribution File | +| `ZDE16.FOR` | ZDE Distribution File | +| `ZDE16.NEW` | ZDE Distribution File | +| `ZDE16A.COM` | ZDE Distribution File | +| `ZDE16A.PAT` | ZDE Distribution File | +| `ZDENST16.COM` | ZDE Distribution File | +| `ZDEPROP.DOC` | ZDE Distribution File | +| `ZDEPROP.Z80` | ZDE Distribution File | +| `ZDKCOM13.COM` | ZDE Distribution File | +| `ZDKCOM13.DOC` | ZDE Distribution File | + +## Z80ASM Macro Assembler + +| Floppy Disk Image: **fd_z80asm.img** +| Hard Disk Image: **hd_z80asm.img** + +Z80ASM is a relocating macro assembler for CP/M. It takes assembly language +source statements from a disk file, converts them into their binary equivalent, +and stores the output in either a core-image, Intel hex format, or relocatable +object file. The mnemonics recognized are those of Zilog/Mostek. The optional +listing output may be sent to a disk file, the console and/or the printer, in +any combination. Output files may also be generated containing cross-reference +information on each symbol used. + +The manual is available in the Doc/Language directory, +z80asm (SLR Systems).pdf + +A run through of using the assembler is available at +[https://8bitlabs.ca/Posts/2023/05/20/learning-z80-asm] + +The following files are found in + +* /Source/Images/d_z80asm + +| **File** | **Description** | +|------------|-------------------------------------| +| DUMP.* | Sample Program | +| TEST.* | Sample Program | +| Z80ASM.COM | Relocating macro assembler for CP/M | +| Z80ASM.DOC | Documentation for Z80.COM | diff --git a/Source/Doc/Graphics/BankSwitchedMemory.pdf b/Source/Doc/Graphics/BankSwitchedMemory.pdf index 42db138c..ba027b47 100644 Binary files a/Source/Doc/Graphics/BankSwitchedMemory.pdf and b/Source/Doc/Graphics/BankSwitchedMemory.pdf differ diff --git a/Source/Doc/Graphics/BankSwitchedMemory.png b/Source/Doc/Graphics/BankSwitchedMemory.png index f617cb0d..fd74851b 100644 Binary files a/Source/Doc/Graphics/BankSwitchedMemory.png and b/Source/Doc/Graphics/BankSwitchedMemory.png differ diff --git a/Source/Doc/Graphics/BankSwitchedMemory.svg b/Source/Doc/Graphics/BankSwitchedMemory.svg new file mode 100644 index 00000000..ef18a94e --- /dev/null +++ b/Source/Doc/Graphics/BankSwitchedMemory.svg @@ -0,0 +1,366 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + Data block.13 + + Sheet.14 + + + + Sheet.15 + + + + Sheet.16 + + + + + Data block.9 + + Sheet.10 + + + + Sheet.11 + + + + Sheet.12 + + + + + Data block + + Sheet.6 + + + + Sheet.7 + + + + Sheet.8 + + + + + Sheet.2 + $FE00 + + + $FE00 + + Sheet.3 + $D000 + + + $D000 + + Sheet.17 + $8000 + + + $8000 + + 3D stack middle + + Sheet.19 + + + + Sheet.20 + + + + + 3D stack middle.21 + + Sheet.22 + + + + Sheet.23 + + + + + 3D stack middle.24 + + Sheet.25 + + + + Sheet.26 + + + + + Sheet.27 + HBIOS Proxy (RST 08) + + HBIOS Proxy (RST 08) + + Sheet.28 + Application Area (TPA) + + Application Area (TPA) + + Sheet.29 + Operating System CP/M or ZSYS + + Operating System CP/M or ZSYS + + Sheet.30 + CBIOS + + CBIOS + + Sheet.31 + BDOS + + BDOS + + Sheet.32 + CCP + + CCP + + Data block.33 + + Sheet.34 + + + + Sheet.35 + + + + Sheet.36 + + + + + Sheet.37 + + + + Sheet.38 + HBIOS (Hardware Drivers) + + HBIOS (Hardware Drivers) + + Sheet.39 + + + + Sheet.40 + + + + Sheet.43 + Z80 CPU Address Space + + Z80 CPU Address Space + + Sheet.41 + Banked Lower 32K + + Banked Lower 32K + + Sheet.42 + Fixed Upper 32K + + Fixed Upper 32K + + Sheet.1 + $10000 + + + $10000 + + Sheet.4 + $0000 + + + $0000 + + Bracket + + + + Sheet.45 + Bank 0 + + Bank 0 + + Sheet.47 + App/OS Banks + + App/OS Banks + + Sheet.48 + Bank N-1 + + Bank N-1 + + Sheet.49 + Bank N + + Bank N + + Sheet.50 + • • • + + • • • + + Bracket.51 + + + + Sheet.55 + + + + Sheet.56 + Physical RAM (32K per bank) + + Physical RAM (32K per bank) + + Bracket.57 + ` + + + ` + + Sheet.58 + + + + 3D stack top + RAM Disk + + Sheet.61 + + + + Sheet.62 + + + + Sheet.63 + + + + RAM Disk + + + Pointer (1-D) + + + + Pointer (1-D).65 + + + + Pointer (1-D).66 + + + + Pointer (1-D).67 + + + + Sheet.70 + + + + Sheet.68 + HBIOS Function Call w/ Bank Switch + + HBIOS Function Call w/ Bank Switch + + Sheet.69 + RomWBW Bank Switched Memory Layout + + RomWBW Bank Switched Memory Layout + + Sheet.59 + + + + Sheet.52 + Fixed Mapping of Upper 32K to Last Bank + + Fixed Mapping of Upper 32K to Last Bank + + Sheet.72 + + + + Sheet.74 + + + + diff --git a/Source/Doc/Graphics/BankSwitchedMemory.vsd b/Source/Doc/Graphics/BankSwitchedMemory.vsd index 36dedadf..636558d2 100644 Binary files a/Source/Doc/Graphics/BankSwitchedMemory.vsd and b/Source/Doc/Graphics/BankSwitchedMemory.vsd differ diff --git a/Source/Doc/Graphics/CharacterEmulationVideoServices.pdf b/Source/Doc/Graphics/CharacterEmulationVideoServices.pdf index fadac746..3c763700 100644 Binary files a/Source/Doc/Graphics/CharacterEmulationVideoServices.pdf and b/Source/Doc/Graphics/CharacterEmulationVideoServices.pdf differ diff --git a/Source/Doc/Graphics/CharacterEmulationVideoServices.png b/Source/Doc/Graphics/CharacterEmulationVideoServices.png index 4ccb3cc8..f6621411 100644 Binary files a/Source/Doc/Graphics/CharacterEmulationVideoServices.png and b/Source/Doc/Graphics/CharacterEmulationVideoServices.png differ diff --git a/Source/Doc/Graphics/CharacterEmulationVideoServices.svg b/Source/Doc/Graphics/CharacterEmulationVideoServices.svg new file mode 100644 index 00000000..6632a956 --- /dev/null +++ b/Source/Doc/Graphics/CharacterEmulationVideoServices.svg @@ -0,0 +1,830 @@ + + + + + + + + + + + + + + + + Page-1 + + Sheet.81 + + + + Sheet.80 + + + + Sheet.1 + Character I/O Services + + Character I/O Services + + Sheet.2 + + + + Sheet.8 + + + + Sheet.9 + Emulation Services + + Emulation Services + + Sheet.10 + TTY + + TTY + + Sheet.11 + ANSI + + ANSI + + Sheet.12 + + + + Sheet.13 + + + + Sheet.14 + Video Display Adapter Services + + Video Display Adapter Services + + Sheet.18 + + + + Sheet.27 + UART + + UART + + Sheet.34 + ASCI + + ASCI + + Terminal.20 + + Sheet.36 + + + + Sheet.37 + + + + Sheet.38 + + + + Sheet.39 + + + + + Sheet.40 + CVDU + + CVDU + + Sheet.41 + + + + Sheet.47 + UPD7220 + + UPD7220 + + Sheet.54 + N8 + + N8 + + Sheet.56 + CIOXXX + + CIOXXX + + Sheet.57 + VDAXXX + + VDAXXX + + Sheet.58 + Operating System / Utilities + + Operating System / Utilities + + Sheet.59 + Others... + + Others... + + Sheet.60 + + + + Sheet.61 + + + + Sheet.62 + EMUXXX + + EMUXXX + + Sheet.15 + + + + Terminal.16 + + Sheet.42 + + + + Sheet.43 + + + + Sheet.44 + + + + Sheet.45 + + + + + Sheet.46 + + + + Terminal.48 + + Sheet.49 + + + + Sheet.50 + + + + Sheet.51 + + + + Sheet.52 + + + + + Sheet.53 + + + + Terminal.22 + + Sheet.23 + + + + Sheet.24 + + + + Sheet.25 + + + + Sheet.26 + + + + + Sheet.28 + + + + Terminal.29 + + Sheet.30 + + + + Sheet.31 + + + + Sheet.32 + + + + Sheet.33 + + + + + Sheet.35 + + + + Sheet.55 + RS-232 + + RS-232 + + Sheet.63 + RS-232 + + RS-232 + + Sheet.64 + VGA + + VGA + + Sheet.65 + VGA + + VGA + + Sheet.66 + NTSC + + NTSC + + Sheet.67 + UART + + UART + + Sheet.68 + ASCI + + ASCI + + Sheet.69 + VDU + + VDU + + Sheet.74 + SY6545 + + SY6545 + + Sheet.75 + MC8563 + + MC8563 + + Sheet.76 + uPD7220 + + uPD7220 + + Sheet.79 + Character / Emulation / Video Services + + Character / Emulation / Video Services + + Sheet.82 + HBIOS + + HBIOS + + Sheet.83 + HARDWARE + + HARDWARE + + Sheet.84 + TMS9918 + + TMS9918 + + Terminal.87 + + Sheet.88 + + + + Sheet.89 + + + + Sheet.90 + + + + Sheet.91 + + + + + Sheet.92 + VDU + + VDU + + Sheet.93 + + + + Sheet.94 + NTSC + + NTSC + + Sheet.96 + + + + Sheet.7 + + + + Sheet.17 + + + + Sheet.3 + + + + Sheet.4 + + + + diff --git a/Source/Doc/Graphics/CharacterEmulationVideoServices.vsd b/Source/Doc/Graphics/CharacterEmulationVideoServices.vsd index 9f01ad06..8f752b79 100644 Binary files a/Source/Doc/Graphics/CharacterEmulationVideoServices.vsd and b/Source/Doc/Graphics/CharacterEmulationVideoServices.vsd differ diff --git a/Source/Doc/Graphics/Hard Disk Anatomy.vsd b/Source/Doc/Graphics/Hard Disk Anatomy.vsd index e335b109..a9c89c08 100644 Binary files a/Source/Doc/Graphics/Hard Disk Anatomy.vsd and b/Source/Doc/Graphics/Hard Disk Anatomy.vsd differ diff --git a/Source/Doc/Graphics/Logo.pdf b/Source/Doc/Graphics/Logo.pdf index 0921f91a..f7fedf9c 100644 Binary files a/Source/Doc/Graphics/Logo.pdf and b/Source/Doc/Graphics/Logo.pdf differ diff --git a/Source/Doc/Graphics/Logo.png b/Source/Doc/Graphics/Logo.png index 3d43ff31..6832b2a8 100644 Binary files a/Source/Doc/Graphics/Logo.png and b/Source/Doc/Graphics/Logo.png differ diff --git a/Source/Doc/Graphics/Logo.svg b/Source/Doc/Graphics/Logo.svg index da51b423..586d6f1f 100644 --- a/Source/Doc/Graphics/Logo.svg +++ b/Source/Doc/Graphics/Logo.svg @@ -1,15 +1,9 @@ - + - - - - - - + width="3.76042in" height="1.26042in" viewBox="0 0 270.75 90.75" xml:space="preserve" color-interpolation-filters="sRGB" + class="st3"> - + Page-1 - - + Sheet.34 - + - + Sheet.35 - + - + Sheet.36 - + - + Sheet.38 - + - + Sheet.39 - + - + Sheet.44 - + - + Sheet.48 - + - + Sheet.49 - + - + Sheet.50 - + - + Sheet.52 - + - + Sheet.53 - + diff --git a/Source/Doc/Graphics/WBW.vsdx b/Source/Doc/Graphics/Logo.vsdx similarity index 100% rename from Source/Doc/Graphics/WBW.vsdx rename to Source/Doc/Graphics/Logo.vsdx diff --git a/Source/Doc/Graphics/Panel.pdf b/Source/Doc/Graphics/Panel.pdf index 2ec8d559..49604071 100644 Binary files a/Source/Doc/Graphics/Panel.pdf and b/Source/Doc/Graphics/Panel.pdf differ diff --git a/Source/Doc/Graphics/Panel.png b/Source/Doc/Graphics/Panel.png index 488d258f..5bb28b12 100644 Binary files a/Source/Doc/Graphics/Panel.png and b/Source/Doc/Graphics/Panel.png differ diff --git a/Source/Doc/Graphics/Panel.svg b/Source/Doc/Graphics/Panel.svg new file mode 100644 index 00000000..ca83e5d7 --- /dev/null +++ b/Source/Doc/Graphics/Panel.svg @@ -0,0 +1,369 @@ + + + + + + + + Page-1 + + Sheet.1 + + + + Sheet.2 + + + + Sheet.3 + + + + Sheet.8 + + + + Sheet.9 + + + + Sheet.10 + + + + Sheet.11 + + + + Sheet.12 + + + + Sheet.13 + + + + Sheet.14 + + + + Sheet.18 + + + + Sheet.19 + + + + Sheet.20 + + + + Sheet.21 + + + + Sheet.22 + + + + Sheet.23 + + + + Sheet.24 + + + + Sheet.25 + + + + Sheet.26 + + + + Sheet.27 + + + + Sheet.28 + + + + Sheet.29 + + + + Sheet.30 + + + + Sheet.31 + + + + Sheet.32 + + + + Sheet.33 + + + + Sheet.34 + + + + Sheet.35 + 8 + + 8 + + Sheet.36 + 4 + + 4 + + Sheet.37 + 2 + + 2 + + Sheet.38 + 1 + + 1 + + Sheet.39 + High + + High + + Sheet.40 + + + + Sheet.41 + + + + Sheet.42 + + + + Sheet.43 + 8 + + 8 + + Sheet.44 + 4 + + 4 + + Sheet.45 + 2 + + 2 + + Sheet.46 + 1 + + 1 + + Sheet.47 + Low + + Low + + Sheet.48 + 7 + + 7 + + Sheet.49 + 6 + + 6 + + Sheet.50 + 5 + + 5 + + Sheet.52 + 4 + + 4 + + Sheet.53 + 3 + + 3 + + Sheet.54 + 2 + + 2 + + Sheet.55 + 1 + + 1 + + Sheet.56 + 0 + + 0 + + Sheet.57 + + + + Sheet.58 + Auto + + Auto + + Sheet.59 + Menu + + Menu + + Sheet.61 + + + + Sheet.62 + CRT + + CRT + + Sheet.63 + Serial + + Serial + + Sheet.64 + + + + Sheet.65 + Sec + + Sec + + Sheet.66 + Pri + + Pri + + Sheet.67 + + + + Sheet.68 + Disk + + Disk + + Sheet.69 + ROM + + ROM + + Sheet.70 + + + + Sheet.71 + Floppy + + Floppy + + Sheet.72 + Hard + + Hard + + Sheet.73 + + + + Sheet.74 + 4 + + 4 + + Sheet.75 + 2 + + 2 + + Sheet.76 + 1 + + 1 + + Sheet.78 + ROM App / Boot Slice + + ROM App / Boot Slice + + Sheet.79 + ROM Apps: 0=Monitor 1=BASIC 2=Forth 3=Game 4=CP/M 2.2 5=Z-Sys... + + ROM Apps: 0=Monitor 1=BASIC 2=Forth 3=Game 4=CP/M 2.2 5=Z-System 6=Net Boot 7=User + + Sheet.80 + + + + Sheet.81 + + + + Sheet.82 + + + + Sheet.84 + Console + + Console + + Sheet.85 + + + + Sheet.86 + + + + Sheet.87 + + + + Sheet.88 + Boot + + Boot + + diff --git a/Source/Doc/Graphics/hd1k.pdf b/Source/Doc/Graphics/hd1k.pdf new file mode 100644 index 00000000..1bd7dd83 Binary files /dev/null and b/Source/Doc/Graphics/hd1k.pdf differ diff --git a/Source/Doc/Graphics/hd1k.png b/Source/Doc/Graphics/hd1k.png new file mode 100644 index 00000000..2b66b260 Binary files /dev/null and b/Source/Doc/Graphics/hd1k.png differ diff --git a/Source/Doc/Graphics/hd1k.svg b/Source/Doc/Graphics/hd1k.svg new file mode 100644 index 00000000..2581bfe1 --- /dev/null +++ b/Source/Doc/Graphics/hd1k.svg @@ -0,0 +1,1088 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + + + Sheet.95 + 0 + + + + 0 + + Sheet.101 + 1 + + + + 1 + + Sheet.102 + 2 + + + + 2 + + Sheet.103 + 3 + + + + 3 + + Sheet.105 + . . . + + + + . . . + + Sheet.104 + N + + + + N + + Sheet.201 + + + + Sheet.69 + RomWBW Hard Disk Anatomy (Modern / hd1k) + + + + RomWBW Hard Disk Anatomy (Modern / hd1k) + + Sheet.106 + RomWBW Hard Disk (IDE/ATA/ATAPI/CF/SD/USB) + + + + RomWBW Hard Disk (IDE/ATA/ATAPI/CF/SD/USB) + + Sheet.107 + FAT Partition + + + + FAT Partition + + Sheet.119 + Sector 0 + + + + Sector 0 + + Sheet.120 + + + + Sheet.121 + + + + Sheet.122 + Type 2E + + + + Type 2E + + Sheet.123 + Type 06 + + + + Type 06 + + Sheet.124 + + + + Sheet.125 + + + + Sheet.126 + Partition Table + + + + Partition Table + + Sheet.131 + + + + Bracket.132 + + + + + + + Sheet.135 + + + + Sheet.139 + CP/M System Area (16 KB) + + + + CP/M System Area (16 KB) + + Sheet.141 + + + + Sheet.142 + + + + Sheet.143 + + + + Sheet.144 + + + + Sheet.165 + + + + Sheet.166 + + + + Sheet.167 + + + + Sheet.168 + + + + Stack pointer.179 + + + + + + + Sheet.202 + RomWBW Partition (8MB * N) + + + + RomWBW Partition (8MB * N) + + Sheet.205 + Prefix (1 MB typical) + + + + Prefix (1 MB typical) + + Dynamic connector + + + + Dynamic connector.207 + + + + Sheet.118 + MBR + + + + MBR + + Sheet.208 + + + + Sheet.128 + Slice (8 MB) + + + + Slice (8 MB) + + Bracket.146 + + + + + + + Sheet.581 + + + + Sheet.582 + CP/M File System (8,176 KB) + + + + CP/M File System (8,176 KB) + + Sheet.583 + + + + Sheet.590 + + + + Bracket.301 + + + + + + + Bracket.592 + + + + + + + diff --git a/Source/Doc/Graphics/hd512.pdf b/Source/Doc/Graphics/hd512.pdf new file mode 100644 index 00000000..30fed811 Binary files /dev/null and b/Source/Doc/Graphics/hd512.pdf differ diff --git a/Source/Doc/Graphics/hd512.png b/Source/Doc/Graphics/hd512.png new file mode 100644 index 00000000..63fdfdeb Binary files /dev/null and b/Source/Doc/Graphics/hd512.png differ diff --git a/Source/Doc/Graphics/hd512.svg b/Source/Doc/Graphics/hd512.svg new file mode 100644 index 00000000..c4cfa578 --- /dev/null +++ b/Source/Doc/Graphics/hd512.svg @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + Sheet.69 + RomWBW Hard Disk Anatomy (Classic / hd512) + + RomWBW Hard Disk Anatomy (Classic / hd512) + + Sheet.259 + 0 + + 0 + + Sheet.260 + 1 + + 1 + + Sheet.261 + 2 + + 2 + + Sheet.262 + 3 + + 3 + + Sheet.263 + . . . + + . . . + + Sheet.264 + N + + N + + Sheet.265 + + + + Sheet.266 + RomWBW Hard Disk (IDE/ATA/ATAPI/CF/SD/USB) + + RomWBW Hard Disk (IDE/ATA/ATAPI/CF/SD/USB) + + Sheet.267 + FAT Partition + + FAT Partition + + Sheet.268 + Sector 0 + + Sector 0 + + Sheet.269 + + + + Sheet.270 + + + + Sheet.271 + Type 06 + + Type 06 + + Sheet.272 + + + + Sheet.273 + + + + Sheet.274 + + + + Sheet.275 + Partition Table + + Partition Table + + Sheet.276 + + + + Bracket.132 + + + + Sheet.278 + + + + Sheet.279 + CP/M System Area (128 KB) + + CP/M System Area (128 KB) + + Sheet.280 + + + + Sheet.281 + + + + Sheet.282 + + + + Sheet.283 + + + + Sheet.284 + + + + Sheet.285 + + + + Sheet.286 + + + + Sheet.287 + + + + Stack pointer.179 + + + + Sheet.289 + RomWBW Data (8,320 KB * N) + + RomWBW Data (8,320 KB * N) + + Dynamic connector.207 + + + + Sheet.294 + MBR + + MBR + + Sheet.295 + + + + Sheet.296 + Slice (8,320 KB) + + Slice (8,320 KB) + + Sheet.298 + + + + Sheet.299 + CP/M File System (8 MB) + + CP/M File System (8 MB) + + Sheet.300 + + + + Bracket.301 + + + + Bracket.302 + + + + diff --git a/Source/Doc/Makefile b/Source/Doc/Makefile index 11e4c600..04c8df4a 100644 --- a/Source/Doc/Makefile +++ b/Source/Doc/Makefile @@ -1,13 +1,19 @@ # -# NOTE: gpp, Pandoc, and Latex (MiKTeX or TexLive) must be installed +# NOTE: gpp, Pandoc, LuaLatex (MiKTeX or TexLive), and Roboto Font must be installed # and available on commandline for this build to work!!! -# Typically "sudo apt install gpp pandoc texlive-latex-extra texlive-luatex texlive-fonts-extra fonts-roboto" # -OBJECTS = ReadMe.gfm ReadMe.txt UserGuide.pdf SystemGuide.pdf Applications.pdf ROM_Applications.pdf Catalog.pdf Errata.pdf +# On MacOS: +# brew install gpp pandoc texlive +# brew install --cask font-roboto +# +# On Ubuntu Linux: +# apt install gpp pandoc texlive texlive-luatex texlive-fonts-extra +# +OBJECTS = ReadMe.gfm ReadMe.txt UserGuide.pdf SystemGuide.pdf Applications.pdf Catalog.pdf Errata.pdf # DEST = ../../Doc TOOLS = ../../Tools OTHERS = *.tmp - + include $(TOOLS)/Makefile.inc all :: deploy @@ -36,6 +42,5 @@ deploy : cp UserGuide.pdf "../../Doc/RomWBW User Guide.pdf" cp SystemGuide.pdf "../../Doc/RomWBW System Guide.pdf" cp Applications.pdf "../../Doc/RomWBW Applications.pdf" - cp ROM_Applications.pdf "../../Doc/RomWBW ROM Applications.pdf" cp Catalog.pdf "../../Doc/RomWBW Disk Catalog.pdf" - cp Errata.pdf "../../Doc/RomWBW Errata.pdf" + cp Errata.pdf "../../Doc/RomWBW Errata.pdf" diff --git a/Source/Doc/ROM_Applications.md b/Source/Doc/ROM_Applications.md deleted file mode 100644 index cfb8ae5f..00000000 --- a/Source/Doc/ROM_Applications.md +++ /dev/null @@ -1,635 +0,0 @@ -$define{doc_title}{ROM Applications}$ -$define{doc_author}{Phillip Summers}$ -$define{doc_authmail}{}$ -$include{"Book.h"}$ - -# Summary - -RomWBW includes a small selection of built in utilities and -programming languages. - -`\clearpage`{=latex} - -# RomWBW Monitor - -The Monitor program is a low level utility that can be used -for testing and programming. It allows programs to be entered, -memory to be examined, and input/output devices to be read or -written to. - -It's key advantage is that is available at boot up. - -Its key disadvantages are that code cannot be entered in assembly -language and there is no ability to save to memory devices. - -The available memory area for programming is `0200-EDFFh`. -The following areas are reserved: - -Memory Area | Function -------------|----------------------------------- -`0000-00FFh`| Jump and restart (RST) vectors -`0100-01FFh`| HBIOS configuration block -`EE00-FDFFh`| MONITOR -`FE00-FFFFh`| HBIOS proxy - -Commands can be entered at the command prompt `>` -Automatic case conversion takes place on command entry and all -arguments are expected to be in hex format. - -The current memory bank in low memory is displayed before the prompt i.e.: - -`8E>` - -The Monitor allows access to all memory locations but ROM and -Flash memory cannot be written to. Memory outside the normal -address range can be accessed using the B command. The first -256 bytes `0000-01FF` is critical for the HBIOS operation. -Changing banks may make this information inaccessible. - -Refer to the RomWBW Architecture manual for details memory banking. - -A quick guide to using the Monitor program follows: - -## ? - Displays a summary of available commands. - -``` -Monitor Commands (all values in hex): -B - Boot system -D xxxx [yyyy] - Dump memory from xxxx to yyyy -F xxxx yyyy zz - Fill memory from xxxx to yyyy with zz -H - Halt system -I xxxx - Input from port xxxx -K - Keyboard echo -L - Load Intel hex data -M xxxx yyyy zzzz - Move memory block xxxx-yyyy to zzzz -O xxxx yy - Output value yy to port xxxx -P xxxx - Program RAM at address xxxx -R xxxx [[yy] [zzzz]] - Run code at address xxxx - Pass yy and zzzz to register A and BC -T xxxx - X-modem transfer to memory location xxxx -S xx - Set bank to xx -X - Exit monitor -``` - -## Cold Boot - -B - Performs a cold boot of the ROMWBW system. A complete -re-initialization of the system is performed and the system -returns to the Boot Loader prompt. - -## Dump Memory - -D xxxx [yyyy] - Dump memory from hex location xxxx to yyyy -on the screen as lines of 16 hexadecimal bytes with their -ASCII equivalents (if within a set range, else a '.' is -printed). If the end address is omitted then 256 bytes is -displayed. - -A good tool to see where code is located, check -for version id, obtain details for chip configurations and -execution paths. - -Examples: `D 100 1FF` - -``` -0100: 10 0B 01 5A 33 45 4E 56 01 00 00 2A 06 00 F9 11 ...Z3ENV...*..ù. -0110: DE 38 37 ED 52 4D 44 0B 6B 62 13 36 00 ED B0 21 Þ87íRMD.kb.6.í°! -0120: 7D 32 E5 21 80 00 4E 23 06 00 09 36 00 21 81 00 }2å!..N#...6.!.. -0130: E5 CD 6C 1F C1 C1 E5 2A C9 8C E5 CD 45 05 E5 CD åÍl.ÁÁå*É.åÍE.åÍ -0140: 59 1F C3 00 00 C3 AE 01 C3 51 04 C3 4C 02 C3 57 Y.Ã..î.ÃQ.ÃL.ÃW -0150: 02 C3 64 02 C3 75 02 C3 88 02 C3 B2 03 C3 0D 04 .Ãd.Ãu.Ã..ò.Ã.. -0160: C3 19 04 C3 22 04 C3 2A 04 C3 35 04 C3 40 04 C3 Ã..Ã".Ã*.Ã5.Ã@.à -0170: 48 04 C3 50 04 C3 50 04 C3 50 04 C3 8F 02 C3 93 H.ÃP.ÃP.ÃP.Ã..Ã. -0180: 02 C3 94 02 C3 95 02 C3 85 04 C3 C7 04 C3 D1 01 .Ã..Ã..Ã..ÃÇ.ÃÑ. -0190: C3 48 02 C3 E7 04 C3 56 03 C3 D0 01 C3 D0 01 C3 ÃH.Ãç.ÃV.ÃÐ.ÃÐ.à -01A0: D0 01 C3 D0 01 C3 D0 01 C3 D0 01 01 02 01 CD 6B Ð.ÃÐ.ÃÐ.ÃÐ....Ík -01B0: 04 54 68 69 73 20 66 75 6E 63 74 69 6F 6E 20 6E .This function n -01C0: 6F 74 20 73 75 70 70 6F 72 74 65 64 2E 0D 0A 00 ot supported.... -01D0: C9 3E FF 32 3C 00 3A 5D 00 FE 20 28 14 D6 30 32 É>ÿ2<.:].þ (.Ö02 -01E0: AB 01 32 AD 01 3A 5E 00 FE 20 28 05 D6 30 32 AC «.2­.:^.þ (.Ö02¬ -01F0: 01 C5 01 F0 F8 CF E5 26 00 0E 0A CD 39 02 7D 3C .Å.ðøÏå&...Í9.}< -``` - -## Fill Memory - -F xxxx yyyy zz - Fill memory from hex xxxx to yyyy with -a single value of zz over the full range. The Dump command -can be used to confirm that the fill completed as expected. A -good way to zero out memory areas before writing machine data -for debug purposes. - -## Halt System - -H - Halt system. A Z80 HALT instruction is executed. The -system remains in the halt state until the system is -physically rebooted. Interrupts will not restart the -system. On systems that support a HALT status LED, the -LED will be illuminated. - -## Input from port - -I xxxx - Input data from port xxxx and display to the screen. -This command is used to read values from hardware I/O ports -and display the contents in hexadecimal. - -## Keyboard Echo - -K - Echo any key-presses from the terminal. Press 'ESC' key -to quit. This facility provides that any key stroke sent to -the computer will be echoed back to the terminal. File down -loads will be echoed as well while this facility is ‘on’. - -## Load Hex format file into memory - -L - Load a Intel Hex format file via the terminal program. -The load address is defined in the hex file of the -assembled code. - -The terminal emulator program should be configured to -give a delay at the end of each line to allow the monitor -enough time to parse the line and move the data to memory. - -Keep in mind that this will be a transient unless the -system support battery backed memory. Saving to memory drive -is not supported. - -## Move memory - -M xxxx yyyy zzzz - Move hex memory block xxxx to yyyy to -memory starting at hex location zzzz. Care should be taken -to insure that there is enough memory at the destination so -that code does not get over-written or memory wrapped around. - -## Output to port - -O xxxx yy - Output data byte xx to port xxxx. This command is -used to send hexadecimal values to hardware I/O ports to -verify their operation and is the companion to the I operation. -Use clip leaded LEDs to confirm the data written. - -## Program memory location - -P xxxx - Program memory location xxxx. This routine will -allow you to program a hexadecimal value 'into memory starting -at location xxxx. Press 'Enter' on a blank line to -return to the Monitor prompt. - -The limitation around programming memory is that it must be -entered in hexadecimal. An alternative is to use the L command -to load a program that has been assembled to a hex file on the -remote computer. - -An excellent online resource for looking up opcodes for entry -can be found here: [https://clrhome.org/table](https://clrhome.org/table) - -## Run program - -R xxxx [[yy] [zzzz]] - Run program at location xxxx. If optional -arguments yy and zzzz are entered they are loaded into the -A and BC register respectively. The return address of the -Monitor is saved on the stack so the program can return -to the monitor. On return to the monitor, the contents of -the A, HL, DE and BC registers are displayed. - -## Set bank - -S xx - Change the bank in memory to xx. Memory addresses -0000-7FFF (i.e. bottom 32k) are affected. Because the -interrupt vectors are stored in the bottom page of this -range, this function is disable when interrupt mode 1 is -being used (IM1). Interrupt mode 2 is not affected as the -associated jump vectors are stored in high memory. - -Changing the bank also impacts the restart vectors (RST), -so executing code that call the HBIOS using the RST 08 -assembly code will not work. - -The monitor stack resides in high memory and is not affected -but any code that changes the stack to low memory will be -affected. - -### Bank codes and descriptions - -TYPE | DESCRIPTION |BANK| DETAILS ------|--------------------|----|--------------------- -RAM | COMMON BANK | 9F | 1024K RAM SYSTEM -RAM | USER BANK | 9E | 1024K RAM SYSTEM -RAM | BIOS BANK | 9D | 1024K RAM SYSTEM -RAM | AUX BANK | 9C | 1024K RAM SYSTEM -RAM | OS BUFFERS END | 9B | 1024K RAM SYSTEM -RAM | OS BUFFERS START | 98 | 1024K RAM SYSTEM -RAM | RAM DRIVE END | 97 | 1024K RAM SYSTEM -RAM | COMMON BANK | 8F | 512K RAM SYSTEM -RAM | USER BANK | 8E | 512K RAM SYSTEM -RAM | BIOS BANK | 8D | 512K RAM SYSTEM -RAM | AUX BANK | 8C | 512K RAM SYSTEM -RAM | OS BUFFERS | 8B | 512K RAM SYSTEM -RAM | OS BUFFERS | 8A | 512K RAM SYSTEM -RAM | OS BUFFERS | 89 | 512K RAM SYSTEM -RAM | OS BUFFERS | 88 | 512K RAM SYSTEM -RAM | RAM DRIVE END | 87 | 512K RAM SYSTEM -RAM | RAM DRIVE START | 80 | -ROM | BOOT BANK | 00 | COLD START & HBIOS -ROM | LOADER & IMAGES | 01 | MONITOR, FORTH -ROM | ROM IMAGES CONTD. | 02 | BASIC, ETC -ROM | FAT FILESYSTEM | 03 | UNA ONLY, ELSE UNUSED -ROM | ROM DRIVE START | 04 | -ROM | ROM DRIVE END | 0F | 512K ROM SYSTEM -ROM | ROM DRIVE END | 1F | 1024K ROM SYSTEM - -## X-modem transfer - -T xxxx - Receive an X-modem file transfer and load it into -memory starting at location xxxx. - -128 byte blocks and checksum mode is the only supported -protocol. - -If the monitor is assembled with the DSKY functionality, -this feature will be exclude due to space limitations. - - -## NOTES: - -The RTC utility on the CP/M ROM disk provides facilities -to manipulate the Real Time Clock non-volatile Memory. -Use the C or Z option from the Boot Loader to load CP/M -and then run RTC to see the options list. - -# FORTH - -CamelForth is the version of Forth included as part of the boot -ROM in ROMWBW. It has been converted from the Z80 CP/M version -published here [www.camelforth.com/page.php?5](www.camelforth.com/page.php?5). The author is Brad -Rodriguez who is a prolific Forth enthusiast, whose work can be -found here: [www.bradrodriguez/papers/index.html](www.bradrodriguez/papers/index.html) - -For those are who are not familiar with Forth, I recommend the -wikipedia article [en.wikipedia.org/wiki/Forth_(programming_language](en.wikipedia.org/wiki/Forth_(programming_language)) -and the Forth Interest Group website [www.forth.org](www.forth.org) - -## Important things to know - -Forth is case sensitive. - -To exit back to the boot loader type ***bye*** - -To get a list of available words type ***WORDS*** - -To reset Forth to its initial state type ***COLD*** - -Most of the code you find on the internet will not run unless modified or additional Forth -words are added to the dictionary. - -This implementation does not support loading or saving of programs. All programs -need to be typed in. Additionally, screen editing and code blocks are not supported. - -## Structure of Forth source files - -File | Description ---------------|----------------------------- -camel80.azm | Code Primitives - camel80d.azm | CPU Dependencies - camel80h.azm | High Level words - camel80r.azm | ROMWBW additions -glosshi.txt | Glossary of high level words -glosslo.txt | Glossary of low level words -glossr.txt | Glossary of ROMWBW additions - -## ROMWBW Additions - -Extensions and changes to this implementation compared to the original distribution are: - -The source code has been converted from Z80mr assembler to Hector Peraza's zsm. - -An additional file camel80r.azm has been added for including additional words to -the dictionary at build time. However, as currently configured there is very little space -allocated for addition words. Exceeding the allocated ROM space will generate an error -message when building. - -James Bowman's double precision words have been added from his RC2014 version: -[https://github.com/jamesbowman/camelforth-z80](https://github.com/jamesbowman/camelforth-z80) - -Word | Syntax | Description ---------|----------------------------|--------------------------------- -D+ | d1 d2 -- d1+d2 | Add double numbers -2>R | d -- | 2 to R -2R> | d -- | fetch 2 from R -M*/ | d1 n2 u3 -- d=(d1*n2)/u3 | double precision mult. div -SVC | hl de bc n -- hl de bc af | Execute a ROMWBW function -P! | n p -- | Write a byte to a I/O port -P@ | p -- n | Read a byte from and I/O port - -# BASIC - -For those who are not familiar with BASIC, it stands for Beginners All purpose Symbolic -Instruction Code. - -ROMWBW contains two versions of ROM BASIC, a full implementation and a "tiny" BASIC. - -The full implementation is a version of Microsoft BASIC from the NASCOM Computer. - -A comprehensive instruction manual is available in the Doc\\Contrib directory. - -## ROMWBW specific features - -- Sound -- Graphics -- Terminal Support - -## ROMWBW unsupported features - -- This ROM-hosted implementation does not support cassette or disk - access for loading and saving programs. - -# TastyBASIC - -TastyBASIC offers a minimal implementation of BASIC that is only 2304 bytes in size. -It originates from Li-Chen Wang's Palo Alto Tiny BASIC from around 1976. It's small size suited the tiny memory capacities of the time. This implementation is by Dimitri Theulings and his -original source can be found here [https://github.com/dimitrit/tastybasic](https://github.com/dimitrit/tastybasic) - -## Features / Limitations - -- This ROM-hosted implementation does not support disk access for - loading and saving programs. -- Integer arithmetic, numbers -32767 to 32767 -- Singles letter variables A-Z -- 1-dimensional array support -- Strings are not supported - -## Direct Commands - -- `LIST`,`RUN`, `NEW`, `CLEAR`, `BYE` - -## Statements - -- `LET`, `IF`, `GOTO`, `GOSUB RETURN`, `REM`, `FOR TO NEXT STEP`, `INPUT`, `PRINT`, `POKE`, `END` - -## Functions - -- `PEEK`, `RND`, `ABS`, `USR`, `SIZE` - -## Operators - -- `>=`, `#`, `>`, `=`, `<=`, `<` - -- Operator precedence is supported. - -Type ***BYE*** to return to the monitor. - -# Play a Game - -## 2048 - -2048 is a puzzle game that can be both mindless and challenging. It -appears deceptively simple but failure can creep up on you suddenly. - -It requires an ANSI/VT-100 compatible colour terminal to play. - -2048 is like a sliding puzzle game except the puzzle tiles are -numbers instead of pictures. Instead of moving a single tile all -tiles are moved simultaneously in the same direction. Where two -tiles of the same number collide, they are reduced to one tile with -the combined value. After every move a new tile is added with -a starting value of 2. - -The goal is to create a tile of 2048 before all tile locations are -occupied. Reaching the highest points score, which is the sum of all -the tiles is a secondary goal. The game will automatically end when -there are no more possible moves. - -Play consists of entering a direction to move. Directions can be entered -using any of three different keyboard direction sets. - -``` -Direction | Keys -----------|---------- -Up | w ^E 8 -Down | s ^X 2 -Left | a ^S 4 -Right | d ^D 6 -``` -The puzzle board is a 4x4 grid. At start, the grid will be populated -with two 2 tiles. An example game sequence is shown below with new -tiles to the game shown in brackets. - -``` -Start Move 1 - Up Move 2 - Left Move 3 - Left -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| | | |(2)| | | | | 4 | | 4 | | | | | 4 | | | | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| | | | | | | | | | | | | |(4)| | 4 | | | | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| | | |(2)| | | | | | | | | | | | | | | | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| | | | | | | |(2)| | | 2 | | | | | 2 | |(2)| | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ - -Move 4 - Left Move 5 - Up Move 6 - Right Move 7 - Up -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| 4 | | | | | 8 | | | 4 | | | | 8 | 4 | | | | 8 | 8 | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| 4 | | |(4)| | 4 | | | | | | | | 4 | | | | | 2 | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| | | | | | | | | | | | | | | | | | | | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -| 4 | | | | |(2)| | | | |(2)| | | 2 | |(2)| | | | -+---+---+---+---+ +---+---+---+---+ +---+---+---+---+ +---+---+---+---+ -``` -This is how I lost this game: -``` -+---+---+---+---+ -| 4 | 2 | 16| 4 | -+---+---+---+---+ -| 32| 64| 8 | 2 | -+---+---+---+---+ -| 4 | 8 |128| 32| -+---+---+---+---+ -|(2)| 16| 8 | 4 | -+---+---+---+---+ -``` -Press Q at any time to bring up the option to Quit or Restart the game. - -# Network Boot - -# Xmodem Flash Updater - -The ROMWBW Xmodem flash updater provides the capability to update ROMWBW from the boot loader using an x-modem file transfer. It offers similar capabilities to Will Sowerbutts FLASH4 utility except that the flashing process occurs during the file transfer. - -These are the key differences between the two methods are: - -Xmodem Flash Updater | FLASH4 ---------------------------------|----------------- -Available from the boot loader | Well proven and tested -Xmodem transfer is integrated | Wider range of supported chips and hardware -Integrated checksum utilities | Wider range of supported platforms -Capability to copy a ROM image | Only reprograms sectors that have changed -More convenient one step process | Ability save and verify ROM images -No intermediate storage required | Progress display while flashing -. | Displays chip identification information -. | Faster file transfer - -The major disadvantages of the Updater is that it is new and relatively untested. There is the risk that a failed transfer will result in a partially flashed and unbootable ROM. There are some limitations on serial transfer speeds. - -The updater utility was initially intended to support the Retrobrew SBC-V2-005 platform using Atmel 39SF040 flash chips but has now been extended to be more generic in operation. - -Supported flash chips are -39SF040, 29F040, AT49F040, AT29C040, M29F040 , MX29F040, A29010B, A29040B - -The Atmel 39SF040 chip is recommended as it can erase and write 4Kb sectors. Other chips require the whole chip to be erased. - -## Usage - -In most cases, completing a ROM update is a simple as: - -1. Booting to the boot loader prompt -2. Selecting option X - Xmodem Flash Updater -3. Selecting option U - Update -4. Initiating an X-modem transfer of your ROM image on your console device -5. Selecting option R - Reboot - -If your console device is not able to transfer a ROM image i.e. your console is a VDU then you will have to use the console options to identify which character-input/output device is to be used as the serial device for transfer. - -When your console is the serial device used for the transfer, no progress information is displayed as this would disrupt the x-modem file transfer. If you use an alternate character-input/output devices as the serial device for the transfer then progress information will be displayed on the console device. - -Due to different platform processor speeds, serials speeds and flow control capabilities the default console or serial device speed may need to be reduced for a successful transfer and flash to occur. The **Set Console Interface/Baud code** option at the Boot Loader can be used to change the speed if required. Additionally, the Updater has options to set to and revert from a recommended speed. - -See the ROMWBW Applications guide for additional information on performing upgrades. - -## Console Options - -Option ( C ) - Set Console Device - -Option ( S ) - Set Serial Device - -By default the updater assumes that the current console is a serial device and that the ROM file to be flashed will also be transferred across this device, so the Console and Serial device are both the same. - -Either device can be can be change to another character-input/output device but the updater will always expect to receive the x-modem transfer on the **Serial Device** - -The advantage of transferring on a different device to the console is that progress information can be displayed during the transfer. - -Option ( > ) - Set Recommended Baud Rate - -Option ( < ) - Revert to Original Baud Rate - -## Programming options - -Option ( U ) - Begin Update - -The will begin the update process. The updater will expect to start receiving -an x-modem file on the serial device unit. - -X-modem sends the file in packets of 128 bytes. The updater will cache 32 -packets which is 1 flash sector and then write that sector to the -flash device. - -If using separate console, bank and sector progress information will shown - -``` -BANK 00 s00 s01 s02 s03 s04 s05 s06 s06 s07 -BANK 01 s00 s01 s02 s03 s04 s05 s06 s06 s07 -BANK 02 s00 s01 s02 s03 s04 s05 s06 s06 s07 etc -``` - -The x-modem file transfer protocol does not provide any filename or size -information for the transfer so the updater does not perform any checks -on the file suitability. - -The updater expects the file size to be a multiple of 4 kilobytes and -will write all data received to the flash device. A system update -file (128kb .img) or complete ROM can be received and written (512kb or -1024kb .rom) - -If the update fails it is recommended that you retry before rebooting or -exiting to the Boot loader as your machine may not be bootable. - -Option ( D ) - Duplicate flash #1 to flash #2 - -This option will make a copy of flash #1 onto flash #2. The purpose of this is to enable - making a backup copy of the current flash. Intended for systems using 2x512Kb Flash devices. - -Option ( V ) - Toggle Write Verify - -By default each flash sector will be verified after being written. Slight -performance improvements can be gained if turned off and could be used if -you are experiencing reliable transfers and flashing. - -## Exit options - -Option ( R ) - Reboot - -Execute a cold reboot. This should be done after a successful update. If -you perform a cold reboot after a failed update then it is likely that -your system will be unusable and removing and reprogramming the flash -will be required. - -Option ( Q ) - Quit to boot loader. - -The SBC Boot Loader is reloaded from ROM and -executed. After a successful update a Reboot should be performed. However, -in the case of a failed update this option could be used to attempt to -load CP/M and perform the normal x-modem / flash process to recover. - -## CRC Utility options - -Option ( 1 ) and ( 2 ) - Calculate and display CRC32 of 1st or 2nd 512k ROM. -Option ( 3 ) - Calculate and display CRC32 of a 1024k (2x512Kb) ROM. - -Can be used to verify if a ROM image has been transferred and flashed correctly. Refer to the Teraterm section below for details on configuring the automatic display of a files CRC after it has been transferred. - -In Windows, right clicking on a file should also give you a context menu option CRC SHA which will allow you to select a CRC32 calculation to be done on the selected file. - -## Tera Term macro configuration - -Macros are a useful tool for automatic common tasks. There are a number of instances where using macros to facilitate the update process could be worthwhile if you are: - -* Following the ROMWBW development builds. -* Doing lots of configuration changes. -* Doing development on ROMWBW drivers - -Macros can be used to automate sending ROM updates or images and for my own purposed I have set up a separate macro for transferring each of the standard build ROM, my own custom configuration ROM and update ROM. - -An example macro file to send an *.upd file, using checksum mode and display the crc32 value of the transmitted file: - -``` -Xmodem send, checksum, display crc32 -xmodemsend '\\desktop\users\phillip\documents\github\romwbw\binary\sbc_std_cust.upd' 1 -crc32file crc '\\desktop\users\phillip\documents\github\romwbw\binary\sbc_std_cust.rom' -sprintf '0x%08x' crc -messagebox inputstr 'crc32' -``` - -## Serial speed guidelines - -As identified in the introduction, there are limitations on serial speed depending on processor speed and flow control settings. Listed below are some of the results identified during testing. - -Platform / Configuration | Processor Speed | Maximum Serial Speed --------------------------------|-----------------|--------------------- -SBC-V2 UART no flow control | 2mhz | 9600 -SBC-V2 UART no flow control | 4mhz | 19200 -SBC-V2 UART no flow control | 5mhz | 19200 -SBC-V2 UART no flow control | 8mhz | 38400 -SBC-V2 UART no flow control | 10mhz | 38400 -SBC-V2 USB-FIFO 2mhz+ | | n/a -SBC-MK4 ASCI no flow control | 18.432mhz | 9600 -SBC-MK4 ASCI with flow control | 18.432mhz | 38400 - -The **Set Recommend Baud Rate** option in the Updater menu follows the following guidelines. - -Processor Speed | Baud Rate -----------------|---------- -1Mhz | 4800 -2-3Mhz | 9600 -4-7Mhz | 19200 -8-20Mhz | 38400 - -These can be customized in the updater.asm source code in the CLKTBL table if desired. -Feedback to the ROMWBW developers on these guidelines would be appreciated. - -## Notes: -- All testing was done with Teraterm x-modem, Forcing checksum mode using macros was found to give the most reliable transfer. -- Partial writes can be completed with 39SF040 chips. Other chips require entire flash to be erased before being written. -- An SBC V2-005 MegaFlash or Z80 MBC required for 1mb flash support. The Updater assumes both chips are same type -- Failure handling has not been tested. -- Timing broadly calibrated on a Z80 SBC-v2 -- UNA BIOS not supported diff --git a/Source/Doc/ReadMe.md b/Source/Doc/ReadMe.md index 61783118..bf0c97da 100644 --- a/Source/Doc/ReadMe.md +++ b/Source/Doc/ReadMe.md @@ -114,7 +114,6 @@ Documentation for $doc_product$ includes: * $doc_user$ * $doc_sys$ * $doc_apps$ -* $doc_romapps$ * $doc_errata$ # Acknowledgments @@ -177,8 +176,8 @@ please let me know if I missed you! * Tasty Basic is a product of Dimitri Theulings. -* Dean Netherton contributed the sound driver interface and - the SN76489 sound driver. +* Dean Netherton contributed eZ80 CPU support, the sound driver + interface, and the SN76489 sound driver. * The RomWBW Disk Catalog document was produced by Mykl Orders. @@ -188,7 +187,11 @@ please let me know if I missed you! compendium. * Martin R has provided substantial help reviewing and improving the - User Guide. + User Guide and Applications documents. + +* Mark Pruden has also contributed a great deal of content to the + Disk Catalog, User Guide as well as contributing the disk image + for the Z3PLUS operating system, and the COPYSL utility. * Jacques Pelletier has contributed the DS1501 RTC driver code. diff --git a/Source/Doc/RomWBW Disk Layouts.xlsx b/Source/Doc/RomWBW Disk Layouts.xlsx new file mode 100644 index 00000000..ccfebb5f Binary files /dev/null and b/Source/Doc/RomWBW Disk Layouts.xlsx differ diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index c9cdb2ea..4f995772 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -126,6 +126,274 @@ execution. ![Bank Switched Memory Layout](Graphics/BankSwitchedMemory){ width=100% } + +## Bank Id + +RomWBW utilizes a specific assignment of memory banks for dedicated +purposes. A numeric Bank Id is used to refer to the memory banks. The +Bank Id is a single byte. In general, the Bank Id simply refers to each +of the 32K banks in sequential order. In other words, Bank Id 0 is the +first physical 32K, Bank Id 1 is the second, etc. However, the high +order bit of the Bank Id has a special meaning. If it is 0, it indicates +a ROM bank is being referred to. If it is 1, it indicates a RAM bank +is being referred to. + +For example, let's say we have a typical system with 512KB of ROM and +512KB of RAM. The Bank Ids would look like this: + +| Physical Memory | Type | Physical Bank | Bank Id | +|-------------------|------|---------------|-----------| +| 0x000000-0x007FFF | ROM | 0 | 0x00 | +| 0x008000-0x00FFFF | ROM | 1 | 0x01 | +| 0x010000-0x07FFFF | ROM | 2-15 | 0x02-0x0F | +| 0x080000-0x087FFF | RAM | 16 | 0x80 | +| 0x088000-0x08FFFF | RAM | 17 | 0x81 | +| 0x090000-0x0FFFFF | RAM | 18-31 | 0x82-0x8F | + +Note that Bank Id 0x00 is **always** the first bank of ROM and 0x80 is +**always** the first bank of RAM. If there were more banks of physical ROM, +they would be assigned Bank Ids starting with 0x10. Likewise, additional +bank of physical RAM would be assigned Bank Ids starting with 0x90. + +The Bank Id is used in all RomWBW API functions when referring to +the mapping of banks to the lower 32K bank area of the processor. In +this way, all RomWBW functions can refer to a generic Bank Id without +needing to understand how a specific hardware platform accesses the +physical memory areas. A single routine within the HBIOS is implemented +for each memory manager that maps Bank Ids to physical memory. + +## Bank Assignments + +RomWBW requires dedicated banks of memory for specific purposes. It +uses Bank Ids via an algorithm to make these assignments. The following +table describes the way the banks are assigned. The Typical column +shows the specific values that would be assigned for a common system +with 512KB of ROM and 512KB of RAM (nROM=16, nRAM=16). + +| Bank Id | Identity | Typical | Purpose | +|-------------------|-----------|---------|------------------------------------------| +| 0x00 |BID_BOOT | 0x00 | Boot Bank (HBIOS image) | +| 0x01 |BID_IMG0 | 0x01 | Boot Loader, Monitor, ROM OSes, ROM Apps | +| 0x02 |BID_IMG1 | 0x02 | ROM Apps | +| 0x03 |BID_IMG2 | 0x03 | \ | +| 0x04 |BID_ROMD0 | 0x04 | First ROM Disk Bank | +| nROM - 1 | | 0x0F | Last ROM Disk Bank | +| 0x80 |BID_BIOS | 0x80 | HBIOS (working copy) | +| 0x81 |BID_RAMD0 | 0x81 | First RAM Disk Bank | +| 0x80 + nRAM - 8 | | 0x88 | Last RAM Disk Bank | +| 0x80 + nRAM - 7 |BID_APP0 | 0x89 | First Application Bank | +| 0x80 + nRAM - 5 | | 0x8B | Last Application Bank | +| 0x80 + nRAM - 4 |BID_BUF | 0x8C | OS Disk Buffers | +| 0x80 + nRAM - 3 |BID_AUX | 0x8D | OS Code Bank | +| 0x80 + nRAM - 2 |BID_USR | 0x8E | User Bank (CP/M TPA) | +| 0x80 + nRAM - 1 |BID_COM | 0x8F | Common Bank | + +In this table, nROM and nRAM refer to the number of corresponding +ROM and RAM banks in the the system. + +The contents of the banks referred to above are described in more detail +below: + +Boot Bank: + +: The Boot Bank receives control when a system is first powered +on. It contains a ROM (read-only) copy of the HBIOS. At boot, it does +minimal hardware initialization, then copies itself to the HBIOS bank +in RAM, then resumes execution from the RAM bank. + +Boot Loader: + +: The application that handles loading of ROM or Disk based applications +including operating systems. It copies itself to a RAM bank at the +start of it's execution. + +Monitor: + +: The application that implements the basic system monitor functions. +It copies itself to a RAM bank at the start of it's execution. + +ROM OSes: + +: Code images of CP/M 2.2 and Z-System which are copied to RAM and +executed when a ROM-based operating system is selected in the Boot +Loader. + +ROM Applications: + +: Various ROM-based application images such as BASIC, FORTH, etc. They +can be selected in the Boot Loader. The Boot Loader will copy the +application image to a RAM bank, then transfer control to it. + +ROM Disk: + +: A sequential series of banks assigned to provide the system ROM Disk +contents. + +HBIOS: + +: This bank hosts the running copy of the RomWBW HBIOS. + +RAM Disk: + +: A sequential series of banks assigned to provide the system RAM Disk. + +Application Bank: + +: A sequential series of banks that are available for use by applications +that wish to utilize banked memory. + +OS Disk Buffers: + +: This bank is used by CP/M 3 and ZPM3 for disk buffer storage. + +OS Code Bank: + +: This bank is used by CP/M 3 and ZPM3 as an alternate bank for code. +This allows these operating systems to make additional TPA space +available for applications. + +User Bank: + +: This is the default bank for applications to use. This includes the +traditional TPA space for CP/M. + +Common Bank: + +: This bank is mapped to the upper 32K of the processors memory space. +It is a fixed mapping that is never changed in normal RomWBW operation +hence the name "Common". + +# Disk Layout + +RomWBW supports two hard disk layouts: the Classic layout used by +RomWBW with 512 directory entries per slice and a Modern layout with +1024 directory entries per slice. These layouts are referred to as +hd512 and hd1k respectively. + +WARNING: You **can not** mix the two hard disk layouts on one hard +disk device. You can use different layouts on different hard disk +devices in a single system though. + +RomWBW determines which of the hard disk layouts to use for a given +hard disk device based on whether there is a RomWBW hard disk +partition on the disk containing the slices. If there is no RomWBW +partition, then RomWBW will assume the 512 directory entry format for +all slices and will assume the slices start at the first sector of +the hard disk. If there is a RomWBW partition on the hard disk +device, then RomWBW will assume the 1024 directory entry format for +all slices and will assume the slices are located in the defined +partition. + +RomWBW supports up to 256 CP/M slices (0-255). Under hd512, the slices +begin at the start of the hard disk. Under hd1k, the slices reside +within partition type 0x2E. + +RomWBW accesses all hard disks using Logical Block Addressing (pure +sector offset). When necessary, RomWBW simulates the following disk +geometry for operating systems: + +- Sector = 512 Bytes +- Track = 16 Sectors (8KB per Track) +- Cylinder = 16 Tracks (256 Sectors per Cylinder, 128KB per Cylinder) + +If one is used, the FAT Partition must not overlap the CP/M slices. +The FAT partition does not need to start immediately after the CP/M +slices nor does it need to extend to the end of the hard disk. Its +location and size are entirely determined by its corresponding +partition table entry. + +Drive letters in CP/M are ASSIGNed to the numbered slices as desired. +At boot, RomWBW automatically assigns up to 8 slices to drive letters +starting with the first available drive letter (typically C:). + +Microsoft Windows will assign a single drive letter to the FAT partition +when the CF/SD Card is inserted. The drive letter assigned has no +relationship to the CP/M drive letters assigned to CP/M slices. + +In general, Windows, MacOS, or Linux know nothing about the CP/M slices +and CP/M knows nothing about the FAT partition. However, the FAT +application can be run under CP/M to access the FAT partition +programmatically. + +A CP/M slice is (re)initialized using the CP/M command CLRDIR. A CP/M +slice can be made bootable by copying system image to the System Area +using SYSCOPY. + +The FAT partition can be created from CP/M using the FDISK80 application. + +The FAT partition can be initialized using the FAT application from CP/M +using the command `FAT FORMAT n:` where n is the RomWBW disk unit +number containing the FAT partition to be formatted. + +## Modern Disk Layout (hd1k) + +![Modern Disk Layout](Graphics/hd1k) + +The CP/M filesystem on a Modern disk will accommodate 1,024 directory +entries. + +The CP/M slices reside entirely within a hard disk partition of type +0x2E. The number of slices is determined by the number of slices that +fit within the partition spaces allocated up to the maximum of 256. + +## Classic Disk Layout (hd512) + +![Classic Disk Layout](Graphics/hd512) + +The CP/M filesystem on a Classic disk will accommodate 512 directory +entries. + +The CP/M slices reside on the hard disk starting at the first sector +of the hard disk. The number of CP/M slices is not explicitly recorded +anywhere on the hard disk. It is up to the system user to know how +many slices are being used based on the size of the hard disk media +and/or the start of a FAT partition. + +A partition table may exist within the first sector of the first +slice. For Classic disks, the partition table defines only the +location and size of the FAT partition. The Partition Table does +not control the location or number of CP/M slices in any way. + +The Partition Table resides in a sector that is shared with the System +Area of CP/M Slice 0. However, the RomWBW implementation of CP/M takes +steps to avoid changing or corrupting the Partition Table area. + +The FAT partition can be created from CP/M using the FDISK80 +application. The user is responsible for ensuring that the start of the +FAT partition does not overlap with the area they intend to use for +CP/M slices. FDISK80 has a Reserve option to assist with this. + +## Mapping to Media ID + +HBIOS has a definition of "Media ID", which defines the type and physical +properties of disk media provided by an underlying storage device. For a +complete list of Media ID's please see the following section + +[Disk Input/Output (DIO)] + +There are two important Media ID's relating to Hard Disk Layouts: + +| **Media** | **ID** | **Format / Meaning** | +|------------|-------:|-------------------------------------------------------------| +| MID_HD | 4 | Classic Disk Layout (hd512) *--and--* HBIOS Hard Disk Drive | +| MID_HDNEW | 10 | Modern Disk Layout (hd1k) | + +HBIOS typically does not understand the format of data on a device, +instead just treating all hard disks as raw sectors. `MID_HD` is the typical +Media ID used by HBIOS to describe high capaity hard disk media + +When the Modern Disk Layout was added, the `MID_HDNEW`, was added to +differentiate (at the oerating system level) between the Classic and Modern layouts. + +However HBIOS itself typically does NOT make this distinction, since the use +of these two formats is determined by the operating system based on the +partition table on the media. +There are two important HBIOS functions that deal with Media ID. + +* [Function 0x18 -- Disk Media (DIOMEDIA)] + +* [Function 0xE0 -- Calculate Slice (EXTSLICE)] + # System Boot Process A multi-phase boot strategy is employed. This is necessary because at @@ -393,23 +661,24 @@ All character units are assigned a Device Type ID which indicates the specific hardware device driver that handles the unit. The table below enumerates these values. -| **Device Type** | **ID** | **Description** | **Driver** | -|-----------------|-------:|------------------------------------------|------------| -| CIODEV_UART | 0x00 | 16C550 Family Serial Interface | uart.asm | -| CIODEV_ASCI | 0x01 | Z180 Built-in Serial Ports | asci.asm | -| CIODEV_TERM | 0x02 | Terminal | ansi.asm | -| CIODEV_PRPCON | 0x03 | PropIO Serial Console Interface | prp.asm | -| CIODEV_PPPCON | 0x04 | ParPortProp Serial Console Interface | ppp.asm | -| CIODEV_SIO | 0x05 | Zilog Serial Port Interface | sio.asm | -| CIODEV_ACIA | 0x06 | MC68B50 Asynchronous Interface | acia.asm | -| CIODEV_PIO | 0x07 | Zilog Parallel Interface Controller | pio.asm | -| CIODEV_UF | 0x08 | FT232H-based ECB USB FIFO | uf.asm | -| CIODEV_DUART | 0x09 | SCC2681 Family Dual UART | duart.asm | -| CIODEV_Z2U | 0x0A | Zilog Z280 Built-in Serial Ports | z2u.asm | -| CIODEV_LPT | 0x0B | Parallel I/O Controller | lpt.asm | -| CIODEV_ESPCON | 0x0B | ESP32 VGA Console | esp.asm | -| CIODEV_ESPSER | 0x0B | ESP32 Serial Port | esp.asm | -| CIODEV_SCON | 0x0B | S100 Console | scon.asm | +| **Device Type** | **ID** | **Description** | **Driver** | +|-----------------|-------:|------------------------------------------|--------------| +| CIODEV_UART | 0x00 | 16C550 Family Serial Interface | uart.asm | +| CIODEV_ASCI | 0x01 | Z180 Built-in Serial Ports | asci.asm | +| CIODEV_TERM | 0x02 | Terminal | ansi.asm | +| CIODEV_PRPCON | 0x03 | PropIO Serial Console Interface | prp.asm | +| CIODEV_PPPCON | 0x04 | ParPortProp Serial Console Interface | ppp.asm | +| CIODEV_SIO | 0x05 | Zilog Serial Port Interface | sio.asm | +| CIODEV_ACIA | 0x06 | MC68B50 Asynchronous Interface | acia.asm | +| CIODEV_PIO | 0x07 | Zilog Parallel Interface Controller | pio.asm | +| CIODEV_UF | 0x08 | FT232H-based ECB USB FIFO | uf.asm | +| CIODEV_DUART | 0x09 | SCC2681 Family Dual UART | duart.asm | +| CIODEV_Z2U | 0x0A | Zilog Z280 Built-in Serial Ports | z2u.asm | +| CIODEV_LPT | 0x0B | Parallel I/O Controller | lpt.asm | +| CIODEV_ESPCON | 0x0B | ESP32 VGA Console | esp.asm | +| CIODEV_ESPSER | 0x0B | ESP32 Serial Port | esp.asm | +| CIODEV_SCON | 0x0B | S100 Console | scon.asm | +| CIODEV_EZ80UART | 0x11 | eZ80 Built-in UART0 Interface | ez80uart.asm | Character devices can usually be configured with line characteristics such as speed, framing, etc. A word value (16 bit) is used to describe @@ -602,20 +871,24 @@ more of the defined media types. | MID_MDROM | 1 | ROM Drive | | MID_MDRAM | 2 | RAM Drive | | MID_RF | 3 | RAM Floppy (LBA) | -| MID_HD512 | 4 | Hard Disk (LBA) w/ 512 directory entries | +| MID_HD | 4 | Hard Disk (LBA) w/ 512 directory entries | | MID_FD720 | 5 | 3.5" 720K Floppy | | MID_FD144 | 6 | 3.5" 1.44M Floppy | | MID_FD360 | 7 | 5.25" 360K Floppy | | MID_FD120 | 8 | 5.25" 1.2M Floppy | | MID_FD111 | 9 | 8" 1.11M Floppy | -| MID_HD1K | 10 | Hard Disk (LBA) w/ 1024 directory entries | +| MID_HDNEW | 10 | Hard Disk (LBA) w/ 1024 directory entries | + +**NOTE**: HBIOS typically does not actually differentiate between MID_HD and +MID_HDNEW, it will generally only use MID_HD. +See the section [Mapping to Media ID] for information on this. HBIOS supports both Cylinder/Head/Sector (CHS) and Logical Block Addresses (CHS) when locating a sector for I/O (see DIOSEEK function). For devices that are natively CHS (e.g., floppy disk), the HBIOS driver can convert LBA values to CHS values according to the geometry of the current media. For devices that are natively LBA (e.g., hard disk), the - HBIOS driver simulates CHS using a fictitious geometry provided by the +HBIOS driver simulates CHS using a fictitious geometry provided by the driver (typically 16 sectors per track and 16 heads per cylinder). ### Function 0x10 -- Disk Status (DIOSTATUS) @@ -828,6 +1101,13 @@ Report the Media ID (E) for the for media in the specified Disk Unit will be performed. The Status (A) is a standard HBIOS result code. If there is no media in device, function will return an error status. +**NOTE**: This function will always return MID_HD for hard disk +devices. See the section [Mapping to Media ID] for information on this. +To determine if an HD1K formatted partition exists on the hard disk +please see the following function. + +[Function 0xE0 -- Calculate Slice (EXTSLICE)] + ### Function 0x19 -- Disk Define Media (DIODEFMED) | **Entry Parameters** | **Returned Values** | @@ -861,7 +1141,7 @@ DIOMEDIA function to force this if desired. | **Entry Parameters** | **Returned Values** | |----------------------------------------|----------------------------------------| | B: 0x1B | A: Status | -| C: Disk Unit | D: Heads | +| C: Disk Unit | D: Heads / LBA | | | E: Sectors | | | HL: Cylinder Count | | | BC: Block Size | @@ -871,7 +1151,11 @@ device uses LBA mode addressing natively, then the drivers simulated geometry will be returned. The Status (A) is a standard HBIOS result code. If the media is unknown, an error will be returned. -Heads (D) refers to the number of heads per cylinder. Sectors (E) +LBA capability is indicated by D:7. When set, the device is capable +of LBA addressing. Refer to [Function 0x12 -- Disk Seek (DIOSEEK)] +for more information on specifying LBA vs. CHS addresses. + +Heads (D:6-0) refers to the number of heads per cylinder. Sectors (E) refers to the number of sectors per track. Cylinder Count (HL) is the total number of cylinders addressable for the media. Block Size (BC) is the number of bytes in one sector. @@ -888,14 +1172,15 @@ more than one at a time. The RTC unit is assigned a Device Type ID which indicates the specific hardware device driver that handles the unit. The table below enumerates these values. -| **Device Type** | **ID** | **Description** | **Driver** | -|-----------------|-------:|------------------------------------------|------------| -| RTCDEV_DS | 0x00 | Maxim DS1302 Real-Time Clock w/ NVRAM | dsrtc.asm | -| RTCDEV_BQ | 0x01 | BQ4845P Real Time Clock | bqrtc.asm | -| RTCDEV_SIMH | 0x02 | SIMH Simulator Real-Time Clock | simrtc.asm | -| RTCDEV_INT | 0x03 | Interrupt-based Real Time Clock | intrtc.asm | -| RTCDEV_DS7 | 0x04 | Maxim DS1307 PCF I2C RTC w/ NVRAM | ds7rtc.asm | -| RTCDEV_RP5 | 0x05 | Ricoh RPC01A Real-Time Clock w/ NVRAM | rp5rtc.asm | +| **Device Type** | **ID** | **Description** | **Driver** | +|-----------------|-------:|------------------------------------------|-------------| +| RTCDEV_DS | 0x00 | Maxim DS1302 Real-Time Clock w/ NVRAM | dsrtc.asm | +| RTCDEV_BQ | 0x01 | BQ4845P Real Time Clock | bqrtc.asm | +| RTCDEV_SIMH | 0x02 | SIMH Simulator Real-Time Clock | simrtc.asm | +| RTCDEV_INT | 0x03 | Interrupt-based Real Time Clock | intrtc.asm | +| RTCDEV_DS7 | 0x04 | Maxim DS1307 PCF I2C RTC w/ NVRAM | ds7rtc.asm | +| RTCDEV_RP5 | 0x05 | Ricoh RPC01A Real-Time Clock w/ NVRAM | rp5rtc.asm | +| RTCDEV_EZ80 | 0x07 | eZ80 on-chip RTC | ez80rtc.asm | The time functions to get and set the time (RTCGTM and RTCSTM) require a 6 byte date/time buffer in the following format. Each byte is BCD @@ -1024,35 +1309,22 @@ used. ## Display Keypad (DSKY) -The Display Keypad functions provide read/write access to a segment -style display and associated hex keypad. - -HBIOS only supports a single DSKY device since there is no reason to have -more than one at a time. The DSKY unit is assigned a Device Type ID -which indicates the specific hardware device driver that handles the -unit. The table below enumerates these values. - -| **Device Type** | **ID** | **Description** | **Driver** | -|-----------------|-------:|------------------------------------------|------------| -| DSKYDEV_ICM | 0x01 | Original ICM7218 based DSKY | icm.asm | -| DSKYDEV_PKD | 0x02 | Next Gen Intel P8279 based DSKY | pkd.asm | +The Display Keypad functions provide access to a segment or LCD +style display and associated optional keypad -When segment display function encodes the display data in a byte per -character format. Currently, all segment displays are exactly -8 charadcters and this is assumed in API calls. The encoding of each -byte is as shown below: +HBIOS only supports a single DSKY device since there is no reason to +have more than one at a time. If the system contains multiple DSKY +devices, only the first device discovered will be used. The DSKY unit +is assigned a Device Type ID which indicates the specific hardware +device driver that handles the unit. The table below enumerates these +values. -``` - +---01---+ - | | - 20 02 - | | - +---40---+ - | | - 10 04 - | | - +---08---+ 80 -``` +| **Device Type** | **ID** | **Description** | **Driver** | +|--------------------|-------:|---------------------------------------|------------| +| DSKYDEV_ICM | 0x01 | Original ICM7218 based DSKY | icm.asm | +| DSKYDEV_PKD | 0x02 | Next Gen Intel P8279 based DSKY | pkd.asm | +| DSKYDEV_GM7303 | 0x03 | GM7303 LCD Display + Keypad | gm7303.asm | +| DSKYDEV_LCD | 0x04 | HD44780-based LCD Display | lcd.asm | The keypad keys are identified by the following key ids. Not all keypads will contain all keys. @@ -1138,10 +1410,21 @@ The Status (A) is a standard HBIOS result code. | HL: Buffer Address | | Display the segment-encoded values on the segment display. The encoding -is defined at the start of this section. The entire displa is updated -and it is assumed that an 8 character buffer will be pointed to by HL. -The buffer must reside in high memory. -The Status (A) is a standard HBIOS result code. +uses a small alphabet as defined below. The actual representation of a +character is determined by the driver. The entire display is updated +and it is assumed that an 8 character buffer will be pointed to by HL. +The buffer must reside in high memory. The Status (A) is a standard +HBIOS result code. + +| | | | | +|---------------|---------------|---------------|---------------| +| 0x00: '0' | 0x01: '1' | 0x02: '2' | 0x03: '3' | +| 0x04: '4' | 0x05: '5' | 0x06: '6' | 0x07: '7' | +| 0x08: '8' | 0x09: '9' | 0x0A: 'A' | 0x0B: 'B' | +| 0x0C: 'C' | 0x0D: 'D' | 0x0E: 'E' | 0x0F: 'F' | +| 0x10: ' ' | 0x11: '-' | 0x12: '.' | 0x13: 'p' | +| 0x14: 'o' | 0x15: 'r' | 0x16: 't' | 0x17: 'A' | +| 0x18: 'd' | 0x19: 'r' | 0x1A: 'G' | | ### Function 0x35 -- DSKY Keypad LEDs (DSKYKEYLEDS) @@ -1154,9 +1437,8 @@ Light the LEDs for the keypad keys according to the bitmap contained in the buffer pointed to by HL. The buffer must be located in high memory and is assumed to be 8 bytes. -At this time, the bitmap is specific to the PKD hardware. -This function is ignored by the ICM hardware. -The Status (A) is a standard HBIOS result code. +At this time, the bitmap is specific to the PKD hardware and will be +ignored by all other hardware. ### Function 0x36 -- DSKY Status LED (DSKYSTATLED) @@ -1170,8 +1452,8 @@ Set or clear the status LED specified in D. The state of the LED is contained in E. If E=0, the LED will be turned off. If E=1, the LED will be turned on. -This function is specific to the PKD hardware. It will be ignored -by the ICM hardware. +This function is specific to the PKD hardware and will be ignored +by all other hardware. The Status (A) is a standard HBIOS result code. ### Function 0x37 -- DSKY Beep (DSKYBEEP) @@ -1212,6 +1494,29 @@ servicing the specified unit. Both of these values are considered driver specific. Refer to the associated hardware driver for the values used. +### Function 0x39 -- DSKY Device (DSKYMESSAGE) + +| **Entry Parameters** | **Returned Values** | +|----------------------------------------|----------------------------------------| +| B: 0x39 | A: Status | +| C: Message ID | | + +Instructs the display to show a textual representation of the associated +message on the display. The IDs are defined in std.asm. + +### Function 0x3A -- DSKY Device (DSKYEVENT) + +| **Entry Parameters** | **Returned Values** | +|----------------------------------------|----------------------------------------| +| B: 0x3A | A: Status | +| C: Event ID | | + +Instructs the display to update itself in response to an internal +HBIOS state change. At this time the the events are: + +0: CPU Speed Change \ +1: Disk Activity + `\clearpage`{=latex} ## Video Display Adapter (VDA) @@ -1879,7 +2184,7 @@ sound will play for the duration defined in HL and then return. | **Entry Parameters** | **Returned Values** | |----------------------------------------|----------------------------------------| | B: 0x57 | A: Status | -| C: Disk Unit | C: Device Attributes | +| C: Sound Unit | C: Device Attributes | | | D: Device Type | | | E: Device Number | | | H: Device Unit Mode | @@ -1902,6 +2207,62 @@ is servicing the specified unit. Both of these values are considered driver specific. Refer to the associated hardware driver for the values used. +### Function 0x58 -- Sound Beep (SNDBEEP) + +| **Entry Parameters** | **Returned Values** | +|----------------------------------------|----------------------------------------| +| B: 0x58 | A: Status | +| C: Sound Unit | | + +Play a beep tone on the specified Sound Unit (C). The beep will +normally be about 1/3 second in duration and the tone will be +approximately B5. + +`\clearpage`{=latex} + +## Extension (EXT) + +Helper (extension) functions that are not a core part of a BIOS. + +### Function 0xE0 -- Calculate Slice (EXTSLICE) + +| **Entry Parameters** | **Returned Values** | +|----------------------------------------|----------------------------------------| +| B: 0xE0 | A: Status | +| D: Disk Unit | B: Device Attributes | +| E: Slice | C: Media ID | +| | DEHL: Sector Address | + +Report the Media ID (C), and Device Attributes (B) for the for media in the +specified Disk Unit (D), and for hard disks the absolute Sector offset to the +start of the Slice (E). The Status (A) is a standard HBIOS result code. + +This function extends upon [Function 0x18 -- Disk Media (DIOMEDIA)] for hard +disk media by scanning for a partition to determine if the disk uses HD512 +or HD1K, correctly reporting MID_HD or MID_HDNEW respectively. +See the folowing for some background [Mapping to Media ID] + +It will also return the sector number of the first sector in the +slice if the slice number is valid. If the slice number is invalid +(it wont fix on the media) an error will be returned. + +The slice calculation is performed by considering the partition start +(if it exists), the size of a slice for the given format type, and ensuring +that the slice fits within the media or partition size, taking into +consideration other partitions that may exist. + +The Device Attributes (B) are the same as defined in +[Function 0x17 -- Disk Device (DIODEVICE)] + +If the Unit specified is not a hard disk the Media ID will be returned and +the slice parameter ignored. If there is no media in device, or the slice +number is invaid (Parameter Out Of Range) the function will return an error status. + +**NOTE: +This function was placed in HBIOS to be shared between the diffeent CP/M +varients supported by RomWBW. It is not strictly a BIOS function, +and may be moved in future. + `\clearpage`{=latex} ## System (SYS) @@ -1948,7 +2309,7 @@ The Version (DE)number is encoded as BCD where the 4 digits are: [Major Version][Minor Version][Patch Level][Build Number] -So, for example, a Version (L) number of 0x3102 would indicate +So, for example, a Version (DE) number of 0x3102 would indicate version 3.1.0, build 2. The hardware Platform (L) is identified as follows: @@ -1972,6 +2333,7 @@ The hardware Platform (L) is identified as follows: | PLT_Z80RETRO |15 | Z80 RETRO COMPUTER | | PLT_S100 |16 | S100 COMPUTERS Z180 | | PLT_DUO |17 | DUODYNE Z80 SYSTEM | +| PLT_RCEZ80 |24 | RCBUS W/ eZ80 | ### Function 0xF2 -- System Set Bank (SYSSETBNK) @@ -2262,6 +2624,9 @@ a double-word binary value. The frequency of the system timer in Hertz is returned in Frequency (C). The returned Status (A) is a standard HBIOS result code. +The tick count is a 32 bit binary value. It will rollover to zero +if the maximum value for a 32 bit number is reached. + Note that not all hardware configuration have a system timer. You can determine if a timer exists by calling this function repeatedly to see if it is incrementing. @@ -2272,14 +2637,19 @@ to see if it is incrementing. |----------------------------------------|----------------------------------------| | B: 0xF8 | A: Status | | C: 0xD1 | DEHL: Seconds Count | -| | C: Ticks per Second | +| | C: Remainder Ticks | -Return the a Seconds Count (DEHL) with the number of seconds that have +Return the Seconds Count (DEHL) with the number of seconds that have elapsed since the system was started. This is a double-word binary -value. Additionally, the number of Ticks per Second (C) is returned. -The returned Status (A) is a standard HBIOS result code. +value. Additionally, Remainder Ticks (C) is returned and contains the number +of ticks that have elapsed within the current second. + +Note that Remainder Ticks (C) will have a value from 0 to 49 since there are +50 ticks per second. So, Remainder Ticks does not represent a fraction of the +current second. Remainder Ticks (C) can be doubled to derive the hundredths of +milliseconds elapsed within the current second. -This availability of the Seconds Count (DEHL) is dependent on having a +The availability of the Seconds Count (DEHL) is dependent on having a system timer active. If the hardware configuration has no system timer, then Seconds Count (DEHL) will not increment. @@ -2915,7 +3285,7 @@ The following section outlines the read only data referenced by the | CMDREG | 5 | 1 | IO PORT ADDRESS FOR MODE 1 | | | | | _Below are the register mirror values_ | | | | | _that HBIOS used for initialisation_ | -| REG. 0 | 6 | 1 | $00 - NO EXTERNAL VID +| REG. 0 | 6 | 1 | $00 - NO EXTERNAL VID | | REG. 1 | 7 | 1 | $50 or $70 - SET MODE 1 and interrupt if enabled | | REG. 2 | 8 | 1 | $00 - PATTERN NAME TABLE := 0 | | REG. 3 | 9 | 1 | $00 - NO COLOR TABLE | diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 04ba281f..c2882d31 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -11,11 +11,8 @@ companion documents you should refer to as appropriate: of RomWBW. It includes a reference for the RomWBW HBIOS API functions. -* $doc_romapps$ is a reference for the ROM-hosted applications provided - with RomWBW including the monitor, programming languages, etc. - -* $doc_apps$ is a reference for the OS-hosted proprietary command - line applications that were created to enhance RomWBW. +* $doc_apps$ is a reference for the ROM-hosted and OS-hosted applications + created or customized to enhance the operation of RomWBW. * $doc_catalog$ is a reference for the contents of the disk images provided with RomWBW. It is somewhat out of date at this time. @@ -225,45 +222,48 @@ by RomWBW along with the standard pre-built ROM image(s). RomWBW does allow for the creation of ROM images with custom configurations. This is discussed in [Customizing RomWBW]. -| **Description** | **Bus** | **ROM Image File** | **Baud Rate** | -|----------------------------------------------------------------|---------|-----------------------|--------------:| -| [RetroBrew Z80 SBC]^1^ | ECB | SBC_std.rom | 38400 | -| [RetroBrew Z80 SimH]^1^ | - | SBC_simh.rom | 38400 | -| [RetroBrew N8 Z180 SBC]^1^ (date code >= 2312) | ECB | N8_std.rom | 38400 | -| [Zeta Z80 SBC]^2^, ParPortProp | - | ZETA_std.rom | 38400 | -| [Zeta V2 Z80 SBC]^2^, ParPortProp | - | ZETA2_std.rom | 38400 | -| [Mark IV Z180 SBC]^3^ | ECB | MK4_std.rom | 38400 | -| [RCBus Z80 CPU Module]^4^, 512K RAM/ROM | RCBus | RCZ80_std.rom | 115200 | -| [RCBus Z80 CPU Module]^4^, 512K RAM/ROM, KIO | RCBus | RCZ80_kio.rom | 115200 | -| [RCBus Z180 CPU Module]^4^ w/ external banking | RCBus | RCZ180_ext.rom | 115200 | -| [RCBus Z180 CPU Module]^4^ w/ native banking | RCBus | RCZ180_nat.rom | 115200 | -| [RCBus Z280 CPU Module]^4^ w/ external banking | RCBus | RCZ180_ext.rom | 115200 | -| [RCBus Z280 CPU Module]^4^ w/ native banking | RCBus | RCZ180_nat.rom | 115200 | -| [Easy Z80 SBC]^2^ | RCBus | RCZ80_easy.rom | 115200 | -| [Tiny Z80 SBC]^2^ | RCBus | RCZ80_tiny.rom | 115200 | -| [Z80-512K CPU/RAM/ROM Module]^2^ | RCBus | RCZ80_skz.rom | 115200 | -| [Small Computer SC126 Z180 SBC]^5^ | BP80 | SCZ180_sc126.rom | 115200 | -| [Small Computer SC130 Z180 SBC]^5^ | RCBus | SCZ180_sc130.rom | 115200 | -| [Small Computer SC131 Z180 Pocket Computer]^5^ | - | SCZ180_sc131.rom | 115200 | -| [Small Computer SC140 Z180 CPU Module]^5^ | Z50 | SCZ180_sc140.rom | 115200 | -| [Small Computer SC503 Z180 CPU Module]^5^ | Z50 | SCZ180_sc503.rom | 115200 | -| [Small Computer SC700 Z180 CPU Module]^5^ | RCBus | SCZ180_sc700.rom | 115200 | -| [Dyno Z180 SBC]^6^ | Dyno | DYNO_std.rom | 38400 | -| [Nhyodyne Z80 MBC]^1^ | MBC | MBC_std.rom | 38400 | -| [Rhyophyre Z180 SBC]^1^ | - | RPH_std.rom | 38400 | -| [Z80 ZRC CPU Module]^7^ | RCBus | RCZ80_zrc.rom | 115200 | -| [Z80 ZRC CPU Module]^7^ ROMless | RCBus | RCZ80_zrc_ram.rom | 115200 | -| [Z80 ZRC512 CPU Module]^7^ | RCBus | RCZ80_zrc512.rom | 115200 | -| [Z180 Z1RCC CPU Module]^7^ | RCBus | RCZ180_z1rcc.rom | 115200 | -| [Z280 ZZRCC CPU Module]^7^ | RCBus | RCZ280_zzrcc.rom | 115200 | -| [Z280 ZZRCC CPU Module]^7^ ROMless | RCBus | RCZ280_zzrcc_ram.rom | 115200 | -| [Z280 ZZ80MB SBC]^7^ | RCBus | RCZ280_zz80mb.rom | 115200 | -| [Z80-Retro SBC]^8^ | - | Z80RETRO_std.rom | 38400 | -| [S100 Computers Z180]^9^ | S100 | S100_std.rom | 57600 | -| [Duodyne Z80 System]^1^ | Duo | DUO_std.rom | 38400 | -| [Heath H8 Z80 System]^10^ | H8 | HEATH_std.rom | 115200 | -| [EP Mini-ITX Z180]^11^ | RCBus? | EPITX_std.rom | 115200 | -| [NABU w/ RomWBW Option Board]^10^ | NABU | NABU_std.rom | 115200 | +| **Description** | **Bus** | **ROM Image File** | **Baud Rate** | +|-------------------------------------------------------------|---------|------------------------------|--------------:| +| [RetroBrew Z80 SBC]^1^ | ECB | SBC_std.rom | 38400 | +| [RetroBrew Z80 SimH]^1^ | - | SBC_simh.rom | 38400 | +| [RetroBrew N8 Z180 SBC]^1^ (date >= 2312) | ECB | N8_std.rom | 38400 | +| [Zeta Z80 SBC]^2^, ParPortProp | - | ZETA_std.rom | 38400 | +| [Zeta V2 Z80 SBC]^2^, ParPortProp | - | ZETA2_std.rom | 38400 | +| [Mark IV Z180 SBC]^3^ | ECB | MK4_std.rom | 38400 | +| [RCBus Z80 CPU Module]^4^, 512K RAM/ROM | RCBus | RCZ80_std.rom | 115200 | +| [RCBus Z80 CPU Module]^4^, 512K w/KIO | RCBus | RCZ80_kio_std.rom | 115200 | +| [RCBus Z180 CPU Module]^4^ w/ ext banking | RCBus | RCZ180_ext_std.rom | 115200 | +| [RCBus Z180 CPU Module]^4^ w/ native banking | RCBus | RCZ180_nat_std.rom | 115200 | +| [RCBus Z280 CPU Module]^4^ w/ ext banking | RCBus | RCZ280_ext_std.rom | 115200 | +| [RCBus Z280 CPU Module]^4^ w/ native banking | RCBus | RCZ280_nat_std.rom | 115200 | +| [RCBus eZ80 CPU Module]^13^, 512K RAM/ROM | RCBus | RCEZ80_std.rom | 115200 | +| [Easy Z80 SBC]^2^ | RCBus | RCZ80_easy_std.rom | 115200 | +| [Tiny Z80 SBC]^2^ | RCBus | RCZ80_tiny_std.rom | 115200 | +| [Z80-512K CPU/RAM/ROM Module]^2^ | RCBus | RCZ80_skz_std.rom | 115200 | +| [Small Computer SC126 Z180 SBC]^5^ | BP80 | SCZ180_sc126_std.rom | 115200 | +| [Small Computer SC130 Z180 SBC]^5^ | RCBus | SCZ180_sc130_std.rom | 115200 | +| [Small Computer SC131 Z180 Pocket Comp]^5^ | - | SCZ180_sc131_std.rom | 115200 | +| [Small Computer SC140 Z180 CPU Module]^5^ | Z50 | SCZ180_sc140_std.rom | 115200 | +| [Small Computer SC503 Z180 CPU Module]^5^ | Z50 | SCZ180_sc503_std.rom | 115200 | +| [Small Computer SC700 Z180 CPU Module]^5^ | RCBus | SCZ180_sc700_std.rom | 115200 | +| [Dyno Z180 SBC]^6^ | Dyno | DYNO_std.rom | 38400 | +| [Nhyodyne Z80 MBC]^1^ | MBC | MBC_std.rom | 38400 | +| [Rhyophyre Z180 SBC]^1^ | - | RPH_std.rom | 38400 | +| [Z80 ZRC CPU Module]^7^ | RCBus | RCZ80_zrc_std.rom | 115200 | +| [Z80 ZRC CPU Module]^7^ ROMless | RCBus | RCZ80_zrc_ram_std.rom | 115200 | +| [Z80 ZRC512 CPU Module]^7^ | RCBus | RCZ80_zrc512_std.rom | 115200 | +| [Z180 Z1RCC CPU Module]^7^ | RCBus | RCZ180_z1rcc_std.rom | 115200 | +| [Z280 ZZRCC CPU Module]^7^ | RCBus | RCZ280_zzrcc_std.rom | 115200 | +| [Z280 ZZRCC CPU Module]^7^ ROMless | RCBus | RCZ280_zzrcc_ram_std.rom | 115200 | +| [Z280 ZZ80MB SBC]^7^ | RCBus | RCZ280_zz80mb_std.rom | 115200 | +| [Z80-Retro SBC]^8^ | - | Z80RETRO_std.rom | 38400 | +| [S100 Computers Z180]^9^ | S100 | S100_std.rom | 57600 | +| [Duodyne Z80 System]^1^ | Duo | DUO_std.rom | 38400 | +| [Heath H8 Z80 System]^10^ | H8 | HEATH_std.rom | 115200 | +| [EP Mini-ITX Z180]^11^ | RCBus? | EPITX_std.rom | 115200 | +| [NABU w/ RomWBW Option Board]^10^ | NABU | NABU_std.rom | 115200 | +| [S100 FPGA Z80]^9^ | S100 | FZ80_std.rom | 9600 | +| [Genesis STD Z180]^12^ | STD | GMZ180_std.rom | 115200 | | ^1^Designed by Andrew Lynch | ^2^Designed by Sergey Kiselev @@ -276,6 +276,8 @@ is discussed in [Customizing RomWBW]. | ^9^Designed by John Monahan | ^10^Designed by Les Bird | ^11^Designed by Alan Cox +| ^12^Designed by Doug Jackson +| ^13^Designed by Dean Netherton RCBus refers to Spencer Owen's RC2014 bus specification and derivatives including RC26, RC40, RC80, and BP80. @@ -390,7 +392,7 @@ At the Boot Loader prompt, you can type `H ` for help. You can type `L ` to list the available built-in ROM applications. If your terminal supports ANSI escape sequences, you can try the 'P' command to play a simple on-screen game. Instructions for the -game are found in $doc_romapps$. +game are found in $doc_apps$. If all of this seems fine, your ROM has been successfully programmed. See the [Boot Loader Operation] section of this document for further @@ -644,7 +646,7 @@ return to the Boot Loader menu. If you are interested in creating a custom application to run here, review the "usrrom.asm" file in the Source/HBIOS folder of the distribution. -Each of the ROM Applications is documented in $doc_romapps$. Some +Each of the ROM Applications is documented in $doc_apps$. Some of the applications (such as BASIC) also have their own independent manual in the Doc directory of the distribution. The OSes included in the ROM (CP/M 2.2 & Z-System) are described in the Operating Systems @@ -785,23 +787,62 @@ the [Disk Images] section of this document. ### Auto-Submit Batch Files -All of the operating systems supplied with RomWBW have the ability to -execute a "batch" of commands by creating a batch submission file -containing the commands to be executed. The specifics of using -batch files in a specific operating system is covered in its specific -documentation. +All of the operating systems supplied with RomWBW have the ability to +execute a "batch" of commands by creating a batch submission file +containing the commands to be executed. The mechanism for running +commands automatically at startup varies by operating system. In some +cases, it was built into the original operating system. In other cases, +I have added this capability in the RomWBW BIOS of the operating +system. -At boot, the operating system will look for a specific batch file -(`PROFILE.SUB` for CP/M 2.2 and 3) on the boot drive and execute that -batch file automatically. This allows you to automatically customize -your operating system with any commands desired at boot. CP/M 2.2 did -not originally have the ability to automatically excute a batch file at -boot, but the CBIOS in RomWBW has added this capability. +In all cases, the file containing the commands to run at startup must +be on the boot drive (A:). RomWBW automatically assigns A: to the +disk slice you choose to boot. Adding a startup command file to the +ROM Disk is not recommended because it would require customizing and +building a new ROM. Use of bootable disk slices is preferred since +the startup command files can be added/edited without any special +system customization. + +Here is an overview for each operating system: + +- **CP/M 2.2** - Will run PROFILE.SUB as a SUBMIT file if it exists in + A: at startup. Note that original CP/M 2.2 itself did not have this + ability -- it was added to the RomWBW CP/M 2.2 BIOS. The use of SUBMIT + files is documented in Section 1.6.7 SUBMIT Command of the CPM Manual + included in the Doc/CPM folder of the RomWBW distribution. + +- **Z-System (ZSDOS 1.1)** - Will run run PROFILE.SUB as a SUBMIT file + if it exists in A: at startup. Works exactly the same as CP/M 2.2. + The original Z-System ZSDOS 1.1 did not have this ability -- it was + added to the RomWBW Z-System BIOS. The Z-System documentation does + not cover the use of SUBMIT files -- please refer to the CP/M 2.2 + documentation. + +- **NZCOM** - Will run the command STARTZCM at startup. This is + normally an alias file. You use SALIAS to edit such files. Please see + Section 3.1 Creating an Alias of the NZCOM Users Manual included in the + Doc/CPM folder of the RomWBW distribution. Note that the NZCOM + distribution includes a PROFILE.SUB file. NZCOM itself is launched from + ZSDOS. The included PROFILE.SUB accomplishes this. Do not modify this + file unless you fully understand the NZCOM boot process. + +- **CP/M 3** - Will run PROFILE.SUB as a SUBMIT file if it exists in A: + at startup. This mechanism is built into the CP/M 3 operating system. + Please see Section 4.5 Executing Multiple Commands and Section 5.2.74 + Executing the SUBMIT Command of the CPM3 Users Guide included in the + Doc/CPM folder of the RomWBW distribution. + +- **ZPM3** - Will run the command STARTZPM at startup. This is normally + an alias file. You use SALIAS to edit such files. ZPM3 has no real + documentation. The NZCOM documentation of STARTZCM is generally correct + for ZPM3. Since RomWBW can utilize many disk slices, it is very easy to create slices for specific workflows (editing, software development, games, etc.). You can then just boot to the slice that is optimized for the -task you want to perform. +task you want to perform. Each such slice may have its own startup +command batch file that customizes the environment for the specific +workflow desired. ## System Management @@ -984,34 +1025,77 @@ switches can be used to select any of the first 8 slices. # Disk Management -The systems supported by RomWBW all have the ability to use persistent -disk media. A wide variety of disk devices are supported including -floppy drives, hard disks, CF Cards, SD Cards, etc. RomWBW also -supports the use of extra RAM and ROM memory as pseudo-disk devices. +The systems supported by RomWBW all have the ability to use persistent +disk media. Some systems have disk interfaces built-in, while others +will require add-in cards. You will need to refer to the documentation +for your system for your specific options. + +The RomWBW firmware provides a hardware abstraction layer, +All disks will work on all hardware variations. +This means you can remove disk media from one RomWBW system and +put it in a different RomWBW system. The only constraint is that the +applications on the disk media must be up to date with the firmware on +the system being used. + +## Key Terminology/Concepts + +The following important terminology applies + +#### Disk (or Disk Drive) + +The hardware storage device that RomWBW talks to. +RomWBW supports a variety of storage disk device types. + +* ROM Disk - RomWBW firmware - containing CPM utilities +* RAM Disk - A section of system RAM initially empty +* Floppy Disk(s) - Removable media +* Hard Disk(s) - Includes CF Cards, SD Cards, USB Stick, etc. + +The different disk types are further defined in the section [Disk Types]. + +#### Media + +The storage device inserted into a disk drive, e.g. a floppy disk, CF +Card, SD Card, etc. + +#### Slice + +For hard disks a Slice is a smaller logical block of disk space that is +allocated and formatted with a filesystem and typically allocated to a +Drive letter. Slices allow large modern storage media to be sliced up +into smaller units compatible with CP/M. Slices should not be confused +with partitions, a slice is not a partition. + +The concept of slices is described in detail in the section +[Hard Disk Slices]. + +#### Drive -RomWBW supports a variety of storage devices which will be discussed -in more detail later. +The mapping of a hardware disk (and slice) to a Drive letter +in an operating system. A Drive has a file system installed on it -* ROM Disk -* RAM Disk -* Floppy Disk -* Hard Disk (includes CF Cards, SD Cards, USB Drives, etc.) +#### Disk Image -We will start by discussing each of these types of storage devices and -how to prepare them so files can be stored on them. Subsequently, we -will describe how to install the pre-built disk images with bootable -operating systems and ready-to-run content. +A disk image is a predefined image of a complete CP/M filesystem, +or filesystem(s), including any partition tables (for hard disk images). +Each disk image has the complete set of normal applications and tools +distributed with the associated operating system or application suite. + +This comes in for form of a file which is suitable for copying directly +onto target media, using a modern computer. It is generally easier to +use these disk images than transferring files over individually. +See the section [Disk Images] for further details. -Some systems have disk interfaces built-in, while others will require -add-in cards. You will need to refer to the documentation for your -system for your specific options. +## Startup Hardware Discovery + +During startup RomWBW performs detection for hardware supported by your +platform. During startup you will see messages for any disk +interface(s), listing device types (e.g. FD:, IDE:, SD:), and any media +that has been found on these interfaces. The messages you see will vary +depending on your hardware and the media you have installed. -In the RomWBW boot messages, you will see hardware discovery messages. -If you have a disk drive interface, you should see messages listing -device types like FD:, IDE:, PPIDE:, SD:. Additionally, you will see -messages indicating the media that has been found on the interfaces. As an example, here are the messages you might see if you have an IDE -interface in your system with a single CF Card inserted in the +interface in your system with a single disk drive connected to the primary side of the interface: ``` @@ -1020,72 +1104,45 @@ IDE0: 8-BIT LBA BLOCKS=0x00773800 SIZE=3815MB IDE1: NO MEDIA ``` -The messages you see will vary depending on your hardware and the -media you have installed. But, they will all have the same general -format as the example above. +See [Appendix B - Device Summary] for a complete list of the different +device types supported. + +If you do not see drive letters assigned as expected, refer to the prior +system boot messages to ensure media has been detected in the interface. + +Each drive letter refers back to a specific disk hardware interface like +IDE0. This is important as it is telling you what each drive letter +refers to. + +Mass storage disks (like IDE) will normally have multiple drive letters +assigned. The extra drive letters refer to additional "slices" on the +disk. Once your system has working disk devices, they will be accessible from any operating system you choose to run. Disk storage is available whether you boot your OS from ROM or from the disk media itself. -Referring back to [Starting Applications from ROM], you could start CP/M -2.2 using the 'C' command. As the operating system starts up, you -should see a list of drive letters assigned to the disk media you have -installed. Here is an example of this: - -``` -Configuring Drives... - - A:=MD1:0 - B:=MD0:0 - C:=IDE0:0 - D:=IDE0:1 -``` +## Drive Letter Assignment -You will probably see more drive letters than this. The drive letter -assignment process is described below in the [Drive Letter Assignment] -section. Be aware that RomWBW will only assign drive letters to disk -interfaces that actually have media in them. If you do not see drive -letters assigned as expected, refer to the prior system boot messages -to ensure media has been detected in the interface. Actually, there -is one exception to this rule: floppy drives will be assigned a drive -letter regardless of whether there is any media inserted at boot. - -Notice how each drive letter refers back to a specific disk hardware -interface like IDE0. This is important as it is telling you what each -drive letter refers to. Also notice that mass storage disks (like IDE) -will normally have multiple drive letters assigned. The extra drive -letters refer to additional "slices" on the disk. The concept of slices -is described below in the [Slices] section. +In legacy CP/M operating systems only 16 drive letters (A:-P:) available + to be assigned to disks Drive letters were generally mapped to disk +drives in a completely fixed way. For example, drive A: would **always** + refer to the first floppy disk drive. -## Drive Letter Assignment +RomWBW implements a much more flexible drive letter assignment mechanism +so that any drive letter can dynamically be assigned to any disk device, +or slice of media. -In legacy CP/M-type operating systems, drive letters were generally -mapped to disk drives in a completely fixed way. For example, drive A: -would **always** refer to the first floppy drive. Since RomWBW -supports a wide variety of hardware configurations, it implements a -much more flexible drive letter assignment mechanism so that any drive -letter can be assigned to any disk device. - -At boot, you will notice that RomWBW automatically assigns drive -letters to the available disk devices. These assignments are -displayed during the startup of the selected operating system. -Additionally, you can review the current drive assignments at any -time using the `ASSIGN` command. CP/M 3 and ZPM3 do not automatically -display the assignments at startup, but you can use `ASSIGN` to -display them. Refer to $doc_apps$ for more information on -use of the `ASSIGN` command. +For clarification, CP/M **cannot** refer directly to disk devices, +CP/M only understands drive letters, so to access a given disk device +it must first be assigned to a drive letter. +As the operating system starts up, you should see a list of drive letters +assigned to the disk media you have installed. Here is an example of the list of drive letter assignments made during the startup of Z-System: ``` -Loading Z-System... - -CBIOS v3.1.1-pre.194 [WBW] - -Formatting RAMDISK... - Configuring Drives... A:=MD0:0 @@ -1096,65 +1153,53 @@ Configuring Drives... F:=IDE0:1 G:=IDE0:2 H:=IDE0:3 +``` - 1081 Disk Buffer Bytes Free +Above you can see that: -ZSDOS v1.1, 54.0K TPA -``` +- Drive A: has been assigned to MD0 which is the RAM disk device. +- Drive B: has been assigned to MD1 which is the ROM disk device. +- Drives C: and D: have been assigned to floppy disk drives. +- Drives E: thru H: have been assigned to the IDE0 hard disk device. + The 4 entries for IDE0 are referring to the first 4 slices on that disk. -Above you can see that drive A: has been assigned to MD0 which is the -RAM Disk device. Drives C: and D: have been assigned to floppy drives. -Drives E: thru L: have been assigned to the IDE0 hard disk device. The -4 entries for IDE0 are referring to 4 slices on that disk. Slices are -discussed later. +CP/M 3 and ZPM3 do not automatically display the assignments at startup, +but you can use `ASSIGN` to display them. -**WARNING**: Drive letter assignments do **not** ensure that the slice -referenced by the drive letter actually fits on the media you are using. -For example, a typical 64MB CF Card (which is typically a bit smaller -than 64MB) will only fit 7 slices. At startup, you will typically see -8 drive letters assigned to the CF Card. Attempting to access the -last drive letter will result in a "no disk" error from the operating -system. +The assignments at boot will stay the same on each boot +as long as you do not make changes to your hardware configuration. +i.e. If you insert or remove an SD Card, CF Card or USB Stick, the drive +assignments will change at next boot. -The drive letter assignments **do not** change during an OS session -unless you use the `ASSIGN` command yourself to do it. Additionally, the -assignments at boot will stay the same on each boot as long as you do -not make changes to your hardware configuration. Note that the -assignments **are** dependent on the media currently inserted in hard -disk drives when the operating system is started. So, notice that if you -insert or remove an SD Card, CF Card or USB Drive, the drive -assignments will change. Since drive letter assignments can change, you -must be careful when doing destructive things like using `CLRDIR` to +Since drive letter assignments can change, you +must be careful when doing destructive things like using `CLRDIR` to make sure the drive letter you use is referring to the desired media. -When performing a ROM boot of an operating system, note that A: will -be your RAM disk and B: will be your ROM disk. When performing a disk -boot, the disk you are booting from will be assigned to A: and the -rest of the drive letters will be offset to accommodate this. This is -done because most legacy operating systems expect that A: will be the -boot drive. +Drive assignments can be changed at any time, by the `ASSIGN` command. +Please see the section [Assign Drive Letters] for further details. -### Default Drive Letter Assignment +### Default Drive Letters -As shown above, when an operating system is booted, RomWBW will -automatically assign drive letters to physical disk devices. The -assignment process varies depending on: 1) the drive/slice you choose to -boot from, and 2) the number and type of physical drives in your -system. +When an operating system is booted, RomWBW will automatically assign +drive letters to disk devices. The assignment process varies depending on: -If you boot an operating system from ROM, then the first two drive -letters will be assigned to your RAM disk (A:) and your ROM disk (B:). -It may seem odd that the RAM disk is assigned to A: in this case. The -reason for this is to accommodate certain functions that require that A: -be a writable disk drive. For example, A: **must** be writable in order -to submit batch files. +* the disk/slice you choose to boot from, and +* the number, type, and sizes of mass storage devices available at boot + +The A: drive letter is considered special by most CP/M operating systems +and is automatically used in some cases. e.g. submitting batch files, +and is expected to be a writable volume. If you boot to a physical disk device, then the first drive letter (A:) -will be assigned to the disk/slice that you chose to boot from. The A: -drive letter is considered special by most operating systems and is -automatically used in some cases. By making the selected disk/slice the -A: drive, you can setup different disks/slices for specific uses and -just boot to it. +will be assigned to the disk/slice that you are booting from, +and the rest of the drive letters will be offset to accommodate this. +By making the selected disk/slice the A: drive, you can setup different +disks/slices for specific uses and just boot it, +and the booted operating system will be the A: drive + +However when performing a ROM boot of an operating system, the first two +drive letters will be assigned to your RAM disk (A:) and your ROM disk +(B:). This provides the maximum compatibility with CP/M. After the first drive letter is assigned (as well as the second drive letter in the case of a ROM boot), RomWBW will assign additional drive @@ -1169,9 +1214,8 @@ letters will be assigned in the following order: If a disk/slice was already assigned as the A: (or B:) drive letter, then it will not be assigned again. -In the case of floppy, RAM, and ROM disks, a single drive letter will be -assigned to each physical disk (even if there is no disk media in the -drive). +Floppy or removable disk drives will be assigned a drive letter +regardless of whether there is any media inserted at the time of boot. In the case of hard disks, 1-8 drive letters will be assigned to the initial 1-8 slices of the disk drive. The number of drive letters @@ -1186,18 +1230,122 @@ This somewhat complicated algorithm is used to try and maximize the limited number of operating system drive letters available (16) to the available disk devices as evenly as possible. -Note that for hard disk devices, drive letters will only be assigned -to disk devices that actually contain media. So, for example, if you -have an SD Card slot in your system, but it has no SD Card inserted, then -no drive letters will be assigned to it. +For hard disk devices which are treated as non-removable media, drive +letters will only be assigned to disk devices that actually contain +media. i.e. No drive letters will be assigned to an SD Card slot that +has no SD Card inserted. -Since drive letter assignments are easily changed at any time using the -`ASSIGN` command, you can customize your assignments as desired after -starting the operating system. Even better, you can use an auto-submit -batch file to customzie the assignments at startup without any user +### Assign Drive Letters + +The `ASSIGN` command is used to view or change the current +drive letter mappings. Any changes made to drive letter mappings take +immediate effect + +Refer to $doc_apps$ for more information on use of the `ASSIGN` command. + +Since drive letter assignments are easily changed at any time using the +`ASSIGN` command, you can customize your assignments as desired after +starting the operating system. Even better, you can use an auto-submit +batch file to customzie the assignments at startup without any user intervention. -## ROM & RAM Disks +## Disk Operations/Commands + +With some understanding of how RomWBW presents disk space to the +operating systems, we need to go over the options for actually setting +up your disk(s) with content. + +### Preparing Media for First Use + +You can initialize the media in-place using your RomWBW system. +Essentially, this means you are creating a set of blank directories on +your disk so that files can be saved there. +This is somewhat analogous to partitioning of a hard disk +or doing a low level format of a floppy disk. + +Initilizing a Floppy disk is covered in the section [Floppy Disk Formatting], +or for a Hard disk the section [Hard Disk Preparation] covers the steps to +manually setup a hard disk for first use. + +### Clearing (Formatting) Drives + +This is somewhat analogous to doing a FORMAT operation on other systems. + +With RomWBW you use the `CLRDIR` command to do this. +This command is merely "clearing out" the directory space of the drive +referred to by a drive letter and setting up the new empty directory. + +Refer to $doc_apps$ for more information on use of the `CLRDIR` command. + +Since `CLRDIR` works on drive letters, make +absolutely sure you know what media and slice are assigned to that +drive letter before using `CLRDIR` because `CLRDIR` will wipe out any +pre-existing contents of the slice. + +After `CLRDIR` completes, the slice should be ready to use by the operating +system via the drive letter assigned. +Start by using the `DIR` command on the drive. +This should return without error, but list no files. + +Here is an example of using `CLRDIR`. In this example, the `ASSIGN` +command is used to show the current drive letter assignments. Then +the `CLRDIR` command is used to initialize the directory of drive 'G' +which is slice 2 of hard disk device IDE0 ("IDE0:2"). + +``` +B>ASSIGN + + A:=MD0:0 + B:=MD1:0 + C:=FD0:0 + D:=FD1:0 + E:=IDE0:0 + F:=IDE0:1 + G:=IDE0:2 + H:=IDE0:3 + +B>CLDIR G: +CLRDIR Version 1.2B May 2024 by Max Scane + +Warning - this utility will overwrite the directory sectors of Drive: G +Type CAPITAL Y to proceed, any key other key to exit. Y +Directory cleared. +B> +``` + +### Checking Disk Layout + +If you are not sure which disk layout is used for your existing +media, you can use the CP/M 2.2 `STAT` command to display information +including the number of "32 Byte Directory Entries" +for a drive letter on the corresponding hard disk. + +- If it indicates 512, your disk layout is legacy (hd512). +- If it indicates 1024, your disk layout is modern (hd1k). + +Here is an example of checking the disk layout. + +``` +B>STAT E:DSK: + + E: Drive Characteristics +65408: 128 Byte Record Capacity + 8176: Kilobyte Drive Capacity + 1024: 32 Byte Directory Entries + 0: Checked Directory Entries + 256: Records/ Extent + 32: Records/ Block + 64: Sectors/ Track + 2: Reserved Tracks +``` + +It is critical that you include `DSK:` after the drive letter in the +`STAT` command line. The important line to look at is labeled "32 Byte +Directory Entries". + +# Disk Types + +## RAM & ROM Disks A typical RomWBW system has 512KB of ROM and 512KB of RAM. Some portions of each are dedicated to loading and running applications @@ -1205,10 +1353,23 @@ and operating system. The space left over is available for an operating system to use as a pseudo-disk device (ROM Disk and RAM Disk). +Unlike other types of disk devices, ROM and RAM Disks do not contain an +actual operating system and are not "bootable". However, they are +accessible to any operating system (whether the operating system is +loaded from ROM or a different disk device). + +Neither RAM nor ROM disks require explicit formatting or initialization. +ROM disks are pre-formatted and RAM disks are formatted automatically +with an empty directory when first used. + +#### RAM Disk + The RAM disk provides a small CP/M filesystem that you can use for the temporary storage of files. Unless your system has a battery backed mechanism for persisting your RAM contents, the RAM disk contents will -be lost at each power-off. However, the RAM disk is an excellent +be lost at each power-off. + +The RAM disk is an excellent choice for storing temporary files because it is very fast. You will notice that the first time an operating system is started after the power was turned off, you will see a message indicating that the @@ -1216,10 +1377,14 @@ RAM disk is being formatted. If you reset your system without turning off power, the RAM disk will not be reformatted and it's contents will still be intact. +#### ROM Disk + Like the RAM disk, the ROM disk also provides a small CP/M filesystem, but it's contents are static -- they are part of the ROM. As such, you cannot save files to the ROM disk. Any attempt to -do this will result in a disk I/O error. The contents of the ROM +do this will result in a disk I/O error. + +The contents of the ROM disk have been chosen to provide a core set of tools and applications that are helpful for either CP/M 2.2 or ZSDOS. Since ZSDOS is CP/M 2.2 compatible, this works fairly well. However, you @@ -1227,15 +1392,6 @@ will find some files on the ROM disk that will work with ZSDOS, but will not work on CP/M 2.2. For example, `LDDS`, which loads the ZSDOS date/time stamper will only run under ZSDOS. -Unlike other types of disk devices, ROM and RAM Disks do not contain an -actual operating system and are not "bootable". However, they are -accessible to any operating system (whether the operating system is -loaded from ROM or a different disk device). - -Neither RAM nor ROM disks require explicit formatting or initialization. -ROM disks are pre-formatted and RAM disks are formatted automatically -with an empty directory when first used. - #### Flash ROM Disks The limitation of ROM disks being read-only can be overcome on some @@ -1258,24 +1414,257 @@ derived from the IBM PC floppy disk formats: * 3.5" 720K Double-sided, Double-density * 3.5" 1.44M Double-sided, High-density -When supported, RomWBW is normally configured for 2 3.5" floppy drives. -If a high-density drive is used, then RomWBW automatically detects and +When supported, RomWBW is normally configured for 2 3.5" floppy disk drives. +If a high-density disk drive is used, then RomWBW automatically detects and adapts to double-density or high-density media. It cannot automatically -detect 3.5" vs. 5.25" drive types -- the ROM must be pre-configured -for the drive type. - -Floppy media must be physically formatted before it can be used. This -is normally accomplished by using the supplied Floppy Disk Utility (FDU) -application. This application interacts directly with your hardware -and therefore you must specify your floppy interface hardware at -application startup. Additionally, you need to specify the floppy drive +detect 3.5" vs. 5.25" disk drive types -- the ROM must be pre-configured +for the disk drive type. + +**WARNING:** Some of the operating systems provided with RomWBW require +that a soft-reset be performed when swapping floppy disk media. For +example, under CP/M 2.2, you must press control-C at the CP/M prompt +after inserting a new floppy disk. The consequences of failing to +perform the soft-reset vary from unexpected error messages to full +disk directory corruption. + +## Hard Disks + +The concept of a hard disk in RomWBW applies to any +storage device that provides at least 8MB of space. The actual +media can be a real spinning hard disk, a CompactFlash Card, a +SD Card, etc. In this document, the term hard disk will apply +equally to all of these. + +The vintage operating systems included with RomWBW were produced at a +time when mass storage devices were quite small. CP/M 2.2 could only +handle filesystems up to 8MB. + +Since storage devices today are quite large, RomWBW implements a +mechanism called slicing (see [Hard Disk Slices]) to allow +up to 256 8MB CP/M filesystems on a single large storage device, +where each slice can be assigned to a drive letter in CPM, +and be treated as its own hard disk drive (from a CPM perspective). + +In order to achieve compatibility across all of the operating systems +supported by RomWBW, the hard disk filesystem format used is 8MB. This +ensures any filesystem will be accessible to any of the operating +systems. + +RomWBW uses Logical Block Addressing (LBA) to interact with all hard +disks. The RomWBW operating systems use older Cylinder/Head/Sector +(CHS) addressing. To accommodate the operating systems, RomWBW emulates +CHS addressing. Specifically, it makes all hard disks look like they +have 16 sectors and 16 heads. The number of tracks varies with the size +of the physical hard disk. + +### Hard Disk Layouts + +When RomWBW uses a hard disk, it utilizes an area of the physical hard +disk drive space to store a sequential series of slices that contain the +actual CP/M filesystems referred to by drive letters by the operating +system. + +Two physical layout schemes exist: + +* Modern (hd1k) +* Legacy (hd512) + +You **cannot** mix disk layouts on a single disk device, +however It is perfectly fine for one system to have +multiple hard disks with different layouts -- each physical disk +device is handled separately. + +If you are setting up a new disk, the modern (hd1k) layout is +recommended for the following reasons: + +* Larger number of directory entries per filesystem +* Simplifies creation of coresident FAT filesystem +* Reduces chances of data corruption + +Both the legacy and modern disk layouts continue to be fully supported +by RomWBW. There are no plans to deprecate the legacy layout. + +#### Modern Layout + +RomWBW (Starting with v3.2) supports the use of disk partitioning, +utilising a Master Boot Record (MBR) partition tables. +The Wikipedia article on the +[Master Boot Record](https://en.wikipedia.org/wiki/Master_boot_record) +is excellent if you are not familiar with them. + +RomWBW uses the partition type id `0x2E`. This partition type id +does not equate to any existing well-known +partition types -- it was chosen because it is not generally used. +RomWBW does not support extended partitions -- only a single +primary partition can be used. + +The existence of a partition table entry for RomWBW on +a hard disk makes it behave in the modern mode. Removing the RomWBW +partition entry from a modern hard disk layout +will cause the existing data to be unavailable and/or corrupted + +The CP/M filesystem in the slices of the modern disk layout +contain 1024 directory entries. + +#### Legacy Layout + +Originally, RomWBW always used the very start of the hard disk media +for the location of the slices. In this layout, slice 0 referred to +the first chunk of ~8MB on the disk, slice 1 referred to the second +chunk of ~8MB on the disk, and so on. The number of slices is limited +to the size of the disk media -- if you attempted to read/write to a +slice that would exceed the disk size, you would see I/O errors. + +The legacy format takes steps to allow a partition table to still be +used for other types of filesystems such as DOS/FAT. It just does not +use a partition table entry to determine the start of the RomWBW slices. + +The lack of a RomWBW partition table entry will cause legacy behaviour. +Adding a partition table entry on an existing legacy RomWBW hard disk +will cause the existing data to be unavailable and/or corrupted. + +The CP/M filesystem in the slices of the legacy disk layout +contain 512 directory entries. + +### Hard Disk Slices + +RomWBW implements a mechanism called slicing to allow multiple CP/M +filesystem on a single large storage device. To say it another way, the +media is "sliced up" into many CP/M filesystems. + +You cannot use slices on any media less than 8MB in size. +Specifically, you cannot slice RAM disks, ROM disks, floppy +disks, etc. All of these are considered to have a single slice (0) + +It is very important to understand that RomWBW slices are not +individually created or allocated on your hard disk. +RomWBW uses a single partition on your hard disk to contain +the slices. You should think of slices as just an index into a +sequential set of 8MB areas that exist in this partition. + +RomWBW allows up to up to 256 slices each of 8MB in size on a single +large storage device. This allows the use of up to 2GB of usable space +on one media device. + +It is possible to create other partitions (typically FAT), for now, we +are just talking about the slices within the single RomWBW partition. + +### Slice Assignment + +When assigning Hard disks to drive letters you also need to assign the +slice. + +Referring to slices within a storage device is done by appending a +`:` where \ is the device relative slice number from 0-255. +For example, if you have an IDE device, it will show up as IDE0: in the +boot messages meaning the first IDE device. To refer to the fourth slice +of IDE0, you would type "IDE0:3". Here are some examples: + +| | | +|----------|------------------------------| +| `IDE0:0` | First slice of disk in IDE0 | +| `IDE0:` | First slice of disk in IDE0 | +| `IDE0:3` | Fourth slice of disk in IDE0 | + +So, if you wanted to use drive letter L: to refer to the fourth slice of +IDE0, you could use the command `ASSIGN L:=IDE0:3`. There are a couple +of rules to be aware of when assigning drive letters. First, you may +only refer to a specific device/slice with one drive letter at a time. +Said another way, you cannot have multiple drive letters referring to a +the same device/slice at the same time. Second, there must always be a +drive assigned to A:. Any attempt to violate these rules will be blocked +by the `ASSIGN` command. + +As you see, the name of a slice does not reference the hard disk +partition containing the slices. Since there can only be a single +RomWBW partition containing slices on any disk, the partition is +determined automatically. + +RomWBW does not prevent you from assigning slices +to drive letters even if the location of the slice does not fit on the +physical disk. Any attempt to access a drive letter mapped to a slice +that does not fit will result in an error such as "no disk" from the +operating system. + +For example, a 64MB CF Card (which is typically a bit smaller +than 64MB) will only fit 7 slices. At startup, you will typically see +8 drive letters assigned to the CF Card. Attempting to access the +last drive letter will result in a "no disk" error from the operating +system. + +### Hard Disk Capacity + +The exact number of CP/M filesystem slices that will fit on your +specific physical hard disk can be determined as follows: + +- For modern (hd1k) disk layouts, it is 1024KB + (slices * 8192KB). + Or equivalent to say 1MB + (slices * 8MB). +- For legacy (hd512) disk layouts, it is slices * 8,320KB. + +**WARNING**: In this document KB means 1024 bytes and MB means 1048576 +bytes (frequently expressed as KiB and MiB in modern terminology). +In general, hard disk capacities use KB to mean 1000 bytes and MB +to mean 1,000,000 bytes. + +As an example, A "64MB" CF Card probably has +less than 62.5MB of actual space (using the RomWBW definition that +1MB is 1048576 bytes). Such a drive will not support 8 slices. It +will support 7 slices just fine because +1024KB + (7 * 8192MB) = 57MB (hd1k) or +7 * 8,320KB = 58.24MB (hd512) + +Although you can use up to 256 slices per physical disk, +equating to 2GB of storage this large number of slices is rarely used. +It is recommended that hard disk media used with RomWBW be 1GB or +greater in capacity. +This will support the RomWBW Combo Disk Image (see [Combo Hard Disk Image]) +that allows you to use 64 CP/M filesystem slices and a 384KB FAT filesystem. + +# Disk Preparation + +There are two approaches to preparing disks for use by RomWBW. + +- **Manual**: Use RomWBW itself to format empty disks and then transfer + files over to the disks. +- **Images**: Use a modern computer to write a pre-built disk image + including files to a disk. + +This section of the document describes the manual process of preparing +empty disks that are ready for use by an operating system. + +Alternatively, you can use the pre-built RomWBW disk images to quickly +create disk media that already has a large selection of files and +bootable operating system slices. Using images to prepare a disk +is documented in [Disk Images]. You do not need to follow the +instructions in this section if you want to use disk images. + +## Floppy Disk Formatting + +Floppy media must be physically formatted before it can be used. This +is normally accomplished by using the supplied Floppy Disk Utility `FDU` +application. This application interacts directly with your hardware +and therefore you must specify your floppy interface hardware at +application startup. Additionally, you need to specify the floppy disk drive and media format to use for formatting. -Below is a sample session using FDU to format a 1.44M floppy disk in +Refer to $doc_apps$ for more information on use of the `FDU` command. + +Since the physical format of floppy media is the same as that used +in a standard MS-DOS/Windows computer, you can also format +floppy disk media in a standard computer. However there are caveats: + +* The directory format itself will **NOT** be compatible with CP/M OSes. + You **WILL** need to use the `CLRDIR` command to reformat the directory area + from CP/M. See section [Clearing (Formatting) Drives] +* FDU allows you to specify physical sector interleaving (defaults to 2) + which will result in faster floppy disk I/O. + Formatting on a modern computer may not optimize this. + +Below is a sample session using `FDU` to format a 1.44M floppy disk in the first (primary) floppy disk drive: ``` -B>fdu +B>FDU Floppy Disk Utility (FDU) v5.8, 26-Jul-2021 [HBIOS] Copyright (C) 2021, Wayne Warthen, GNU GPL v3 @@ -1330,8 +1719,6 @@ ENTER TRACE LEVEL [00-01] (00): === OPTION ===> FORMAT (T)RACK, (D)ISK ===> DISK ENTER INTERLEAVE [01-12] (02): - - RESET DRIVE... PROGRESS: TRACK=4F HEAD=01 SECTOR=01 @@ -1343,464 +1730,285 @@ PROGRESS: TRACK=4F HEAD=01 SECTOR=01 === OPTION ===> EXIT ``` -Since the physical format of floppy media is the same as that used -in a standard MS-DOS/Windows computer, you can also physical format -floppy media in a modern computer. However, the directory format -itself will not be compatible with CP/M OSes. In this case, you -can use the `CLRDIR` application supplied with RomWBW to reformat -the directory area. - -Once a floppy disk is formatted, you can read/write files on it -using any of the RomWBW operating systems. The specific commands -will depend on the operating system or application in use -- refer to -the appropriate OS/application documentation as needed. - -**WARNING:** Some of the operating systems provided with RomWBW require -that a soft-reset be performed when swapping floppy disk media. For -example, under CP/M 2.2, you must press control-C at the CP/M prompt -after inserting a new floppy disk. The consequences of failing to -perform the soft-reset vary from unexpected error messages to full -disk directory corruption. - -## Hard Disks +You can confirm a floppy disk is ready for content by simply running a `DIR` +command on it. The `DIR` command should complete without error and +should list no files. -Under RomWBW, a hard disk is similar to a floppy disk in that it is -considered a disk unit. However, RomWBW has multiple features that -allow its legacy operating systems to take advantage of modern -mass storage media. +## Hard Disk Preparation -To start with, the concept of a hard disk in RomWBW applies to any -storage device that provides at least 8MB of space. The actual -media can be a real spinning hard disk, a CompactFlash Card, a -SD Card, etc. In this document, the term hard disk will apply -equally to all of these. +This section deals with initializing hard disk media entirely from +your RomWBW system. The following instructions are one way to proceed. +This does not mean to imply it is the only possible way. -RomWBW uses Logical Block Addressing (LBA) to interact with all hard -disks. The RomWBW operating systems use older Cylinder/Head/Sector -(CHS) addressing. To accommodate the operating systems, RomWBW emulates -CHS addressing. Specifically, it makes all hard disks look like they -have 16 sectors and 16 heads. The number of tracks varies with the size -of the physical hard disk. +First you need to understand -It is recommended that hard disk media used with RomWBW be 1GB or -greater in capacity. The reasons for this are discussed later, but it -allows you to use the recommended disk layout for RomWBW that -accommodates 64 CP/M filesystem slices and a 384KB FAT filesystem. +* The disk layout approach (either hd1k or the legacy hd512). + See [Hard Disk Layouts] section if you are not sure. + hd1k should be the preferred layout. +* The number of 8MB slices that you want to allocate, preferred is 64 slices. + At least 1 slice of 8MB is required +* If you want to leave space for a FAT partition. See [FAT Filesystem Preparation] +* The total capacity of your drive, to hold the CP/M (and other) partition(s) ->>> Although we have not yet discussed how to get content on your disk ->>> units, it is necessary to have a basic understanding of how RomWBW ->>> handles disk devices as background. The following sections explain how ->>> disk units are managed within the operating systems. We will ->>> subsequently discuss how to actually setup disk devices with usable ->>> content. +Then you will need to start by inserting the disk media, +booting RomWBW, and confirming that the media is being recognized. +If RomWBW recognizes the media, it will indicate this in the +boot messages even though the media may not yet been prepared for use. -## Slices +Then launch either CP/M 2.2 or Z-System from ROM using the +Boot Loader `C` or `Z` commands respectively. +You can now use the tools on the ROM disk to prepare your disks. -The vintage operating systems included with RomWBW were produced at a -time when mass storage devices were quite small. CP/M 2.2 could only -handle filesystems up to 8MB. In order to achieve compatibility across -all of the operating systems supported by RomWBW, the hard disk -filesystem format used is 8MB. This ensures any filesystem will be -accessible to any of the operating systems. +Note that you may see the operating system assign disks/slices to +drives letters even though the disks/slices are not yet initialized. This is +normal and does not mean the disks/slices are ready to use. -Since storage devices today are quite large, RomWBW implements a -mechanism called slicing to allow up to 256 8MB CP/M filesystems on a -single large storage device. To say it another way, the media is -"sliced up" into many 8MB CP/M filesystems. Each slice is a complete -CP/M filesystem. This allows up to 2GB of usable space on -one media. You can think of slices as a way to refer to any of -the first 256 8MB chunks of space on a single media. Each chunk -is a CP/M filesystem. - -Note that slices are **not** the same thing as a hard disk partition. -In fact, these slices all live inside of a single hard disk partition. -Normally, a RomWBW hard disk will have one partition (called the -RomWBW partition) containing 64 slices. Optionally, there may be -a second partition which contains a FAT filesystem. For now, we -are just talking about the slices within the single RomWBW partition. +### Partition Setup -Although you can use up to 256 slices per physical disk, this large -number of slices is rarely used. The recommended RomWBW disk layout -provides for 64 slices which is more than enough for most use cases. - -Of course, the problem is that CP/M-like operating systems have only -16 drive letters (A:-P:) available. Under the covers, RomWBW allows -you to use any drive letter to refer to any slice of any media. The -`ASSIGN` command is used to view or change the current drive letter -mappings at any time. At startup, the operating system will -automatically allocate a reasonable number of drive letters to the -available storage devices. The allocation will depend on the number of -mass storage devices available at boot. For example, if you have -only one hard disk type media, you will see that 8 drive letters are -assigned to the first 8 slices of that media. If you have two large -storage devices, you will see that each device is allocated 4 drive -letters. +To setup a partition you must run the `FDISK80` utility. +After FDISK80 starts, enter the disk unit number of the new media. +The disk unit number was assigned at boot See [Device Unit Assignments] -Referring to slices within a storage device is done by appending a -`:` where \ is the device relative slice number from 0-255. -For example, if you have an IDE device, it will show up as IDE0: in the -boot messages meaning the first IDE device. To refer to the fourth slice -of IDE0, you would type "IDE0:3". Here are some examples: +Refer to $doc_apps$ for more information on use of the `FDISK80` utility. -| | | -|----------|------------------------------| -| `IDE0:0` | First slice of disk in IDE0 | -| `IDE0:` | First slice of disk in IDE0 | -| `IDE0:3` | Fourth slice of disk in IDE0 | +If you want to use the legacy hd512 layout skip down to the [Legacy (hd512)] section -So, if you wanted to use drive letter L: to refer to the fourth slice of -IDE0, you could use the command `ASSIGN L:=IDE0:3`. There are a couple -of rules to be aware of when assigning drive letters. First, you may -only refer to a specific device/slice with one drive letter at a time. -Said another way, you cannot have multiple drive letters referring to a -the same device/slice at the same time. Second, there must always be a -drive assigned to A:. Any attempt to violate these rules will be blocked -by the `ASSIGN` command. +#### Modern (hd1k) -As you see, the name of a slice does not reference the hard disk -partition containing the slices. Since there can only be a single -RomWBW partition containing slices on any disk, the partition is -determined automatically. +At this point, use the `I` command to initialize (reset) +the partition table to an empty state. -In case this wasn't already clear, you **cannot** refer directly -to slices using CP/M. CP/M only understands drive letters, so -to access a given slice, you must assign a drive letter to it first. +You must create a partition for the RomWBW CP/M slices. +Then create a partition using the `N` command. Importantly: -While it may be obvious, you cannot use slices on any media less than -8MB in size. Specifically, you cannot slice RAM disks, ROM disks, floppy - disks, etc. All of these are considered to have a single slice (slice -0) and any attempt to ASSIGN a drive letter to a slice beyond that will -fail and produce an error message. +* The partition number should typically be `1` the first partition +* The partition can be placed anywhere you want, + The typical location for the RomWBW partition is at 1MB. +* The partition size should be the total size of all the slices you require, + and must be at least 8MB in size, in increments of 8MB makes sense. -It is very important to understand that RomWBW slices are not -individually created or allocated on your hard disk. RomWBW uses a -single, large chunk of space (partition) on your hard disk to contain -the slices. You should think of slices as just an index into a -sequential set of 8MB areas that exist in this large chunk of space. -The next section will go into more detail on how slices are located on -your hard disk. - -Although you do not need to allocate slices individually, you do need to -initialize each slice for CP/M to use it. This is somewhat analogous -to doing a FORMAT operation on other systems. With RomWBW you use the -`CLRDIR` command to do this. This command is merely "clearing out" the -directory space of the slice referred to by a drive letter and setting -up the new empty directory. Since `CLRDIR` works on drive letters, make -absolutely sure you know what media and slice are assigned to that -drive letter before using `CLRDIR` because CLRDIR will wipe out any -pre-existing contents of the slice. +You **must** then set the type of partition to `2E` using the `T` command. +The `P` command can be used to display the partition before it is written +Finally the partition can be written to disk using the `W` write command. -**WARNING**: Earlier versions of the `CLRDIR` application does not -appear to check for disk errors when it runs. If you attempt to run -`CLRDIR` on a drive that is mapped to a slice that does not actually fit -on the physical disk, it may behave erratically. +**WARNING**: Modifying the partition table of existing media will +make any data on the media inaccessible. -Here is an example of using `CLRDIR`. In this example, the `ASSIGN` -command is used to show the current drive letter assignments. Then -the `CLRDIR` command is used to initialize the directory of drive 'G' -which is slice 2 of hard disk device IDE0 ("IDE0:2"). +Below is an example of creating a RomWBW +partition following these guidelines. ``` -B>assign - - A:=MD0:0 - B:=MD1:0 - C:=FD0:0 - D:=FD1:0 - E:=IDE0:0 - F:=IDE0:1 - G:=IDE0:2 - H:=IDE0:3 - -B>clrdir G: -CLRDIR Version 1.2B May 2024 by Max Scane +FDISK80 for RomWBW, UNA, Mini-M68k, KISS-68030, SBC-188 ---- + Version 1.1-22 created 7-May-2020 + (Running under RomWBW HBIOS) -Warning - this utility will overwrite the directory sectors of Drive: G -Type CAPITAL Y to proceed, any key other key to exit. Y -Directory cleared. -B> +HBIOS unit number [0..11]: 4 +Capacity of disk 4: ( 4G) 7813120 Geom 77381010 +Nr ---Type- A -- Start End LBA start LBA count Size + 1 00 *** empty *** + 2 00 *** empty *** + 3 00 *** empty *** + 4 00 *** empty *** +>>i +>>n +New partition number: 1 +Starting Cylinder (default 0): 1Mb +Ending Cylinder (or Size= "+nnn"): +512Mb +>>t +Change type of partition number: 1 +New type (in hex), "L" lists types: 2e +>>p +Nr ---Type- A -- Start End LBA start LBA count Size + 1 RomWBW 2e 8:0:1 1023:15:16 2048 1048576 512M + 2 00 *** empty *** + 3 00 *** empty *** + 4 00 *** empty *** +>>w +Do you really want to write to disk? [N/y]: y +Okay +FDISK exit. ``` -## Hard Disk Layouts +At this point, it is best to restart your system to make sure that +the operating system is aware of the partition table updates. Start +CP/M 2.2 or Z-System from ROM again. -As previously discussed, when RomWBW uses a hard disk, it utilizes a -chunk of space for a sequential series of slices that contain the -actual CP/M filesystems referred to by drive letters. +#### Legacy (hd512) -Originally, RomWBW always used the very start of the hard disk media -for the location of the slices. In this layout, slice 0 referred to -the first chunk of ~8MB on the disk, slice 1 referred to the second -chunk of ~8MB on the disk, and so on. The number of slices is limited -to the size of the disk media -- if you attempted to read/write to a -slice that would exceed the disk size, you would see I/O errors. This -is considered the "legacy" disk layout for RomWBW. +At this point, use the `I` command to initialize (reset) +the partition table to an empty state. -Starting with v3.2, RomWBW has been enhanced to support the concept of -partitioning. The partition mechanism is entirely compliant with Master -Boot Record (MBR) Partition Tables introduced by IBM for the PC. The -Wikipedia article on the -[Master Boot Record](https://en.wikipedia.org/wiki/Master_boot_record) -is excellent if you are not familiar with them. This is considered the -"modern" disk layout for RomWBW. RomWBW uses the partition type id -0x2E. This partition type id does not equate to any existing well-known -partition types -- it was chosen because it is not generally used. -RomWBW does not support extended partitions -- only a single -primary partition can be used. +To use the hd512 layout, use `W` to write the empty table to the disk +and exit. Remember that the lack of a partition for RomWBW implies the +legacy (hd512) layout. -Both the legacy and modern disk layouts continue to be fully supported -by RomWBW. There are no plans to deprecate the legacy layout. In fact, -the legacy format takes steps to allow a partition table to still be -used for other types of filesystems such as DOS/FAT. It just does not -use a partition table entry to determine the start of the RomWBW slices. +At this point, it is best to restart your system to make sure that +the operating system is aware of the partition table updates. Start +CP/M 2.2 or Z-System from ROM again. -There is one more difference between the legacy and modern disk layouts -that should be highlighted. The CP/M filesystem in the slices of -the legacy disk layout contain 512 directory entries. The modern disk -layout filesystems provide 1024 directory entries. In fact, you will -subsequently see that the prefixes "hd512" and "hd1k" are used to -identify disk images appropriate for the legacy and modern format. -These prefixes were chosen specifically to highlight the number of -directory entries supported. - -You **cannot** mix disk layouts on a single disk device. To say it -another way, the existence of a partition table entry for RomWBW on -a hard disk makes it behave in the modern mode. The lack of a RomWBW -partition table entry will cause legacy behavior. Adding a partition -table entry on an existing legacy RomWBW hard disk will cause the -existing data to be unavailable and/or corrupted. Likewise, removing -the RomWBW partition entry from a modern hard disk layout will cause -the same problems. It is perfectly fine for one system to have -multiple hard disks with different layouts -- each physical disk -device is handled separately. +#### FAT Partition -If you are setting up a new disk, the modern (hd1k) layout is -recommended for the following reasons: +At this point you may want to consider creating a FAT partition +Please see the section [FAT Filesystem Preparation] for detils on how +to setup the FAT partition. -* Larger number of directory entries per filesystem -* Simplifies creation of coresident FAT filesystem -* Reduces chances of data corruption +### Slice Initialization -### Checking Hard Disk Layout +You need to initialize each slice for CP/M to use it. +This is somewhat analogous to doing a FORMAT operation on other systems, +and is done using the `CLRDIR` command. -If you are not sure which hard disk layout was used for your existing -media, you can use the OSes command to display the number of directory -entries for a drive letter on the corresponding hard disk. For example, -the `STAT` command is used in CP/M 2.2 to determine this. This -command displays the number of directory entries on a filesystem. If -it indicates 512, your disk layout is legacy (hd512). If it indicates -1024, your disk layout is modern (hd1k). +This is covered in the section [Clearing (Formatting) Drives] -Here is an example of checking the disk layout. We want to check the -CompactFlash Card inserted in IDE interface 0. We start the system -and boot to Z-System in ROM by using the 'Z' command at the Boot Loader. -As Z-System starts, we see the following disk assignments: +**WARNING**: Earlier versions of the `CLRDIR` application do not +appear to check for disk errors when it runs. If you attempt to run +`CLRDIR` on a drive that is mapped to a slice that does not actually fit +on the physical disk, it may behave erratically. -``` -Boot [H=Help]: c +Assuming you want to use additional slices, you should initialize them +using the same process. You may need to reassign drive letters to +access some slices that are beyond the ones automatically assigned. +You can use the `ASSIGN` command to handle this. -Loading CP/M 2.2... +## Post Disk Preparation -CBIOS v3.1.1-pre.194 [WBW] +Once a disk (either floppy or hard disk) has been initialised and +formattted you may optionally; +* Make the disk bootable +* Copy system (or other) files to the disk -Configuring Drives... +### Making a Disk Bootable - A:=MD0:0 - B:=MD1:0 - C:=FD0:0 - D:=FD1:0 - E:=IDE0:0 - F:=IDE0:1 - G:=IDE0:2 - H:=IDE0:3 - I:=PRPSD0:0 - J:=PRPSD0:1 - K:=PRPSD0:2 - L:=PRPSD0:3 +To make a disk bootable you will need to follow the specific instructions +in [Operating Systems], as each operating system will be different. - 1081 Disk Buffer Bytes Free +Generally you will need to use `SYSCOPY` to setup the system track(s) +of the disk.As an example, If you wanted to setup C: as a bootable +Z-System disk you would use: -CP/M-80 v2.2, 54.0K TPA ``` +B>SYSCOPY C:=B:ZSYS.SYS -You can see that the IDE0 interface (which contains the CF Card) has -been assigned to drive letters E: to H:. We can use the STAT command -on any of these drive letters. So, for example: - -``` -B>stat e:dsk: +SYSCOPY v2.0 for RomWBW CP/M, 17-Feb-2020 (CP/M 2 Mode) +Copyright 2020, Wayne Warthen, GNU GPL v3 - E: Drive Characteristics -65408: 128 Byte Record Capacity - 8176: Kilobyte Drive Capacity - 1024: 32 Byte Directory Entries - 0: Checked Directory Entries - 256: Records/ Extent - 32: Records/ Block - 64: Sectors/ Track - 2: Reserved Tracks +Transfer system image from B:ZSYS.SYS to C: (Y/N)? Y +Reading image... Writing image... Done ``` -It is critical that you include "dsk:" after the drive letter in the -`STAT` command line. The important line to look at is labelled "32 Byte -Directory Entries". In this case, the value is 1024 which implies that -this drive is located on a modern (hd1k) disk layout. If the value -was 512, it would indicate a legacy (hd512) disk layout. - -## Hard Disk Capacity - -Although RomWBW can support many CP/M filesystem slices on a single -hard disk, you are still constrained by the physical capacity of the -actual hard disk. RomWBW does not prevent you from assigning slices -to drive letters even if the location of the slice does not fit on the -physical disk. Any attempt to access a drive letter mapped to a slice -that does not fit will result in an error such as "no disk" from the -operating system. - -The exact number of CP/M filesystem slices that will fit on your -specific physical hard disk can be determined as follows: - -- For hd512 disk layouts, it is slices * 8,320KB. -- For hd1k disk layouts, it is 1024KB + (slices * 8192KB). Since - 1024KB is exactly 1MB, it is equivalent to say 1MB + (slices * 8MB). - -**WARNING**: In this document KB means 1024 bytes and MB means 1048576 -bytes (frequently expressed as KiB and MiB in modern terminology). -In general, hard disk capacities use KB to mean 1000 bytes and MB -to mean 1,000,000 bytes. - -As an example, hardware distributors frequently supply a "64MB" -CF Card with a RomWBW system. Such a hard disk probably has -less than 62.5MB of actual space (using the RomWBW definition that -1MB is 1048576 bytes). Such a drive will not support 8 slices. It -will support 7 slices just fine because 7 * 8,320KB = 58.24MB (hd512) -or 1024KB + (7 * 8192MB) = 57MB (hd1k). +Once this process succeeds, you will be able to boot directly to the +disk slice from the boot loader prompt. See the instructions in +[Starting Operating Systems from Disk] for details on this. -The cost of high capacity CF/SD/USB Media has become very reasonable. -I highly recommend upgrading to 1GB or greater media. This size will -support all features of the RomWBW Combo Disk Image with 64 slices -and a 384MB FAT filesystem (see [Combo Hard Disk Image]). +### Copying System Files -# Disk Content Preparation +As well as making the disk bootable, you may need to transfer other +system and application files to your disks. +Refer to [Transferring Files] for more information on getting +files onto your disks. -With some understanding of how RomWBW presents disk space to the -operating systems, we need to go over the options for actually setting -up your disk(s) with content. +# Disk Images Since it would be quite a bit of work to transfer over all the files you -might want initially to your disk(s), RomWBW provides a much easier way -to get initial contents on your disks. You can use your modern -Windows, Linux, or Mac computer to copy a disk image onto the disk -media, then just move the media over to your RomWBW computer. RomWBW -comes with a variety of disk images that are ready to use and have a -much more complete set of files than you will find on the ROM disk. This -process is covered below under [Disk Images]. - -If you do not want to start with pre-built disk images, you can -alternatively initialize the media in-place using your RomWBW system. -Essentially, this means you are creating a set of blank directories on -your disk so that files can be saved there. This process is described -below under Disk Initialization. In this scenario, you will need to -subsequently copy any files you want to use onto the newly initialized -disk (see [Transferring Files]). - -You will notice that in the following instructions there is no mention -of specific hardware. Because the RomWBW firmware provides a hardware -abstraction layer, all disk images will work on all hardware variations. -Yes, this means you can remove disk media from one RomWBW system and -put it in a different RomWBW system. The only constraint is that the -applications on the disk media must be up to date with the firmware on -the system being used. +might want initially to your disk(s), It is generally easier to use +these disk images than transferring your files over individually. RomWBW +comes with a variety of ready to use disk images. -## Disk Images - -As mentioned previously, RomWBW includes a variety of disk images -that contain a full set of applications for the operating systems -supported. It is generally easier to use these disk images than -transferring your files over individually. You use your modern -computer (Windows, Linux, MacOS) to write the disk image onto the -disk media, then just move the media over to your system. +You can use your modern +Windows, Linux, or Mac computer to copy a disk image onto the disk +media, then just move the media over to your RomWBW computer. -The disk image files are found in the Binary directory of the -distribution. Floppy disk images are prefixed with "fd_" and hard disk -images are prefixed with either "hd512_" or "hd1k_" depending on the -hard disk layout they are for. +The disk image files are found in the Binary directory of the +distribution. -Each disk image has the complete set of normal applications and tools +Each disk image has the complete set of normal applications and tools distributed with the associated operating system or application suite. The following table shows the disk images available. -| **Disk Image** | **Description** | **Boot** | -|-----------------|----------------------------------------|----------| -| xxx_cpm22.img | DRI CP/M 2.2 Operating System | Yes | -| xxx_zsdos.img | ZCPR-DJ & ZSDOS 1.1 Operating System | Yes | -| xxx_nzcom.img | NZCOM ZCPR 3.4 Operating System | Yes | -| xxx_cpm3.img | DRI CP/M 3 Operating System | Yes | -| xxx_zpm3.img | ZPM3 Operating System | Yes | -| xxx_qpm.img | QPM Operating System | Yes | -| xxx_dos65.img | DOS/65 Operating System | Yes | -| xxx_ws4.img | WordStar v4 & ZDE Applications | No | +| **Disk Image** | **Description** | **Boot** | +|-------------------|--------------------------------------|----------| +| xxx_aztec.img | Aztec C Compiler | No | +| xxx_bascomp.img | Microsoft Basic-80 Compiler | No | +| xxx_blank.img | _empty image_ | No | +| xxx_cowgol.img | Cowgol 2.0 Compiler | No | +| xxx_cpm22.img | DRI CP/M 2.2 Operating System | Yes | +| xxx_cpm3.img | DRI CP/M 3 Operating System | Yes | +| xxx_dos65.img | DOS/65 Operating System | Yes | +| xxx_fortran.img | Microsoft Fortran-80 Compiler | No | +| xxx_games.img | Games Disk for CP/M | No | +| xxx_hitechc.img | HI-TECH Z80 CP/M C compiler | No | +| xxx_msxroms1.img | MSX ROMs Disk 1 | No | +| xxx_msxroms2.img | MSX ROMs Disk 2 | No | +| xxx_nzcom.img | NZCOM ZCPR 3.4 Operating System | Yes | +| xxx_qpm.img | QPM Operating System | Yes | +| xxx_tpascal.img | Borland Turbo Pascal Compiler | No | +| xxx_ws4.img | WordStar v4 & ZDE Applications | No | +| xxx_z80asm.img | Relocating macro assembler for CP/M | No | +| xxx_zpm3.img | ZPM3 Operating System | Yes | +| xxx_zsdos.img | ZCPR-DJ & ZSDOS 1.1 Operating System | Yes | You will find 3 sets of these .img files in the distribution. The -"xxx" portion of the filename will be "fd_" for a floppy image, -"hd512" for a legacy layout hard disk image, and "hd1K" for a modern -layout hard disk image. +"xxx" portion of the filename will be: + +* "fd_" for a floppy image. +* "hd1k_" for a modern layout hard disk image. +* "hd512_" for a legacy layout hard disk image. In the case of xxx_dos65.img, only an hd512 variant is provided. This is a constraint of the DOS65 distribution. -There is also an image file called "psys.img" which contains a bootable +There is also an image file called "psys.img" which contains a bootable p-System hard disk image. It contains 6 p-System filesystem slices, but these are not interoperable with the CP/M slices described above. This -file is discussed separately under p-System in the [Operating Systems] +file is discussed separately under [UCSD p-System] in Operating Systems section. -### Floppy Disk Images +## Floppy Disk Images The floppy disk images are all intended to be used with 3.5" high-density, double-sided 1.44 MB floppy disk media. This is ideal for the default -floppy drive support included in RomWBW standard ROMs. +floppy disk drive support included in RomWBW standard ROMs. -For floppy disks, the .img file is written directly to the floppy media -as is. The floppy .img files are 1.44 MB which is the exact size of a +For floppy disks, the .img file is written directly to the floppy media +as is. The floppy .img files are 1.44 MB which is the exact size of a single 3.5" high density floppy disk. You will need a floppy disk drive of the same type connected to your modern computer to write this -image. Although modern computers do not come equipped with a floppy +image. Although modern computers do not come equipped with a floppy disk drive, you can still find USB floppy drives that work well for this. The floppy disk must be physically formatted **before** writing the -image onto it. You can do this with RomWBW using FDU as described -in the [Floppy Disks] section of this document. You can also format -the floppy using your modern computer, but using FDU on RomWBW is -preferable because it will allow you to use optimal physical sector -interleaving. FDU defaults to a sector interleave of 2 which will -result in faster floppy disk I/O. Other interleaves will work, but -will be slower. - -RomWBW includes a Windows application called RawWriteWin in the Tools -directory of the distribution. This simple application will let you -choose a file and write it to an attached floppy drive. For Linux/MacOS, -I think you can use the dd command (but I have not actually tried -this). It is probably obvious, but writing an image to a floppy disk +image onto it. You can do this with RomWBW using `FDU` as described +in the [Floppy Disk Formatting] section of this document. +While you can also format the floppy using your modern computer, +using `FDU` is preferable. + +RomWBW includes a Windows application called RawWriteWin in the Tools +directory of the distribution. This simple application will let you +choose a file and write it to an attached floppy disk drive. For Linux/MacOS, +I think you can use the dd command (but I have not actually tried +this). It is probably obvious, but writing an image to a floppy disk will overwrite and destroy all previous contents. Once the image has been written to the floppy disk, you can insert the floppy disk in your RomWBW floppy disk and read/write files on it according to the specific operating system instructions. If the image is bootable, then you will be able to boot from it by entering -the floppy drive's corresponding unit number at the RomWBW Boot Loader +the floppy disk drive's corresponding unit number at the RomWBW Boot Loader command prompt. -### Hard Disk Images +## Hard Disk Images Keeping in mind that a RomWBW hard disk (including CF/SD/USB devices) allows you to have multiple slices (CP/M filesystems), there are a -couple ways to image hard disk media. The easiest approach is to +couple ways to image hard disk media. The easiest approach is to use the "combo" disk image. This image is already prepared with 6 slices containing 5 ready-to-run OSes and a slice with -the WordStar application files. Alternatively, you can create your own +the WordStar application files. + +Alternatively, you can create your own hard disk image with the specific slice contents you choose. -#### Standard Hard Disk Physical Layout +### Standard Hard Disk Physical Layout As previously described in [Hard Disk Layouts], the exact placement of slices and optional FAT partition will vary depending on which disk @@ -1881,80 +2089,101 @@ of the individual filesystem images (slices) already concatenated together. The combo disk image contains the following 6 slices in the positions indicated: -| **Slice** | **Description** | -|-----------|------------------------------------------------------------------| -| Slice 0 | DRI CP/M 2.2 Operating System | -| Slice 1 | ZCPR-DJ & ZSDOS 1.1 Operating System | -| Slice 2 | NZCOM ZCPR 3.4 Operating System | -| Slice 3 | DRI CP/M 3 Operating System | -| Slice 4 | ZPM3 Operating System | -| Slice 5 | WordStar v4 & ZDE Applications | - -You will notice that there are actually 2 combo disk images in the +| **Slice** | **Description** | +|------------|-----------------------------------------| +| Slice 0 | DRI CP/M 2.2 Operating System | +| Slice 1 | ZCPR-DJ & ZSDOS 1.1 Operating System | +| Slice 2 | NZCOM ZCPR 3.4 Operating System | +| Slice 3 | DRI CP/M 3 Operating System | +| Slice 4 | ZPM3 Operating System | +| Slice 5 | WordStar v4 & ZDE Applications | +| Slice 6-63 | _blank unformatted_ | + +There are actually 2 primary combo disk images in the distribution. One for an hd512 disk layout (hd512_combo.img) and one for an hd1k disk layout (hd1k_combo.img). Simply use the image file that corresponds to your desired hard disk layout. Review the information in [Hard Disk Layouts] if you need more information of the disk layout options. -Although the combo disk images contain only 6 slices of content, they -reserve space to store 64 CP/M filesystem slices as well as a -single 384MB FAT filesystem. Keep in mind that the slices beyond the -first 6 are not yet initialized. You will need to use the `CLRDIR` -application to initialize them before their first use. Likewise, the -pre-allocated FAT partition must still be formatted using `FAT FORMAT` -in order to actually use it (see [FAT Filesystem Preparation]). -Alternatively, the FAT partition can be formatted on a modern computer. +> **Note**: Apart from the hd512 and hd1k combo disk images (mentioned above) +> there are actaully a number of other `hd1k_*_combo.img` files. These +> additional combo files are platform (generally romless) specific, +> and should be ignored unless you are on one of these platforms. +> If you are on one of these platforms you must use the correct combo file + +The combo disk image actaully only contains the initial partition table, +and the first 6 slices (Slice 0 to 5), this is approximately 49MB in size. +While the partition table reserves space to store 64 CP/M filesystem +slices as well as a single 384MB FAT filesystem, these area remain +empty, and must be manuall initialized manually. + +#### Combo Image Capacity The combo disk image layout was designed to fit well on a 1GB hard disk. The 64 CP/M slices (approximately 512MB) and 384MB FAT filesystem all fit well within a 1GB hard disk. This size choice was a bit arbitrary, but based on the idea that 1GB CF/SD/USB Media is easy and cheap to -acquire. It is fine if your hard disk is smaller than 1GB. It just -means that it will not be possible to use the pre-allocated FAT -filesystem partition and any CP/M filesystem slices that don't fit. You -will get "no disk" errors if you attempt to access a slice past the -end of the physical hard disk. +acquire. -**WARNING**: Your hard disk may be too small to contain the full 64 -CP/M filesystem slices. The true number of CP/M filesystem slices that +It is fine if your hard disk is smaller than 1GB. It just +means that it will not be possible to use the pre-allocated FAT +filesystem partition and any CP/M filesystem slices that don't fit. +The true number of CP/M filesystem slices that will fit on your specific physical hard disk can be calculated as described in [Hard Disk Capacity]. -For RomWBW systems with a single hard disk (typical), you will notice -that the OS will pre-allocate 8 drive letters to the hard disk. If the -combo disk image is being used, only the first 6 drive letters -(typically C: - H:) will have any content because the combo disk image -only provides 6 slices. The subsequent drives (typically I: - J:) will -have no content and will not be pre-initialized. If you want to use any -slices beyond the first 6 on the hard disk, then you must initialize -them using `CLRDIR` first. +If you attempt to access a slice past the end of the +physical hard disk you will get "no disk" errors. +You should calculate the maximum number of slices your hard disk +will support and do not exceed this number. + +#### Combo Image Advice A great way to maintain your own data on a hard disk is to put this data in slices beyond the first 6. By doing so, you can always -"re-image" your drive with the combo image without overlaying the data +"re-image" your drive media with the combo image without overlaying the data stored in the slices beyond the first 6. Just be very careful to use the same combo image layout (hd512 or hd1k) as you used originally. -Also remember to calculate the maximum number of slices your hard disk -will support and do not exceed this number. - -**WARNING**: The combo disk image includes a partition table at the -start of the image. If you re-image drive with the combo image, you -will overwrite this partition table. This is fine as long as you don't -make any changes to the partition table. If you manually customize the -partition table (using `FDISK80` or other partition management -software), those changes will be lost if you re-image your disk with a -new combo disk image. -#### Custom Hard Disk Image - -If you want to use specific slices in a specific order, you can easily -generate a custom hard disk image file. +### Custom Hard Disk Image For hard disks, each .img file represents a single slice (CP/M filesystem). Since a hard disk can contain many slices, you can just concatenate the slices (.img files) together to create your desired hard -disk image. For example, if you want to create a hard disk image that +disk image. + +If you look in the Binary directory of the distribution, you will see +that there are more disk (slice) images than the 6 that are included +in the "combo" disk images. These images are identified by looking +for the files that start with hd1k_ or hd512_. + +#### Adding Slices to Combo Image + +You can add slices to the combo disk images simply by tacking +slices onto the end. For example, if you want to add a slice +containing the MSX ROMs to the end of the combo image, you could +use one of the following command lines depending on your operating +system: + +Windows: + +`COPY /B hd1k_combo.img + hd1k_msxroms.img my_hd.img` + +Linus/MaxOS: + +`cat hd1k_combo.img hd1k_msxroms.img >my_hd.img` + +Note that you **must** be sure to use either the hd1k_ or hd512_ +prefixed files together. You cannot mix them. + +#### Creating a new Custom Image + +If you want to create a completely custom hard disk image that is not +based on the existing combo image, you can generate a disk image entirely +from scratch using whatever slices you want in whatever order you like. + +For example, if you want to create a hard disk image that has slices for CP/M 2.2, CP/M 3, and WordStar in the hd512 format, you would use the command line of your modern computer to create the final image: @@ -1979,6 +2208,12 @@ Linux/MacOS: `cat hd1k_prefix.dat hd1k_cpm22.img hd1k_cpm3.img hd1k_ws >hd.img` +> **Note**: Apart from the hd1k_prefix.dat file (mentioned above) +> there are actaully a number of other `hd1k_*_prefix.dat` files. These +> additional prefix files are platform (generally romless) specific, +> and should be ignored unless you are on one of these platforms. +> If you are on one of these platforms you must use the correct prefix file + In all of the examples above, the resulting file (hd.img) would now be written to your hard disk media and would be ready to use in a RomWBW system. @@ -1986,35 +2221,26 @@ system. If you wish to further customize or create new disk image definitions, please refer to the ReadMe.txt file in the Source/Images directory. -#### Writing Hard Disk Images +### Writing Hard Disk Images Once you have chosen a combo hard disk image file or prepared your own custom hard disk image file, it will need to be written to the media -using your modern computer. Note that you **do not** run `CLRDIR` or -`SYSCOPY` on the slices that contain the data. When using this method, +using your modern computer. When using this method, the disk will be partitioned and setup with 1 or more slices containing -ready-to-run bootable operating systems. You **do** need to run -`CLRDIR` and optionally `SYSCOPY` on slices that are not part of the -image (slices beyond the ones included with the image). +ready-to-run bootable operating systems. To write a hard disk image file onto your actual media (actual hard disk or CF/SD/USB Media), you need to use an image writing utility on your modern computer. Your modern computer will need to have an appropriate -interface or slot that accepts the media. To actually copy the image, -you can use the `dd` command on Linux or MacOS. On Windows, in the -"Tools" directory of the distribution, there is an application called -Win32DiskImager. In all cases, the image file should be written to the -media starting at the very first block or sector of the media. +interface or slot that accepts the media. To actually copy the image -You are not limited to the number of slices that are contained in the -image that you write to your hard disk media. You can use additional -slices as long your media has room for them. However, writing the disk -image will not initialize the additional slices. If these additional -slices were previously initialized, they will not be corrupted when you -write the new image and will still contain their previous contents. If -the additional slices were not previously initialized, you can use -`CLRDIR` to do so and optionally `SYSCOPY` if you want them to be -bootable. +* On Linux or MacOS , you can use the `dd` command. +* On Windows, in the "Tools" directory of the distribution, there is + an application called Win32DiskImager. + +In all cases, the image file should be written to the +media starting at the very first block or sector of the media. +This is the default behaviour on all software. To be entirely clear, writing a disk image file to your hard disk media will overwrite an pre-existing partition table and the number of slices @@ -2024,180 +2250,120 @@ slices as a place to maintain your personal data because these slices will survive re-imaging of the media. If you setup a FAT partition on your media, it will also survive the imaging process. -**WARNING**: In order for your additional slices and/or FAT partition to -survive re-imaging, you **must** follow these rules: - -* Do not modify the partition table of the media using FDISK80 or any - other partition management tools. -* Ensure that your hard disk image file uses the same disk layout - approach (hd512 or hd1k) as previously used on the media. +#### Media Usage and Initialization Once you have copied the image onto the hard disk media, you can move the media over to your RomWBW system. You can then boot to the -operating system slices by specifying "." at the +operating system slices by specifying (***\.\***) at the RomWBW Boot Loader command prompt. +See the section [Starting Operating Systems from Disk] for further details + +You are not limited to the number of slices that are contained in the +image that you write to your hard disk media. You can use additional +slices as long your media has room for them. + +However, writing the disk image will not initialize the additional slices. +You will need to use the `CLRDIR` application to initialize +any un-initialized slice before its first use, +and and optionally `SYSCOPY` if you want th slice to be bootable. +If you use the combo image this applies to slices 6 thru 63. +The procedure for this is documented in the +[Clearing (Formatting) Drives] section. + +Likewise, the pre-allocated FAT partition must still be formatted using +`FAT FORMAT` in order to actually use it (see [FAT Filesystem Preparation]). +Alternatively, the FAT partition can be formatted on a modern computer. -## In-situ Disk Preparation - -If you do not wish to use the pre-built disk images, it is entirely -possible to setup your disks manually and transfer contents to them. - -In this scenario, you will initialize the disk media entirely from -your RomWBW system. So, you need to start by inserting the disk -media, booting RomWBW, and confirming that the media is being -recognized. If RomWBW recognizes the media, it will indicate this -in the boot messages even though the media has not yet been prepared -for use. - -The following instructions are one way to proceed. This does not mean -to imply it is the only possible way. Also, note that RAM/ROM disk -media is prepared automatically. ROM disks are part of the ROM image -and RAM disks are initialized when an operating system is started. +#### Re-Imaging Existing Media -Start by booting RomWBW and launching either CP/M 2.2 or Z-System -from ROM using the Boot Loader 'C' or 'Z' commands respectively. You -can now use the tools on the ROM disk to prepare your disks. Note -that you will see the operating system assign disks/slices to -drives even though the disks/slices are not yet initialized. This is -normal and does not mean the disks/slices are ready to use. +In order for your additional slices and/or FAT partition to +survive re-imaging, you **must** follow these rules: -Preparation of floppy disk media is very simple. The floppy disk must -be physically formatted as discussed in [Floppy Disks] previously using -`FDU`. If a floppy is already physically formatted, you can wipe out -it's contents (make it empty again) by running `CLRDIR` on it. You can -confirm a floppy disk is ready for content by simply running a `DIR` -command on it. The `DIR` command should complete without error and -should list no files. At this point, you can proceed to copy files to -the floppy disk and (optionally) make the floppy bootable using -`SYSCOPY`. +* Do not modify the partition table of the media using FDISK80 or any + other partition management tools. +* Ensure that your hard disk image file uses the same disk layout + approach (hd512 or hd1k) as previously used on the media. -The rest of this section will cover preparation of hard disk media. To -start, it is critical that you decide which disk layout approach to use -(either hd512 or hd1k). Review the [Hard Disk Layouts] section if you -are not sure. +### Writing Hard Disk Slices -#### Partition Setup +This section covers techniques to copy partial images onto pre-existing media, +in effect performing a selective slice copy. These techniques currently **only** apply to +hd1k formatted media, which has a convienient 1MB size metric. +However adapting to hd512 is possible. -**WARNING**: Modifying the partition table of existing media will -make the data on the media inaccessible. - -Since the disk layout is determined by the existence (or lack) of -a RomWBW partition, you must start by running `FDISK80`. When FDISK80 -starts, enter the disk unit number of the new media. At this point, -use the 'I' command to initialize (reset) the partition table to an -empty state. If you are going to use the hd512 layout, then use 'W' to -write the empty table to the disk and exit. Remember that the lack of a -partition for RomWBW implies the legacy (hd512) layout. - -If you are going to use an hd1k layout, then you must create a partition -for the RomWBW CP/M slices. The partition can be placed anywhere you -want and can be any size >= 8MB. Keeping the size of the partition to -increments of 8MB makes sense. The partition type **must** be set to -'2e'. The typical location for the RomWBW partition is at 1MB with a -size of 512MB (64 slices). Below is an example of creating a RomWBW -partition following these guidelines. +On Linux/MacOS the `dd` command can be used to write data in a controlled manner. +The `dd` command supports options to define precisly souce +and destination offsets and sizes to copy. +From the documentation of `dd` the following options are important. ``` -FDISK80 for RomWBW, UNA, Mini-M68k, KISS-68030, SBC-188 ---- - Version 1.1-22 created 7-May-2020 - (Running under RomWBW HBIOS) + if=file Read input from file instead of the standard input. + of=file Write output to file instead of the standard output. + skip=n Skip n blocks from the beginning of the input before + copying. + seek=n Seek n blocks from the beginning of the output before + copying. + count=n Copy only n input blocks. + bs=n Set both input and output block size to n bytes instead + of the default 512 + ``` + +In the following examples we use the above options, noting the `of=` option +is specific to your computer but defines the block device that the target +media is mounted to in the operating system, +and `bs=1MB` defines the block size used in other parameters which is convienient +since it aligns perfectly with slices which are exactly 8MB +and the initial partition table is exactly 1MB. + +The commands in the examples below are run from the `Binary` folder of RomWBW distribution. + +#### Example 1 : Copy the Combo Image without replacing partition table + +In this example we will copy the (hd1k) combo image over our media +without replacing the partition table. In this example we assume the media +has already been formated with the combo image, and we have modified +the partition table, which we do not want to overrite. -HBIOS unit number [0..11]: 4 -Capacity of disk 4: ( 4G) 7813120 Geom 77381010 -Nr ---Type- A -- Start End LBA start LBA count Size - 1 00 *** empty *** - 2 00 *** empty *** - 3 00 *** empty *** - 4 00 *** empty *** ->>i ->>n -New partition number: 1 -Starting Cylinder (default 0): 1Mb -Ending Cylinder (or Size= "+nnn"): +512Mb ->>t -Change type of partition number: 1 -New type (in hex), "L" lists types: 2e ->>p -Nr ---Type- A -- Start End LBA start LBA count Size - 1 RomWBW 2e 8:0:1 1023:15:16 2048 1048576 512M - 2 00 *** empty *** - 3 00 *** empty *** - 4 00 *** empty *** ->>w -Do you really want to write to disk? [N/y]: y -Okay -FDISK exit. ``` +Binary % sudo dd if=hd1k_combo.img of=/dev/disk9 skip=1 seek=1 bs=1M -At this point, it is best to restart your system to make sure that -the operating system is aware of the partition table updates. Start -CP/M 2.2 or Z-System from ROM again. - -You are now ready to initialize the individual slices of your hard disk -media. On RomWBW, slice initialization is done using the CLRDIR -application. Since the CLRDIR application works on OS drive letters, -you must pay attention to how the OS drive letters are mapped to your -disk devices which is listed when the OS starts. Let's assume that C: -has been assigned to slice 0 of the disk you are initializing. You -would use `CLRDIR C:` to initialize C: and prepare it hold files. Note -that CLRDIR will prompt you for confirmation and you must respond with a -**capital** 'Y' to confirm. - -After CLRDIR completes, the slice should be ready to use by the operating -system via the drive letter assigned. Start by using the `DIR` command -on the drive (`DIR C:`). This should return without error, but list -no files. Next, use the `STAT` command to confirm that the disk is -using the layout you intended. For example, use `STAT C:DSK:` and -look at the number of "32 Byte Directory Entries". It should say -512 for a legacy (hd512) disk layout and 1024 for a modern (hd1024) -disk layout. - -Assuming you want to use additional slices, you should initialize them -using the same process. You may need to reassign OS drive letters to -access some slices that are beyond the ones automatically assigned. -You can use the `ASSIGN` command to handle this. +Password: -Once you have your slice(s) initialized, you can begin transferring -files to the associated drive letters. Refer to the [Transferring -Files] chapter for options to do this. If you want to make a slice -bootable, you will need to use `SYSCOPY` to setup the system track(s) -of the slice. The use of `SYSCOPY` depends on the operating system -and is described in the [Operating Systems] chapter of this document. +48+0 records in +48+0 records out +50331648 bytes transferred in 11.503776 secs (4745528 bytes/sec) +``` -As an example, let's assume you want to setup C: as a bootable -Z-System disk and add to it all the files from the ROM disk. To -setup the system track you would use: +The `skip=1` skips the first 1MB in the input file, and likewise +`seek=1` skips the first 1MB of the target media file we are writing to, +tus in effect we are skipping the first 1MB, which contains the +partition table itself. -``` -B>SYSCOPY C:=B:ZSYS.SYS +#### Example 2 : Copy the Games image to an empty slice of our media -SYSCOPY v2.0 for RomWBW CP/M, 17-Feb-2020 (CP/M 2 Mode) -Copyright 2020, Wayne Warthen, GNU GPL v3 +In this example we will copy the (hd1k) games image to Slice 6 (free) +of our existing media. In this example we assume the media +has already been formated with the combo image, which already +contains 6 slices (numbered from 0 to 5) +We are just coping the needed slice to this existing media +as a new slice (number 6) after the existing slices making it the 7th slice. -Transfer system image from B:ZSYS.SYS to C: (Y/N)? Y -Reading image... Writing image... Done ``` +Binary % sudo dd if=hd1k_games.img of=/dev/disk9 seek=49 bs=1M -Then, to copy all of the files from the ROM disk to C:, you could use -the `COPY` command as shown below. In this example, the list of files -being copied has been truncated. +Password: -``` -B>copy *.* m: -COPY Version 1.73 (for ZSDOS) 2 Jul 2001 -Copying B0:????????.??? to M0: - -> ASM .COM..Ok Verify..Ok - -> ASSIGN .COM..Ok Verify..Ok - -> CLRDIR .COM..Ok Verify..Ok - -> COMPARE .COM..Ok Verify..Ok - -> COPY .COM..Ok Verify..Ok - -> CPM .SYS..Ok Verify..Ok - 0 Errors +8+0 records in +8+0 records out +8388608 bytes transferred in 1.917296 secs (4375228 bytes/sec) ``` -Once this process succeeds, you will be able to boot directly to the -disk slice from the boot loader prompt. See the instructions in -[Starting Operating Systems from Disk] for details on this. +The `seek=49` skips the first 49MB of the media file we are writing to. +49 is calculated as `(slice number * 8) + 1`, +where 8 is the size of a slice +and 1 is the size of the partition table im megabytes. +Thus we are skipping 6 slices (in the combo image) +and writing to the 7th slice. # Operating Systems @@ -2222,8 +2388,8 @@ same basic filesystem format from DRI CP/M 2.2 (except for p-System). As a result, a formatted filesystem will be accessible to any operating system. The only possible issue is that if you turn on date/time stamping using the newer OSes, the older OSes will not understand this. -Files will not be corrupted, but the date/time stamps will not be -maintained. +The older OS will not corrupt the files, but the date/time stamps will +not be maintained. The following sections briefly describe the operating system options currently available and brief operating notes. @@ -2241,7 +2407,7 @@ less likely to encounter compatibility issues. #### Documentation -* [CPM Manual]($doc_root$/CPM Manual.pdf) +* [CPM Manual]($doc_root$/CPM/CPM Manual.pdf) #### Boot Disk @@ -2252,6 +2418,88 @@ call "CPM.SYS". For example: `SYSCOPY C:=B:CPM.SYS` +#### Character Device Mapping + +Character device mapping under CP/M 2.2 has 3 layers: + +CP/M Logical Device --> CP/M Physical Device --> RomWBW HBIOS Device + +The CP/M Logical Devices are: + +| Device | Description | +|--------|--------------------------------------------------------------------------| +| `CON:` | System console device, used by CCP for communication with the operator | +| `RDR:` | Paper tape reader device | +| `PUN:` | Paper tape punch device | +| `LST:` | Output list device | + +The CP/M Physical Devices are: + +| Device | Description | +|--------|--------------------------------------------------------------------------| +| `TTY:` | Teletype device (slow speed console) | +| `CRT:` | Cathode ray tube device (high speed console) | +| `BAT:` | Batch processing (input from `RDR:`, output to `LST:`) | +| `UC1:` | User-defined console | +| `PTR:` | Paper tape reader (high speed reader) | +| `UR1:` | User-defined reader #1 | +| `UR2:` | User-defined reader #2 | +| `PTP:` | Paper tape punch (high speed punch) | +| `UP1:` | User-defined punch #1 | +| `UP2:` | User-defined punch #2 | +| `LPT:` | Line printer | +| `UL1:` | User-defined list device #1 | + +CP/M Logical Devices are mapped to CP/M Physical Devices via the +IOBYTE at 0x0003 as shown below. + ++----------------+----------+----------+----------+----------+ +| Logical Device | `LST:` | `PUN:` | `RDR:` | `CON:` | ++----------------+----------+----------+----------+----------+ +| IOBYTE Bits | 7 6 | 5 4 | 3 2 | 1 0 | ++================+==========+==========+==========+==========+ +| 0 (0b00) | `TTY:` | `TTY:` | `TTY:` | `TTY:` | ++----------------+----------+----------+----------+----------+ +| 1 (0b01) | `CRT:` | `PTP:` | `PTR:` | `CRT:` | ++----------------+----------+----------+----------+----------+ +| 2 (0b10) | `LPT:` | `UP1:` | `UR1:` | `BAT:` | ++----------------+----------+----------+----------+----------+ +| 3 (0b11) | `UL1:` | `UP2:` | `UR2:` | `UC1:` | ++----------------+----------+----------+----------+----------+ + +The mappings above can be managed using the `STAT` command. This +command essentially just modifies the IOBYTE value. + +CP/M Physical Devices are mapped to RomWBW HBIOS devices during +the boot process depending on the number of HBIOS Char devices +in the system. + +All CP/M Physical Devices are initially mapped to HBIOS Char 0. +If additional HBIOS Char devices are available in the system, they will +be mapped as below: + +| CP/M | RomWBW HBIOS | +|--------|------------------| +| `TTY:` | Char 0 | +| `CRT:` | CRT | +| `BAT:` | CP/M RDR/LST | +| `UC1:` | Char 1 | +| `PTR:` | Char 1 | +| `UR1:` | Char 2 | +| `UR2:` | Char 3 | +| `PTP:` | Char 1 | +| `UP1:` | Char 2 | +| `UP2:` | Char 3 | +| `LPT:` | Char 1 | +| `UL1:` | Char 2 | + +Normally, the HBIOS Console device (Loader prompt) is on HBIOS Device +Char 0. If it has been reassigned to a different HBIOS character +device before launching CP/M, then the above mapping will be modified. +TTY: will be assigned to the current HBIOS console Char device. The +remaining assignments will be filled in with the other Char devices +as available. + #### Notes * You can change media, but it must be done while at the OS @@ -2287,9 +2535,9 @@ via the NZ-COM adaptation (see below). #### Documentation -* [ZCPR Manual]($doc_root$/ZCPR Manual.pdf) -* [ZCPR-DJ]($doc_root$/ZCPR-DJ.doc) -* [ZSDOS Manual]($doc_root$/ZSDOS Manual.pdf) +* [ZCPR Manual]($doc_root$/CPM/ZCPR Manual.pdf) +* [ZCPR-DJ]($doc_root$/CPM/ZCPR-DJ.doc) +* [ZSDOS Manual]($doc_root$/CPM/ZSDOS Manual.pdf) #### Boot Disk @@ -2300,6 +2548,12 @@ call "ZSYS.SYS". For example: `SYSCOPY C:=B:ZSYS.SYS` +#### Character Device Mapping + +Mapping of character devices to RomWBW HBIOS Character devices +operates exactly the same as described in [Digital Research CP/M 2.2]. +The CP/M 2.2 `STAT` command is used to manipulate the device mappings. + #### Notes * Although most CP/M 2.2 applications will run under Z-System, some @@ -2312,32 +2566,16 @@ call "ZSYS.SYS". For example: * ZSDOS has a concept of fast relog of drives. This means that after a warm start, it avoids the overhead of relogging all the disk drives. - There are times when this causes issues. After using tools like CLRDIR + There are times when this causes issues. After using tools like `CLRDIR` or MAP, you may need to run “RELOG” to get the drive properly recognized by ZSDOS. -* RomWBW fully supports both DateStamper and P2DOS file date/time - stamping. You must load the desired stamping module (`LDDS` for - DateStamper or `LDP2D` for P2DOS). This could be automated using - a `PROFILE.SUB` file. Follow the ZSDOS documentation to initialize - a disk for stamping. - * ZSVSTAMP expects to be running under the ZCPR 3.X command processor. By default, RomWBW uses ZCPR 1.0 (intentionally, to reduce space usage) and ZSVSTAMP will just abort in this case. It will work fine if you implement NZCOM. ZSVSTAMP is included solely to facilitate usage if/when you install NZCOM. -* FILEDATE only works with DateStamper style date stamping. If you run - it on a drive that is not initialized for DateStamper, it will complain - `FILEDATE, !!!TIME&.DAT missing`. This is normal and just means that - you have not initialized that drive for DateStamper (using PUTDS). - -* ZXD will handle either DateStamper or P2DOS type date stamping. - However, it **must** be configured appropriately. As distributed, it will - look for P2DOS date stamps. Use ZCNFG to reconfigure it for P2DOS if - that is what you are using. - * Many of the tools can be configured (using either ZCNFG or DSCONFIG). The configuration process modifies the actual application file itself. This will fail if you try to modify one that is on the ROM disk because @@ -2348,10 +2586,6 @@ call "ZSYS.SYS". For example: SETTERM. So, run SETTERM on DSCONFIG before using DSCONFIG to configure DATSWEEP! -* After using PUTDS to initialize a directory for ZDS date stamping, I - am finding that it is necessary to run RELOG before the stamping - routines will actually start working. - * Generic CP/M PIP and ZSDOS path searching do not mix well if you use PIP to copy to or from a directory in the ZSDOS search path. Best to use COPY from the ZSDOS distribution. @@ -2366,6 +2600,11 @@ a host OS. On the RomWBW NZCOM disk images, the boot OS is ZSDOS 1.1. A `PROFILE.SUB` file is included which automatically launches NZCOM as soon as ZSDOS loads. +NZCOM is a companion product to Z3PLUS, they are almost identical having +been written by the same team. The only difference is the base operating +system on which they run, but the architecture, the tools, libraries, +files, etc are all primarily the same. + NZCOM is highly configurable. The RomWBW distribution has been configured in the most basic way possible. You should refer to the documentation and use `MKZCM` as desired to customize your system. @@ -2376,7 +2615,9 @@ Manual.pdf" document in order to use this operating system effectively. #### Documentation -* [NZCOM Users Manual]($doc_root$/NZCOM Users Manual.pdf) +* [NZCOM Users Manual]($doc_root$/CPM/NZCOM Users Manual.pdf) +* [Z-System Users Guide]($doc_root$/CPM/Z-System Users Guide.pdf) +* [ZCPR3.3 User Guide]($doc_root$/CPM/ZCPR3.3 User Guide.pdf) #### Boot Disk @@ -2384,6 +2625,18 @@ Since NZ-COM boots via Z-System, you can make a bootable NZ-COM disk using `ZSYS.SYS` as described in [Z-System] above. You will need to add a `PROFILE.SUB` file to auto-start NZ-COM itself. +#### Character Device Mapping + +Mapping of character devices to RomWBW HBIOS Character devices +operates exactly the same as described in [Digital Research CP/M 2.2]. +However, it is **not** possible to manipulate the CP/M Logical to +Physical device mapping using the `STAT` command. The mapping is +static. + +Note: A custom ZCPR IOP module could theoretically be used to manage +the character device mappings. RomWBW does not provide this module +and writing an IOP module is beyond the scope of this document. + #### Notes * All of the notes for [Z-System] above generally apply to NZCOM. @@ -2391,6 +2644,10 @@ will need to add a `PROFILE.SUB` file to auto-start NZ-COM itself. * There is no `DIR` command, you must use `SDZ` instead. If you don't like this, look into the `ALIAS` facility. +* For consistency with other ZCPR3 operating systems (ZPM3, Z3PLUS) + the SHOW.COM and HELP.COM command files were renamed to ZSHOW.COM + and ZHELP.COM + ## Digital Research CP/M 3 This is the Digital Research follow-up product to their very popular @@ -2401,10 +2658,10 @@ has a new suite of support tools and help system. #### Documentation -* [CPM3 Users Guide]($doc_root$/CPM3 Users Guide.pdf) -* [CPM3 Command Summary]($doc_root$/CPM3 Command Summary.pdf) -* [CPM3 Programmers Guide]($doc_root$/CPM3 Programmers Guide.pdf) -* [CPM3 System Guide]($doc_root$/CPM3 System Guide.pdf) +* [CPM3 Users Guide]($doc_root$/CPM/CPM3 Users Guide.pdf) +* [CPM3 Command Summary]($doc_root$/CPM/CPM3 Command Summary.pdf) +* [CPM3 Programmers Guide]($doc_root$/CPM/CPM3 Programmers Guide.pdf) +* [CPM3 System Guide]($doc_root$/CPM/CPM3 System Guide.pdf) #### Boot Disk @@ -2450,6 +2707,36 @@ COPY A:CCP.COM F: Note in the example above that `CPM3BNK.SYS` is renamed to `CPM3.SYS` in the copy command. +#### Character Device Mapping + +Character device mapping under CP/M 3 has 3 layers: + +CP/M Logical Device --> CP/M Physical Device --> RomWBW HBIOS Device + +The primary CP/M Logical Devices are: + +| Device | Description | +|--------|--------------------------------------------------------------------------| +| `CON:` | Console input or output device | +| `AUX:` | Auxiliary Input or Output Device | +| `LST:` | List output device, usually the printer | + +There are various aliases for these devices. Please refer to the CP/M 3 +Users Guide for more information. + +The mapping of CP/M 3 Logical Devices to Physical Devices is performed +using the `DEVICE` command. + +CP/M 3 refers to Physical Character Devices using the `COM` device +label. These `COM` devices are mapped directly to the RomWBW HBIOS Char +devices as described below: + +| `COM0:` --> HBIOS Char 0 +| `COM1:` --> HBIOS Char 1 +| `COM2:` --> HBIOS Char 2 +| . . . +| `COMn:` --> HBIOS Char n + #### Notes - The `COPYSYS` command described in the DRI CP/M 3 documentation is @@ -2467,6 +2754,58 @@ in the copy command. has not been performed on the CP/M 3 disk image. Follow the CP/M 3 documentation to complete this process, if desired. +## Z3PLUS Z-System for CP/M-Plus + +Z3PLUS is a much further refined version of Z-System (ZCPR 3.4). Z3PLUS +was sold as an enhancement for existing users of CP/M 3. +For this reason, (by design) Z3PLUS does not provide a way to boot +directly from disk. Rather, it is loaded after the system boots into +CP/M 3. A `PROFILE.SUB` file is included which automatically launches +Z3PLUS as soon as CP/M 3 loads. + +Z3PLUS is a companion product to NZ-COM, they are almost identical having +been written by the same team. The only difference is the base operating +system on which they run, but the architecture, the tools, libraries, +files, etc are all primarily the same. + +Z3PLUS is highly configurable. The RomWBW distribution has been +configured in the most basic way possible. You should refer to the +documentation to customize your system. + +Z3PLUS has substantially more functionality than CP/M 3 or the basic +Z-System. It is important to read the "Z3PLUS Users Manual.pdf" +document in order to use this operating system effectively. + +#### Documentation + +* [Z3PLUS Users Manual]($doc_root$/CPM/Z3PLUS Users Manual.pdf) +* [Z-System Users Guide]($doc_root$/CPM/Z-System Users Guide.pdf) +* [ZCPR3.3 User Guide]($doc_root$/CPM/ZCPR3.3 User Guide.pdf) + +#### Boot Disk + +Since Z3PLUS boots via CP/M 3, you first must make the disk CP/M 3 +bootable. This is not a simple process, as well as placing `CPMLDR.SYS` on +the system track of the disk there are several files that are required +on the disk itself.This is described in [Digital Research CP/M 3] +section above. + +You will need to add a `PROFILE.SUB` file to auto-start Z3PLUS itself. + +#### Character Device Mapping + +Mapping of character devices to RomWBW HBIOS Character devices +operates exactly the same as described in [Digital Research CP/M 3]. +The CP/M 3 `DEVICE` command is used to manipulate the device mappings. + +#### Notes + +* All of the notes for [Digital Research CP/M 3] above generally + apply to Z3PLUS. + +* Some applications in the Z3PLUS distribution have been upgraded + with newer versions. This is done with in + ## ZPM3 Simeon Cran's ZPM3 is an interesting combination of the features of both @@ -2536,6 +2875,12 @@ COPY A:ZINSTAL.ZPM F: COPY A:STARTZPM.COM F: ``` +#### Character Device Mapping + +Mapping of character devices to RomWBW HBIOS Character devices +operates exactly the same as described in [Digital Research CP/M 3]. +The CP/M 3 `DEVICE` command is used to manipulate the device mappings. + #### Notes - The ZPM3 operating system is contained in the file called CPM3.SYS @@ -2553,13 +2898,12 @@ regarding the RomWBW adaptation and customizations. #### Documentation -* [QP/M 2.7 Installation Guide and Supplements]($doc_root$/qpm27.pdf) -* [QP/M 2.7 Interface Guide]($doc_root$/qdos27.pdf) -* [QP/M 2.7 Features and Facilities]($doc_root$/qcp27.pdf) +* [QP/M 2.7 Installation Guide and Supplements]($doc_root$/CPM/qpm27.pdf) +* [QP/M 2.7 Interface Guide]($doc_root$/CPM/qdos27.pdf) +* [QP/M 2.7 Features and Facilities]($doc_root$/CPM/qcp27.pdf) #### Boot Disk - To create or update a bootable QP/M Z-System disk, a special process is required. QP/M is not provided in source format. You are expected to install QP/M over an existing CP/M installation using the @@ -2590,6 +2934,14 @@ pre-built RomWBW QP/M disk image includes a couple of specific non-default settings to optimize use with RomWBW. Please review the notes in the ReadMe.txt file in Source/Images/d_qpm. +#### Character Device Mapping + +Mapping of character devices to RomWBW HBIOS Character devices operates +exactly the same as described in [Digital Research CP/M 2.2]. The +mappings can be viewed or modified using the QP/M `QSTAT` command which +is analogous to the CP/M 2.2 `STAT` command. Do **not** use the CP/M +2.2 `STAT` command under QP/M. + #### Notes - QPM is not available as source. This implementation was based @@ -2628,7 +2980,19 @@ selecting slice 0 of the corresponding hard disk unit at the RomWBW Boot Loader prompt. Do not attempt to use CP/M slices on the same disk. -Refer to the ReadMe.txt file in Source/pSys for more details. +Due to limitations in the p-System configuration mechanism, it does +not recognize the arrow keys of an ANSI Terminal. To work around +this, the following control keys have been defined: + +| Function | Key | +|------------|------------| +| Up | ctrl+E | +| Down | ctrl+X | +| Left | ctrl+S | +| Right | ctrl+D | + +Refer to [Source/pSys/ReadMe.txt]($file_root$/Source/pSys/ReadMe.txt) +for more details about the p-System adaptation. #### Documentation @@ -2641,6 +3005,13 @@ scratch under RomWBW. This has already been done as part of the porting process. You must use the provided p-System hard disk image file which is bootable. +#### Character Device Mapping + +RomWBW Character Devices are automatically assigned to p-System devices +at startup. The current HBIOS Console device is assigned to CONSOLE:. +The next available HBIOS Char device is assigned to REMIN:/REMOUT:. The +next available HBIOS Char devices is assigned to PRINTER: + #### Notes * There is no floppy support at this time. @@ -2844,202 +3215,16 @@ floppy disk and hard disk images. | TUNE | Play .PT2, .PT3, .MYM audio files. | | INTTEST | Test interrupt vector hooking. | -# FAT Filesystem - -The FAT filesystem format that originated with MS-DOS is almost -ubiquitous across modern computers. Virtually all operating systems -now support reading and writing files to a FAT filesystem. For this -reason, RomWBW now has the ability to read and write files on FAT -filesystems. - -This is accomplished by running a RomWBW custom application called `FAT`. -This application understands both FAT filesystems as well as CP/M filesystems. - -* Files can be copied between a FAT filesystem and a CP/M filesystem, - but you cannot execute files directly from a FAT filesystem. -* FAT12, FAT16, and FAT32 formats are supported. -* Long filenames are not supported. Files with long filenames will - show up with their names truncated into the older 8.3 convention. -* A FAT filesystem can be located on floppy or hard disk media. For - hard disk media, a valid FAT Filesystem partition must exist. -* Note that CP/M (and compatible) OSes do not support all of the - filename characters that a modern computer does. The following - characters are **not permitted** in a CP/M filename: - - `< > . , ; : = ? * [ ] _ % | ( ) / \` - - The FAT application does not auto-rename files when it encounters - invalid filenames. It will just issue an error and quit. - Additionally, the error message is not very clear about the problem. - -## FAT Filesystem Preparation - -In general, you can create media formatted with a FAT filesystem on -your RomWBW computer or on your modern computer. We will only be -discussing the RomWBW-based approach here. - -In the case of a floppy disk, you can use the `FAT` application to -format the floppy disk. The floppy disk must already be physically -formatted using RomWBW FDU or equivalent. If your floppy disk is on -RomWBW disk unit 2, you could use `FAT FORMAT 2:`. This will overwrite -the floppy with a FAT filesystem and all previous contents will be lost. -Once formatted this way, the floppy disk can be used in a floppy drive -attached to a modern computer or it can be used on RomWBW using the -other `FAT` tool commands. - -In the case of hard disk media, it is necessary to have a FAT -partition. If you prepared your RomWBW hard disk media using the -disk image process, then this partition will already be defined and -you do not need to recreate it. This default FAT partition is located -at approximately 512MB from the start of your disk and it is 384MB in -size. So, your hard disk media must be 1GB or greater to use this -default FAT partition. - -You can confirm the existence of the FAT partition with `FDISK80` by -using the 'P' command to show the current partition table. Here is an -example of a partition table listing from `FDISK80` that includes the -FAT partition (labelled "FAT16"): - -``` -Capacity of disk 4: ( 4G) 7813120 Geom 77381010 -Nr ---Type- A -- Start End LBA start LBA count Size - 1 RomWBW 2e 8:0:1 1023:15:16 2048 1048576 512M - 2 FAT16 06 1023:0:1 1023:15:16 1050624 786432 384M - 3 00 *** empty *** - 4 00 *** empty *** -``` - -If your hard disk media does not have a FAT partition already defined, -you will need to define one using FDISK80 by using the 'N' command. -Ensure that the location and size of the FAT partition does not -overlap any of the CP/M slice area and that it fits within the size -of your media. - -Once the partition is defined, you will still need to format it. Just -as with a floppy disk, you use the `FAT` tool to do this. If your -hard disk media is on RomWBW disk unit 4, you would use `FAT FORMAT 4:`. -This will look something like this: - -``` -E>fat format 4: - -About to format FAT Filesystem on Disk Unit #4. -All existing FAT partition data will be destroyed!!! - -Continue (y/n)? - -Formatting... Done -``` - -Your FAT filesystem is now ready to use. - -If your RomWBW system has multiple disk drives/slots, you can also just -create a disk with your modern computer that is a dedicated FAT -filesystem disk. You can use your modern computer to format the disk -(floppy, CF Card, SD Card, etc.), then insert the disk in your RomWBW -computer and access it using `FAT` based on its RomWBW unit number. - -**WARNING**: Microsoft Windows will sometimes suggest reformatting -partitions that it does not recognize. If you are prompted to format a -partition of your SD/CF/USB Media when inserting the card into a Windows -computer, you probably want to select Cancel. - -## FAT Application Usage - -Complete instructions for the `FAT` application are found in $doc_apps$. -Here, we will just provide a couple of simple examples. Note that the -FAT application is not on the ROM disk because it is too large to -include there. - -The most important thing to understand about the `FAT` application is -how it refers to FAT filesystems vs. CP/M filesystems. It infers this -based on the file specification provided. If you use a specification -like `C:SAMPLE.TXT`, it will use the C: drive of your CP/M operating -system. If you use a specification like `4:SAMPLE.TXT`, it will use -the FAT filesystem on the disk in RomWBW disk unit 4. Basically, if -you start your file or directory specification with a number followed -by a colon, it means FAT filesystem. Anything else will mean CP/M -filesystem. - -Here are a few examples. This first example shows how to get a FAT -directory listing from RomWBW disk unit 4: - -``` -E>fat dir 4: - -Directory of 4: - - -E> -``` - -As you can see, there are currently no files there. Now let's copy -a file from CP/M to the FAT directory: - -``` -E>fat copy sample.txt 4: - -Copying... - -SAMPLE.TXT ==> 4:/SAMPLE.TXT ... [OK] - - 1 File(s) Copied -``` - -If we list the FAT directory again, you will see the file: - -``` -E>fat dir 4: - -Directory of 4: - -01/30/2023 17:50:14 29952 ---A SAMPLE.TXT - -``` - -Now let's copy the file from the FAT filesystem back to CP/M. This -time we will get a warning about overwriting the file. For this -example, we don't want to do that, so we abort and reissue the -command specifying a new filename to use: - -``` -E>fat copy 4:sample.txt e: - -Copying... - -4:/SAMPLE.TXT ==> E:SAMPLE.TXT Overwrite? (Y/N) [Skipped] - - 0 File(s) Copied - -E>fat copy 4:sample.txt e:sample2.txt - -Copying... - -4:/SAMPLE.TXT ==> E:SAMPLE2.TXT ... [OK] - - 1 File(s) Copied -``` - -Finally, let's try using wildcards: - -``` -E>fat copy sample*.* 4: - -Copying... - -SAMPLE.TXT ==> 4:/SAMPLE.TXT Overwrite? (Y/N) ... [OK] -SAMPLE2.TXT ==> 4:/SAMPLE2.TXT ... [OK] - - 2 File(s) Copied -``` - # Real Time Clock RomWBW supports a variety of real time clock hardware. If your system has this hardware, then it will be able to maintain the current date and time even while your system is turned off. + Additionally, depending on the operating system being used, you may be able to utilize date/time stamping of files. +To facilitate this a CP/M clock driver (WBWCLK) has been included +inside `CLOCKS.DAT` that will read the clock via a RomWBW HBIOS call You can determine if your system has a real time clock present (and functioning) by looking at the boot messages. Here is an example of @@ -3065,6 +3250,8 @@ RomwWBW includes two utilities for displaying or setting the date/time stored by the RTC. They are both a bit different and are briefly described below. +A third utility `TESTCLOK` is also included as part of ZSDOS + ### WDATE Utility The `WDATE` utility (contributed by Kevin Boone) is an application @@ -3144,6 +3331,57 @@ Do **not** enable charging unless you are sure that your system supports this. If your RTC is being powered by a normal battery, it would be dangerous to enable charging. +### TESTCLOK Utility + +The `TESTCLOK` utility is used to test a selected CPM clock driver +loaded from the CLOCKS.DAT file. After selecting the location of CLOCKS.DAT +and the clock driver (45. WBWCLK) it displays the currently configured time +until a key is pressed. + +``` +A>testclok + +TESTCLOK V1.0 Copyright (C) 1988 H.F. Bower / C.W. Cotrill + +Extract Clock from Library ([Y]/N) : Y +Location of CLOCKS.DAT [A0:] : + + 1. ACTRIX 2. ALSPA 3. AMPRO-LB + 4. ANLYTCL-PRD 5. AP2-CDZ180 6. AP2-THND/MT + 7. AP2-TIMASTR 8. AP2E+PCP-TM 9. AP2E+PCPI + 10. AP2E-THUNDR 11. AP2E-TMASTR 12. BIG-BD-II + 13. BP-BIOS 14. CCS-WALLCLK 15. CPUPRO-SSB1 + 16. ELECTR-MFIO 17. EPSON-QX10 18. ETS180IO+ + 19. H19-SUPER19 20. H19-ULTRA 21. H19-WATZMAN + 22. H89-BITZERO 23. H89-PC12 24. H89-WIDGET + 25. H89-WISE 26. H89UTI 27. HEATH-BIOS + 28. HOUSEMASTER 29. K83-HOLMES 30. KAYPRO-84 + 31. KENMOR-ZTIM 32. KPRO-ADVENT 33. KPRO-LEGACY + 34. MD3-MACK 35. MTN100K-DAY 36. ONEAC-ON! + 37. OTRANA-ATCH 38. P&T-HEARTBT 39. QTSYS-S100 + 40. RELATIVE 41. S100-5832 42. SB180-HRTBT + 43. SB180-XBIOS 44. SIMHCLOK 45. WBWCLK + 46. XEROX-820 47. ZSDOS-BIOS + +Enter Clock Driver Selection : 45 + +..Loading : WBWCLK ... +Linking Clock Module... OK +RomWBW HBIOS Clock 1.1 + +RomWBW Series HBIOS Clock + +Press any key to quit... + + 19 Oct 2023 14:24:34 +``` + +Since this runs at the CPM driver level it is useful as an end-to-end test +to prove that date time stamping is able to read the correct time + +The `TESTCLOK` utility is provided by ZSDOS, plese see the ZSDOS Manual +for further information + ## Date/Time File Stamping If an RTC is available in your system, then most operating systems @@ -3152,10 +3390,16 @@ date/time of file creation, update, and or access in the directory. This capability is available in all of the RomWBW operating system except the original DRI CP/M 2.2. -In some cases (such as ZSDOS), you must load an RSX (memory resident -utility) to enable date/time stamping of files. Additionally, you -will need to initialize the directory. The procedure varies in each -operation system, so you must review the associated documentation. +Three types of date/time stamping are supported using realtime clock +supported by RomWBW HBIOS. DateStamper, NZT and P2DOS. + +In some cases (such as ZSDOS), you must load an RSX (memory resident +utility) to enable date/time stamping of files. This could be automated +using a `PROFILE.SUB` file. +Preconfigured loaders are provided, bypassing the need to use SETUPZST. + +Additionally, you will need to initialize the directory. The procedure varies +depending on the date/time stamping mechanism, so you must review the associated documentation. The date/time stamping mechanisms for each operating system are generally not compatible. If you initialize a directory for a type @@ -3166,6 +3410,71 @@ mechanism. Doing so may corrupt the directory. The RomWBW disk images do not have date/time stamping initialized. This is to avoid any chance of directory corruption. +### DateStamper + +DateStamper datestamping follows the standard set by Plu*Perfect Systems. +This method stores stamps in a disk file named `!!!TIME&.DAT`. +Only DateStamper stamping stores full time and date stamps for +file Creation, Last Modification, and Last Access, +and may be used with any CP/M diskette format. In addition, +the DateStamper protocol is supported by a mature set of compatible utilities. + +Key Utilities + +* LDDS.COM - Load DateStamper date/time stamping resident extension. (RomWBW Provided) +* PUTDS.COM - Prepare disk for DateStamper date/time stamping. + +After using PUTDS to initialize a directory for ZDS date stamping, +it may be necessary to run RELOG before the stamping routines +will actually start working. + +### P2DOS (CP/M Plus compatible) + +CP/M Plus-type datestamping is also widely used due to the popularity +of CP/M Plus (also know as CP/M 3). CP/M Plus-type file datestamping uses +directory sectors to store file datestamps which may be accessed more quickly +by programs, but there is no Last File Access stamp. Finally, the range of +utilities for this type of stamps is more limited than for the DateStamper protocol. + +Key Utilities + +* LDP2D.COM - Load P2DOS date/time stamping resident extension. (RomWBW Provided) +* INITDIR.COM - Prepares disks for P2DOS-type file stamping. + +### NZT + +_The use of NZT needs to be further documented_ + +Key Utilities + +* LDNZT.COM - Load NZT date/time stamping resident extension. (RomWBW Provided) + +### Additional Notes + +The following files have been provided, customised and tested for for use in RomWBW + +* `CLOCKS.DAT` - Library of clock drivers, which has been updated to include + the RomWBW clock driver WBWCLK, and also includes the SIMHCLOK clock driver. + The file is just a standard LU type library and is easily updated using NULU. + The members are the relocatable binaries, but with the .REL extension removed. +* `STAMPS.DAT` - Library of available date/time stamping modules for SETUPZST. + The file has been replaced with an updated version from the Walnut Creek CP/M CDROM. + The original version has a bug that prevents RSX (resident system extension) mode + to load properly. + +Additional Notes + +* `SETUPZST` (provided by ZSDOS) Should not normally be needed since the + creation of the appropriate LDTIM loaders has already been performed. +* `FILEDATE` only works with DateStamper style date stamping. If you run + it on a drive that is not initialized for DateStamper, it will complain + `FILEDATE, !!!TIME&.DAT missing`. This is normal and just means that + you have not initialized that drive for DateStamper (using PUTDS). +* `ZXD` will handle either DateStamper or P2DOS type date stamping. + However, it **must** be configured appropriately. As distributed, it will + look for P2DOS date stamps. Use ZCNFG to reconfigure it for P2DOS if + that is what you are using. + ## Timezone None of the operating systems distributed with RomWBW have any concept @@ -3682,35 +3991,222 @@ detail in the Source/Images directory of the distribution. ## FAT Filesystem Transfers -The ability to interact with FAT filesystems was covered in -[FAT Filesystem]. This capability means that you can generally use your - modern computer to make an SD Card, CF Card, or USB Drive with a -standard FAT32 filesystem on it, then place that media in your RomWBW -computer and access the files. +The FAT filesystem format that originated with MS-DOS is almost +ubiquitous across modern computers. Virtually all operating systems +now support reading and writing files to a FAT filesystem. For this +reason, RomWBW now has the ability to read and write files on FAT +filesystems. + +This capability means that you can generally use your modern computer +to make an SD Card, CF Card, or USB Drive with a standard FAT filesystem +on it, then place that media in your RomWBW computer and access the files. + +* Files can be copied between a FAT filesystem and a CP/M filesystem, + but you cannot execute files directly from a FAT filesystem. + +* FAT12, FAT16, and FAT32 formats are supported. + +* Long filenames are not supported. Files with long filenames will + show up with their names truncated into the older 8.3 convention. + If you have files on your modern computer with long filenames, + it is usually easiest to rename them on the modern computer. + +* A FAT filesystem can be located on floppy or hard disk media. For + hard disk media, a valid FAT Filesystem partition must exist. + +Some additional **Notes** and **WARNINGS** Things to be careful about + +* CP/M (and compatible) OSes do not support all of the + filename characters that a modern computer does. The following + characters are **not permitted** in a CP/M filename: + + `< > . , ; : = ? * [ ] _ % | ( ) / \` + + The FAT application does not auto-rename files when it encounters + invalid filenames. It will just issue an error and quit. + Additionally, the error message is not very clear about the problem. + +* Microsoft Windows will sometimes suggest **reformatting** + partitions that it does not recognize (e.g. RomWBW). + If you are using media that contains both a FAT partition + and a RomWBW partition you may prompted to format a partition of your + SD/CF/USB Media when inserting the card into a Windows computer, + you probably want to select Cancel. + +### FAT Filesystem Preparation + +In general, you can create media formatted with a FAT filesystem on +your RomWBW computer or on your modern computer. We will only be +discussing the RomWBW-based approach here. + +#### Floppy Disk + +In the case of a floppy disk, you can use the `FAT` application to +format the floppy disk. The floppy disk must already be physically +formatted using RomWBW FDU or equivalent. If your floppy disk is on +RomWBW disk unit 2, you could use `FAT FORMAT 2:`. This will overwrite +the floppy with a FAT filesystem and all previous contents will be lost. +Once formatted this way, the floppy disk can be used in a floppy drive +attached to a modern computer or it can be used on RomWBW using the +other `FAT` tool commands. + +#### Hard Disk + +In the case of hard disk media, it is necessary to have a FAT +partition. If you prepared your RomWBW hard disk media using the +disk image process, then this partition will already be defined and +you do not need to recreate it. This default FAT partition is located +at approximately 512MB from the start of your disk and it is 384MB in +size. So, your hard disk media must be 1GB or greater to use this +default FAT partition. + +You can confirm the existence of the FAT partition with `FDISK80` by +using the 'P' command to show the current partition table. Here is an +example of a partition table listing from `FDISK80` that includes the +FAT partition (labelled "FAT16"): + +``` +Capacity of disk 4: ( 4G) 7813120 Geom 77381010 +Nr ---Type- A -- Start End LBA start LBA count Size + 1 RomWBW 2e 8:0:1 1023:15:16 2048 1048576 512M + 2 FAT16 06 1023:0:1 1023:15:16 1050624 786432 384M + 3 00 *** empty *** + 4 00 *** empty *** +``` + +If your hard disk media does not have a FAT partition already defined, +you will need to define one using FDISK80 by using the 'N' command. +Ensure that the location and size of the FAT partition does not +overlap any of the CP/M slice area and that it fits within the size +of your media. + +Once the partition is defined, you will still need to format it. Just +as with a floppy disk, you use the `FAT` tool to do this. If your +hard disk media is on RomWBW disk unit 4, you would use `FAT FORMAT 4:`. +This will look something like this: + +``` +E>fat format 4: + +About to format FAT Filesystem on Disk Unit #4. +All existing FAT partition data will be destroyed!!! + +Continue (y/n)? + +Formatting... Done +``` + +Your FAT filesystem is now ready to use. + +If your RomWBW system has multiple disk drives/slots, you can also just +create a disk with your modern computer that is a dedicated FAT +filesystem disk. You can use your modern computer to format the disk +(floppy, CF Card, SD Card, etc.), then insert the disk in your RomWBW +computer and access it using `FAT` based on its RomWBW unit number. + +### FAT Application Usage -When formatting the media on your modern computer, be sure to pick the -FAT filesystem. NTFS and other filesystems will not work. As previously -mentioned, the `FAT` application does not understand long filenames, -only the traditional 8.3 filenames. If you have files on your modern -computer with long filenames, it is usually easiest to rename them on -the modern computer. +Transferring files is accomplished by running a RomWBW custom application +called `FAT`. This application understands both FAT filesystems as well +as CP/M filesystems. To copy files from your modern computer to your RomWBW computer, start by putting the disk media with the FAT filesystem in your modern computer. The modern computer should recognize it. Then copy the files you want to get to your RomWBW computer onto this media. Once done, remove the media from your modern computer and insert it in the RomWBW -computer. Finally, use the `FAT` tool to copy the files onto a CP/M -drive. +computer. -This process works just fine in reverse if you want to copy files from a +Finally, use the `FAT` tool to copy the files onto a CP/M +drive. This process works just fine in reverse if you want to copy files from a CP/M filesystem to your modern computer. -**WARNING**: If you are using media that contains both a FAT partition -and a RomWBW partition, your modern computer may be confused by the -RomWBW partition. In some cases, it will prompt you to format the -RomWBW partition because it doesn't know what it is. You will be -prompted before it does this -- just be careful not to allow it. +Complete instructions for the `FAT` application are found in $doc_apps$. +Here, we will just provide a couple of simple examples. Note that the +FAT application is not on the ROM disk because it is too large to +include there. + +The most important thing to understand about the `FAT` application is +how it refers to FAT filesystems vs. CP/M filesystems. It infers this +based on the file specification provided. If you use a specification +like `C:SAMPLE.TXT`, it will use the C: drive of your CP/M operating +system. If you use a specification like `4:SAMPLE.TXT`, it will use +the FAT filesystem on the disk in RomWBW disk unit 4. Basically, if +you start your file or directory specification with a number followed +by a colon, it means FAT filesystem. Anything else will mean CP/M +filesystem. + +Here are a few examples. This first example shows how to get a FAT +directory listing from RomWBW disk unit 4: + +``` +E>fat dir 4: + +Directory of 4: + + +E> +``` + +As you can see, there are currently no files there. Now let's copy +a file from CP/M to the FAT directory: + +``` +E>fat copy sample.txt 4: + +Copying... + +SAMPLE.TXT ==> 4:/SAMPLE.TXT ... [OK] + + 1 File(s) Copied +``` + +If we list the FAT directory again, you will see the file: + +``` +E>fat dir 4: + +Directory of 4: + +01/30/2023 17:50:14 29952 ---A SAMPLE.TXT + +``` + +Now let's copy the file from the FAT filesystem back to CP/M. This +time we will get a warning about overwriting the file. For this +example, we don't want to do that, so we abort and reissue the +command specifying a new filename to use: + +``` +E>fat copy 4:sample.txt e: + +Copying... + +4:/SAMPLE.TXT ==> E:SAMPLE.TXT Overwrite? (Y/N) [Skipped] + + 0 File(s) Copied + +E>fat copy 4:sample.txt e:sample2.txt + +Copying... + +4:/SAMPLE.TXT ==> E:SAMPLE2.TXT ... [OK] + + 1 File(s) Copied +``` + +Finally, let's try using wildcards: + +``` +E>fat copy sample*.* 4: + +Copying... + +SAMPLE.TXT ==> 4:/SAMPLE.TXT Overwrite? (Y/N) ... [OK] +SAMPLE2.TXT ==> 4:/SAMPLE2.TXT ... [OK] + + 2 File(s) Copied +``` # Customizing RomWBW @@ -3820,7 +4316,7 @@ for more information on UNA. - The disk images created and distributed with RomWBW do not have the correct system track code for UNA. In order to boot to disk under - UNA, you must first use SYSCOPY to update the system track of the + UNA, you must first use `SYSCOPY` to update the system track of the target disk. The UNA ROM disk has the correct system track files for UNA: `CPM.SYS` and `ZSYS.SYS`. So, you can boot a ROM OS and then use one of these files to update the system track. @@ -4167,8 +4663,8 @@ please let me know if I missed you! * Tasty Basic is a product of Dimitri Theulings. -* Dean Netherton contributed the sound driver interface and - the SN76489 sound driver. +* Dean Netherton contributed eZ80 CPU support, the sound driver + interface, and the SN76489 sound driver. * The RomWBW Disk Catalog document was produced by Mykl Orders. @@ -4178,7 +4674,11 @@ please let me know if I missed you! compendium. * Martin R has provided substantial help reviewing and improving the - User Guide. + User Guide and Applications documents. + +* Mark Pruden has also contributed a great deal of content to the + Disk Catalog, User Guide as well as contributing the disk image + for the Z3PLUS operating system, and the COPYSL utility. * Jacques Pelletier has contributed the DS1501 RTC driver code. @@ -4599,7 +5099,7 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} -#### ROM Image File: RCZ80_kio.rom +#### ROM Image File: RCZ80_kio_std.rom | | | |-------------------|---------------| @@ -4642,7 +5142,7 @@ the RomWBW HBIOS configuration. ### RCBus Z180 CPU Module -#### ROM Image File: RCZ180_ext.rom +#### ROM Image File: RCZ180_ext_std.rom | | | |-------------------|---------------| @@ -4687,7 +5187,7 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} -#### ROM Image File: RCZ180_nat.rom +#### ROM Image File: RCZ180_nat_std.rom | | | |-------------------|---------------| @@ -4734,7 +5234,7 @@ the RomWBW HBIOS configuration. ### RCBus Z280 CPU Module -#### ROM Image File: RCZ280_ext.rom +#### ROM Image File: RCZ280_ext_std.rom | | | |-------------------|---------------| @@ -4777,7 +5277,7 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} -#### ROM Image File: RCZ280_nat.rom +#### ROM Image File: RCZ280_nat_std.rom | | | |-------------------|---------------| @@ -4819,9 +5319,46 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} +### RCBus eZ80 CPU Module + +#### ROM Image File: RCEZ80_std.rom + +| | | +|-------------------|---------------| +| Default CPU Speed | 20.000 MHz | +| Interrupts | Mode 1 | +| System Timer | EZ80 | +| Serial Default | 115200 Baud | +| Memory Manager | Z2 | +| ROM Size | 512 KB | +| RAM Size | 512 KB | + +##### Supported Hardware (see [Appendix B - Device Summary]): + +- FP: LEDIO=0, SWIO=0 +- LCD: IO=218 +- CH: IO=62 +- CH: IO=60 +- CHUSB: IO=62 +- CHUSB: IO=60 +- MD: TYPE=RAM +- MD: TYPE=ROM +- FD: MODE=RCWDC, IO=80, DRIVE 0, TYPE=3.5" HD +- FD: MODE=RCWDC, IO=80, DRIVE 1, TYPE=3.5" HD +- IDE: MODE=RC, IO=16, MASTER +- IDE: MODE=RC, IO=16, SLAVE +- PPIDE: IO=32, MASTER +- PPIDE: IO=32, SLAVE +- CTC: IO=136 +- EZ80 DRIVERS + +##### Notes: + +`\clearpage`{=latex} + ### Easy Z80 SBC -#### ROM Image File: RCZ80_easy.rom +#### ROM Image File: RCZ80_easy_std.rom | | | |-------------------|---------------| @@ -4866,7 +5403,7 @@ the RomWBW HBIOS configuration. ### Tiny Z80 SBC -#### ROM Image File: RCZ80_tiny.rom +#### ROM Image File: RCZ80_tiny_std.rom | | | |-------------------|---------------| @@ -4910,7 +5447,7 @@ the RomWBW HBIOS configuration. ### Z80-512K CPU/RAM/ROM Module -#### ROM Image File: RCZ80_skz.rom +#### ROM Image File: RCZ80_skz_std.rom | | | |-------------------|---------------| @@ -4955,7 +5492,7 @@ the RomWBW HBIOS configuration. ### Small Computer SC126 Z180 SBC -#### ROM Image File: SCZ180_sc126.rom +#### ROM Image File: SCZ180_sc126_std.rom | | | |-------------------|---------------| @@ -5003,7 +5540,7 @@ the RomWBW HBIOS configuration. ### Small Computer SC130 Z180 SBC -#### ROM Image File: SCZ180_sc130.rom +#### ROM Image File: SCZ180_sc130_std.rom | | | |-------------------|---------------| @@ -5049,9 +5586,9 @@ the RomWBW HBIOS configuration. `\clearpage`{=latex} -### Small Computer SC131 Z180 Pocket Computer +### Small Computer SC131 Z180 Pocket Comp -#### ROM Image File: SCZ180_sc131.rom +#### ROM Image File: SCZ180_sc131_std.rom | | | |-------------------|---------------| @@ -5078,7 +5615,7 @@ the RomWBW HBIOS configuration. ### Small Computer SC140 Z180 CPU Module -#### ROM Image File: SCZ180_sc140.rom +#### ROM Image File: SCZ180_sc140_std.rom | | | |-------------------|---------------| @@ -5125,7 +5662,7 @@ the RomWBW HBIOS configuration. ### Small Computer SC503 Z180 CPU Module -#### ROM Image File: SCZ180_sc503.rom +#### ROM Image File: SCZ180_sc503_std.rom | | | |-------------------|---------------| @@ -5172,7 +5709,7 @@ the RomWBW HBIOS configuration. ### Small Computer SC700 Z180 CPU Module -#### ROM Image File: SCZ180_sc700.rom +#### ROM Image File: SCZ180_sc700_std.rom | | | |-------------------|---------------| @@ -5201,7 +5738,7 @@ the RomWBW HBIOS configuration. - CH: IO=60 - CHUSB: IO=62 - CHUSB: IO=60 -S- MD: TYPE=RAM +- MD: TYPE=RAM - MD: TYPE=ROM - FD: MODE=RCWDC, IO=80, DRIVE 0, TYPE=3.5" HD - FD: MODE=RCWDC, IO=80, DRIVE 1, TYPE=3.5" HD @@ -5332,7 +5869,7 @@ S- MD: TYPE=RAM ### Z80 ZRC CPU Module -#### ROM Image File: RCZ80_zrc.rom +#### ROM Image File: RCZ80_zrc_std.rom | | | |-------------------|---------------| @@ -5379,7 +5916,7 @@ S- MD: TYPE=RAM `\clearpage`{=latex} -#### ROM Image File: RCZ80_zrc_ram.rom +#### ROM Image File: RCZ80_zrc_ram_std.rom | | | |-------------------|---------------| @@ -5426,7 +5963,7 @@ S- MD: TYPE=RAM ### Z80 ZRC512 CPU Module -#### ROM Image File: RCZ80_zrc512.rom +#### ROM Image File: RCZ80_zrc512_std.rom | | | |-------------------|---------------| @@ -5473,7 +6010,7 @@ S- MD: TYPE=RAM ### Z180 Z1RCC CPU Module -#### ROM Image File: RCZ180_z1rcc.rom +#### ROM Image File: RCZ180_z1rcc_std.rom | | | |-------------------|---------------| @@ -5519,7 +6056,7 @@ S- MD: TYPE=RAM ### Z280 ZZRCC CPU Module -#### ROM Image File: RCZ280_zzrcc.rom +#### ROM Image File: RCZ280_zzrcc_std.rom | | | |-------------------|---------------| @@ -5565,7 +6102,7 @@ S- MD: TYPE=RAM `\clearpage`{=latex} -#### ROM Image File: RCZ280_zzrcc_ram.rom +#### ROM Image File: RCZ280_zzrcc_ram_std.rom | | | |-------------------|---------------| @@ -5611,7 +6148,7 @@ S- MD: TYPE=RAM ### Z280 ZZ80MB SBC -#### ROM Image File: RCZ280_zz80mb.rom +#### ROM Image File: RCZ280_zz80mb_std.rom | | | |-------------------|---------------| @@ -5879,6 +6416,73 @@ S- MD: TYPE=RAM `\clearpage`{=latex} +### S100 FPGA Z80 + +#### ROM Image File: FZ80_std.rom + +| | | +|-------------------|---------------| +| Default CPU Speed | 8.000 MHz | +| Interrupts | None | +| System Timer | None | +| Serial Default | 9600 Baud | +| Memory Manager | Z2 | +| ROM Size | 0 KB | +| RAM Size | 512 KB | + +##### Supported Hardware (see [Appendix B - Device Summary]): + +FP: LEDIO=255 +SSER: IO=52 +SCON: IO=0 +MD: TYPE=RAM +PPIDE: IO=48, MASTER +PPIDE: IO=48, SLAVE + + +FP: LEDIO=255 +DS5RTC: RTCIO=104, IO=104 +SSER: IO=52 +SCON: IO=0 +MD: TYPE=RAM +PPIDE: IO=48, MASTER +PPIDE: IO=48, SLAVE +SD: MODE=FZ80, IO=108, UNITS=2 + +##### Notes: + +- Requires matching FPGA code + +### Genesis STD Z180 + +#### ROM Image File: GMZ180_std.rom + +| | | +|-------------------|---------------| +| Default CPU Speed | 18.432 MHz | +| Interrupts | Mode 2 | +| System Timer | Z180 | +| Serial Default | 115200 Baud | +| Memory Manager | Z180 | +| ROM Size | 512 KB | +| RAM Size | 512 KB | + +##### Supported Hardware (see [Appendix B - Device Summary]): + +DSRTC: MODE=STD, IO=132 +INTRTC: ENABLED +ASCI: IO=192, INTERRUPTS ENABLED +ASCI: IO=193, INTERRUPTS ENABLED +MD: TYPE=RAM +MD: TYPE=ROM +IDE: MODE=GIDE, IO=32, MASTER +IDE: MODE=GIDE, IO=32, SLAVE +SD: MODE=GM, IO=132, UNITS=1 + +##### Notes: + +- CPU speed will be dynamically measured at startup if DSRTC is present + ## Appendix B - Device Summary The table below briefly describes each of the possible devices that @@ -5896,7 +6500,8 @@ may be discovered by RomWBW in your system. | CTC | System | Zilog Clock/Timer | | CVDU | Video | MC8563-based Video Display Controller | | DMA | System | Zilog DMA Controller | -| DS1307 | RTC | Maxim DS1307 PCF I2C Real-Time Clock w/ NVRAM | +| DS5RTC | RTC | Maxim DS1305 SPI Real-Time Clock w/ NVRAM | +| DS7RTC | RTC | Maxim DS1307 PCF I2C Real-Time Clock w/ NVRAM | | DS1501RTC | RTC | Maxim DS1501/DS1511 Watchdog Real-Time Clock | | DSRTC | RTC | Maxim DS1302 Real-Time Clock w/ NVRAM | | DUART | Char | SCC2681 or compatible Dual UART | @@ -5904,6 +6509,7 @@ may be discovered by RomWBW in your system. | EMM | Disk | Disk drive on Parallel Port emm interface (Zip Drive) | | FD | Disk | 8272 or compatible Floppy Disk Controller | | FP | System | Simple LED & Switch Front Panel | +| FV | Video | S100 FPGA Z80 Onboard VGA/Keyboard | | GDC | Video | uPD7220 Video Display Controller | | HDSK | Disk | SIMH Simulator Hard Disk | | ICM | DsKy | ICM7218-based Display/Keypad on PPI | @@ -5912,6 +6518,7 @@ may be discovered by RomWBW in your system. | INTRTC | RTC | Interrupt-based Real Time Clock | | KBD | Keyboard | 8242 PS/2 Keyboard Controller | | KIO | System | Zilog Serial/ Parallel Counter/Timer | +| LCD | System | Hitachi HD44780-based LCD Display | | LPT | Char | Parallel I/O Controller | | MD | Disk | ROM/RAM Disk | | MSXKYB | Keyboard | MSX Compliant Matrix Keyboard | @@ -5936,6 +6543,7 @@ may be discovered by RomWBW in your system. | SN76489 | Sound | SN76489 Programmable Sound Generator | | SPK | Sound | Bit-bang Speaker | | SYQ | Disk | Iomega SparQ Drive on PPI | +| SSER | Char | Simple Serial Interface | | TMS | Video | TMS9918/38/58 Video Display Controller | | UART | Char | 16C550 Family Serial Interface | | USB-FIFO | Char | FT232H-based ECB USB FIFO | diff --git a/Source/FZ80/Bank Layout.txt b/Source/FZ80/Bank Layout.txt new file mode 100644 index 00000000..e911afb7 --- /dev/null +++ b/Source/FZ80/Bank Layout.txt @@ -0,0 +1,18 @@ +FPGA Z80 has no real ROM. It has a single 512K RAM chip. + +The ROMless startup mode treats the entire 512KB as RAM. 384KB of RAM +must be preloaded by the FPGA Monitor CF Loader. There will be no ROM +disk available under RomWBW. There will be a RAM Disk and it's initial +contents will be seeded by the image loaded by the CF Loader. + +Bank Contents Description +-------- -------- ----------- +0x0 BIOS HBIOS Bank (operating) +0x1 IMG0 ROM Loader, Monitor, ROM OSes +0x2 IMG1 ROM Applications +0x3 IMG2 Reserved +0x4-0xB RAMD RAM Disk Banks +0xC BUF OS Buffers (CP/M3) +0xD AUX Aux Bank (CP/M 3, BPBIOS, etc.) +0xE USR User Bank (CP/M TPA, etc.) +0xF COM Common Bank, Upper 32KB diff --git a/Source/FZ80/Build.cmd b/Source/FZ80/Build.cmd new file mode 100644 index 00000000..8ca4f6c3 --- /dev/null +++ b/Source/FZ80/Build.cmd @@ -0,0 +1,24 @@ +@echo off +setlocal + +set TOOLS=../../Tools + +set PATH=%TOOLS%\srecord;%PATH% + +for %%f in (..\..\Binary\FZ80_*.rom) do call :build %%~nf + +goto :eof + +:build +echo. +echo Creating %1 disk image... +echo. + +srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary +srec_cat temp.dat -binary -exclude 0x1B8 0x200 fz80_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary +srec_cat temp.dat -binary -exclude 0x80000 0xE0000 ..\..\Binary\%1.rom -binary -offset 0x80000 -o temp.dat -binary +move temp.dat ..\..\Binary\%1_hd1k_prefix.dat + +copy /b ..\..\Binary\%1_hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\%1_hd1k_combo.img || exit /b + +goto :eof diff --git a/Source/FZ80/Clean.cmd b/Source/FZ80/Clean.cmd new file mode 100644 index 00000000..fa12c5c7 --- /dev/null +++ b/Source/FZ80/Clean.cmd @@ -0,0 +1,3 @@ +@echo off +setlocal + diff --git a/Source/FZ80/FZ80 Disk Layout.txt b/Source/FZ80/FZ80 Disk Layout.txt new file mode 100644 index 00000000..61f1db1e --- /dev/null +++ b/Source/FZ80/FZ80 Disk Layout.txt @@ -0,0 +1,19 @@ +FZ80 Disk Prefix Layout +======================= + +---- Bytes ---- --- Sectors --- +Start Length Start Length Description +------- ------- ------- ------- --------------------------- +0x00000 0x001BE 0 1 Unused +0x001B8 0x00048 RomWBW Partition Table +0x00200 0x1EE00 1 7FE00 Unused +0x80000 0x60000 1024 768 RomWBW +0x100000 2048 Start of slices (partition 0x1E) + +Notes +----- + +- FPGA Z80 Monitor reads 384KB (RomWBW) from sectors 1024-1791 of CF into first 384KB of physical RAM +- FPGA Z80 ZRC Monitor maps first 32KB of physical RAM to first 32KB of CPU RAM and starts execution at 0x0000 + +-- WBW 3:18 PM 6/30/2024 \ No newline at end of file diff --git a/Source/FZ80/Makefile b/Source/FZ80/Makefile new file mode 100644 index 00000000..3614280f --- /dev/null +++ b/Source/FZ80/Makefile @@ -0,0 +1,25 @@ +DEST=../../Binary + +HD1KIMGS = $(DEST)/hd1k_cpm22.img $(DEST)/hd1k_zsdos.img $(DEST)/hd1k_nzcom.img \ + $(DEST)/hd1k_cpm3.img $(DEST)/hd1k_zpm3.img $(DEST)/hd1k_ws4.img + +ROMS := $(wildcard $(DEST)/FZ80_*.rom) +ROMS := $(patsubst $(DEST)/%.rom,%,$(ROMS)) + +OBJECTS := $(patsubst %,%_hd1k_prefix.dat,$(ROMS)) +OBJECTS += $(patsubst %,%_hd1k_combo.img,$(ROMS)) + +TOOLS = ../../Tools + +include $(TOOLS)/Makefile.inc + +DIFFPATH = $(DIFFTO)/Binary + +%_hd1k_prefix.dat: $(DEST)/%.rom + srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x1B8 0x200 fz80_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x80000 0xE0000 $< -binary -offset 0x80000 -o temp.dat -binary + mv temp.dat $@ + +%_hd1k_combo.img: %_hd1k_prefix.dat $(HD1KIMGS) + cat $^ > $@ diff --git a/Source/FZ80/fz80_ptbl.bin b/Source/FZ80/fz80_ptbl.bin new file mode 100644 index 00000000..5e9fc41d Binary files /dev/null and b/Source/FZ80/fz80_ptbl.bin differ diff --git a/Source/HBIOS/Bank Layout.txt b/Source/HBIOS/Bank Layout.txt index a3a40d57..f7f957cb 100644 --- a/Source/HBIOS/Bank Layout.txt +++ b/Source/HBIOS/Bank Layout.txt @@ -43,8 +43,8 @@ Standard RAM Bank Layout (512K) Bank ID Usage ------- ------ 0x80 RomWBW HBIOS -0x81-0x88 RAM Disk Data (3) -0x89-0x8B App Banks (8) +0x81-0x88 RAM Disk Data (8) +0x89-0x8B App Banks (3) 0x8C CP/M 3 Buffers 0x8D CP/M 3 OS 0x8E User TPA diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd index 4d101a96..88a3c701 100644 --- a/Source/HBIOS/Build.cmd +++ b/Source/HBIOS/Build.cmd @@ -72,7 +72,7 @@ copy ..\Fonts\font*.asm . || exit /b tasm -t%CPUType% -g3 -dROMBOOT hbios.asm hbios_rom.bin hbios_rom.lst || exit /b tasm -t%CPUType% -g3 -dAPPBOOT hbios.asm hbios_app.bin hbios_app.lst || exit /b -tasm -t%CPUType% -g3 -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst || exit /b +::tasm -t%CPUType% -g3 -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst || exit /b :: :: Build ROM Components @@ -89,6 +89,11 @@ call :asm usrrom || exit /b call :asm updater || exit /b call :asm imgpad2 || exit /b +:: +:: Build components in Sub folders +:: +pushd SysConfig && call Build || exit /b & popd + :: :: Create additional ROM bank images by assembling components into :: 32K chunks which can be concatenated later. Note that @@ -97,7 +102,7 @@ call :asm imgpad2 || exit /b :: copy /b romldr.bin + dbgmon.bin + ..\zsdos\zsys_wbw.bin + ..\cpm22\cpm_wbw.bin osimg.bin || exit /b -copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + netboot.mod + updater.bin + usrrom.bin osimg1.bin || exit /b +copy /b ..\Forth\camel80.bin + nascom.bin + ..\tastybasic\src\tastybasic.bin + game.bin + eastaegg.bin + netboot.mod + updater.bin + SysConfig\sysconfig.bin + usrrom.bin osimg1.bin || exit /b if %Platform%==S100 ( zxcc slr180 -s100mon/fh @@ -204,45 +209,45 @@ goto :eof :dist call Build SBC std || exit /b -call Build SBC simh || exit /b +call Build SBC simh_std || exit /b call Build MBC std || exit /b call Build ZETA std || exit /b call Build ZETA2 std || exit /b call Build N8 std || exit /b call Build MK4 std || exit /b call Build RCZ80 std || exit /b -call Build RCZ80 kio || exit /b -call Build RCZ80 easy || exit /b -call Build RCZ80 tiny || exit /b -call Build RCZ80 skz || exit /b -:: call Build RCZ80 mt || exit /b -:: call Build RCZ80 duart || exit /b -call Build RCZ80 zrc || exit /b -call Build RCZ80 zrc_ram || exit /b -call Build RCZ80 zrc512 || exit /b -call Build RCZ180 ext || exit /b -call Build RCZ180 nat || exit /b -call Build RCZ180 z1rcc || exit /b -call Build RCZ280 ext || exit /b -call Build RCZ280 nat || exit /b -call Build RCZ280 zz80mb || exit /b -call Build RCZ280 zzrcc || exit /b -call Build RCZ280 zzrcc_ram || exit /b -call Build SCZ180 sc126 || exit /b -call Build SCZ180 sc130 || exit /b -call Build SCZ180 sc131 || exit /b -call Build SCZ180 sc140 || exit /b -call Build SCZ180 sc503 || exit /b -call Build SCZ180 sc700 || exit /b +call Build RCZ80 kio_std || exit /b +call Build RCZ80 easy_std || exit /b +call Build RCZ80 tiny_std || exit /b +call Build RCZ80 skz_std || exit /b +call Build RCZ80 zrc_std || exit /b +call Build RCZ80 zrc_ram_std || exit /b +call Build RCZ80 zrc512_std || exit /b +call Build RCZ180 ext_std || exit /b +call Build RCZ180 nat_std || exit /b +call Build RCZ180 z1rcc_std || exit /b +call Build RCZ280 ext_std || exit /b +call Build RCZ280 nat_std || exit /b +call Build RCZ280 zz80mb_std || exit /b +call Build RCZ280 zzrcc_std || exit /b +call Build RCZ280 zzrcc_ram_std || exit /b +call Build SCZ180 sc126_std || exit /b +call Build SCZ180 sc130_std || exit /b +call Build SCZ180 sc131_std || exit /b +call Build SCZ180 sc140_std || exit /b +call Build SCZ180 sc503_std || exit /b +call Build SCZ180 sc700_std || exit /b +call Build GMZ180 std || exit /b call Build DYNO std || exit /b -call Build UNA std || exit /b call Build RPH std || exit /b call Build Z80RETRO std || exit /b call Build S100 std || exit /b call Build DUO std || exit /b call Build HEATH std || exit /b call Build EPITX std || exit /b -call Build NABU std || exit /b :: call Build MON std || exit /b +call Build NABU std || exit /b +call Build FZ80 std || exit /b +call Build UNA std || exit /b goto :eof diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index ec8bf51d..9e390302 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -27,8 +27,8 @@ $ErrorAction = 'Stop' # UNA BIOS is simply imbedded, it is not built here. # -$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA", "HEATH", "MON", "NABU" -$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH", "S100", "EPITX" +$PlatformListZ80 = "SBC", "MBC", "ZETA", "ZETA2", "RCZ80", "Z80RETRO", "DUO", "UNA", "HEATH", "MON", "NABU", "FZ80", "RCEZ80" +$PlatformListZ180 = "N8", "MK4", "RCZ180", "SCZ180", "DYNO", "RPH", "S100", "EPITX", "GMZ180" $PlatformListZ280 = "RCZ280" # diff --git a/Source/HBIOS/Build.sh b/Source/HBIOS/Build.sh index 892640d0..1684d8d5 100755 --- a/Source/HBIOS/Build.sh +++ b/Source/HBIOS/Build.sh @@ -11,47 +11,47 @@ export CPUFAM if [ "${ROM_PLATFORM}" == "dist" ] ; then echo "!!!DISTRIBUTION BUILD!!!" - ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="MK4"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="N8"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext"; bash Build.sh - ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat"; bash Build.sh - ROM_PLATFORM="RCZ180"; ROM_CONFIG="z1rcc"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="zz80mb"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="zzrcc"; bash Build.sh - ROM_PLATFORM="RCZ280"; ROM_CONFIG="zzrcc_ram"; bash Build.sh -# ROM_PLATFORM="RCZ80"; ROM_CONFIG="mt"; bash Build.sh -# ROM_PLATFORM="RCZ80"; ROM_CONFIG="duart"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="easy"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="tiny"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram"; bash Build.sh - ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc512"; bash Build.sh - ROM_PLATFORM="RPH"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="SBC"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="SBC"; ROM_CONFIG="simh"; bash Build.sh + ROM_PLATFORM="SBC"; ROM_CONFIG="simh_std"; bash Build.sh ROM_PLATFORM="MBC"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="DUO"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc126"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc130"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc131"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc140"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc503"; bash Build.sh - ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc700"; bash Build.sh - ROM_PLATFORM="S100"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="Z80RETRO"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="ZETA"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="ZETA2"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="N8"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="MK4"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="kio_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="easy_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="tiny_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="skz_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc_ram_std"; bash Build.sh + ROM_PLATFORM="RCZ80"; ROM_CONFIG="zrc512_std"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="ext_std"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="nat_std"; bash Build.sh + ROM_PLATFORM="RCZ180"; ROM_CONFIG="z1rcc_std"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="ext_std"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="nat_std"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="zz80mb_std"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="zzrcc_std"; bash Build.sh + ROM_PLATFORM="RCZ280"; ROM_CONFIG="zzrcc_ram_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc126_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc130_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc131_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc140_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc503_std"; bash Build.sh + ROM_PLATFORM="SCZ180"; ROM_CONFIG="sc700_std"; bash Build.sh + ROM_PLATFORM="GMZ180"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="DYNO"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="RPH"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="Z80RETRO"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="S100"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="DUO"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="HEATH"; ROM_CONFIG="std"; bash Build.sh ROM_PLATFORM="EPITX"; ROM_CONFIG="std"; bash Build.sh - ROM_PLATFORM="NABU"; ROM_CONFIG="std"; bash Build.sh # ROM_PLATFORM="MON"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="NABU"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="FZ80"; ROM_CONFIG="std"; bash Build.sh + ROM_PLATFORM="UNA"; ROM_CONFIG="std"; bash Build.sh exit fi diff --git a/Source/HBIOS/Clean.cmd b/Source/HBIOS/Clean.cmd index a291a724..94b8d008 100644 --- a/Source/HBIOS/Clean.cmd +++ b/Source/HBIOS/Clean.cmd @@ -16,3 +16,5 @@ if exist build.inc del build.inc if exist font*.asm del font*.asm if exist build_env.cmd del build_env.cmd if exist hbios_env.cmd del hbios_env.cmd + +pushd SysConfig && call Clean & popd diff --git a/Source/HBIOS/Config/DUO_std.asm b/Source/HBIOS/Config/DUO_std.asm index f6e91f0b..2078b07e 100644 --- a/Source/HBIOS/Config/DUO_std.asm +++ b/Source/HBIOS/Config/DUO_std.asm @@ -1,51 +1,66 @@ ; ;================================================================================================== -; DUODYNE STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR DUODYNE ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. ; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. ; -#include "cfg_duo.asm" +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). ; -CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. ; -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). ; -DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_DUO.asm" ; BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; -ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) ; PCFENABLE .SET TRUE ; ENABLE PCF8584 I2C CONTROLLER ; -MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM -; +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -; -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM ; CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER ; -ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) diff --git a/Source/HBIOS/Config/DYNO_std.asm b/Source/HBIOS/Config/DYNO_std.asm index bc4b677d..91e72918 100644 --- a/Source/HBIOS/Config/DYNO_std.asm +++ b/Source/HBIOS/Config/DYNO_std.asm @@ -1,37 +1,57 @@ ; ;================================================================================================== -; DYNO STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR DYNO ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_dyno.asm" +#INCLUDE "cfg_DYNO.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) ; diff --git a/Source/HBIOS/Config/EPITX_std.asm b/Source/HBIOS/Config/EPITX_std.asm index 62dc73e7..b5f9f8fa 100644 --- a/Source/HBIOS/Config/EPITX_std.asm +++ b/Source/HBIOS/Config/EPITX_std.asm @@ -1,34 +1,52 @@ ; ;================================================================================================== -; Z180 Mini ITX STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR Z180 MINI ITX ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE PLATFORM_NAME "Z180 MiniITX" ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_epitx.asm" -; -CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +#INCLUDE "cfg_EPITX.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ ; @@ -36,9 +54,8 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -; -LEDENABLE .SET FALSE ; ENABLE STATUS LED (SINGLE LED) +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) @@ -50,10 +67,8 @@ SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) ; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -FDMODE .SET FDMODE_EPFDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|DIDE|N8|DIO3] +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_EPFDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) ; @@ -62,3 +77,4 @@ PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/FZ80_std.asm b/Source/HBIOS/Config/FZ80_std.asm new file mode 100644 index 00000000..baf75793 --- /dev/null +++ b/Source/HBIOS/Config/FZ80_std.asm @@ -0,0 +1,50 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR S100 FPGA Z80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_FZ80.asm" +; +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/Config/GMZ180_std.asm b/Source/HBIOS/Config/GMZ180_std.asm new file mode 100644 index 00000000..eef7023c --- /dev/null +++ b/Source/HBIOS/Config/GMZ180_std.asm @@ -0,0 +1,90 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR GENESIS STD Z180 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "GM STD BUS Z180", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_GMZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_GM ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/HEATH_std.asm b/Source/HBIOS/Config/HEATH_std.asm index 4ca7f5b9..1f4cd3c8 100644 --- a/Source/HBIOS/Config/HEATH_std.asm +++ b/Source/HBIOS/Config/HEATH_std.asm @@ -1,69 +1,47 @@ ; ;================================================================================================== -; HEATH H8 Z80 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR HEATH H8 Z80 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. ; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -DSKYENABLE .SET TRUE ; ENABLES DSKY FUNCTIONALITY -H8PENABLE .SET TRUE ; ENABLES HEATH H8 FRONT PANEL +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. ; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). ; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. ; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). ; -LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +#INCLUDE "cfg_HEATH.asm" diff --git a/Source/HBIOS/Config/MBC_std.asm b/Source/HBIOS/Config/MBC_std.asm index 9ae980c8..b12d382e 100644 --- a/Source/HBIOS/Config/MBC_std.asm +++ b/Source/HBIOS/Config/MBC_std.asm @@ -1,59 +1,75 @@ ; ;================================================================================================== -; MBC CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR NHYODYNE ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. ; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. ; -#include "cfg_mbc.asm" +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). ; -CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. ; -INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). ; -DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; -BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_MBC.asm" ; +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE CPUSPDDEF .SET SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; -ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -; -MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) ; DSKYENABLE .SET TRUE ; ENABLES DSKY FUNCTIONALITY ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259) ; +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 ; -ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) ; CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM ; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +ESPENABLE .SET TRUE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) diff --git a/Source/HBIOS/Config/MK4_std.asm b/Source/HBIOS/Config/MK4_std.asm index a37a7f87..8ec298e6 100644 --- a/Source/HBIOS/Config/MK4_std.asm +++ b/Source/HBIOS/Config/MK4_std.asm @@ -1,57 +1,74 @@ ; ;================================================================================================== -; MARK IV STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR MARK IV ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_mk4.asm" +#INCLUDE "cfg_MK4.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART -UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC] +SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] ; PRPENABLE .SET TRUE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/MON_std.asm b/Source/HBIOS/Config/MON_std.asm index 5a9ca047..b7b19578 100644 --- a/Source/HBIOS/Config/MON_std.asm +++ b/Source/HBIOS/Config/MON_std.asm @@ -1,30 +1,50 @@ ; ;================================================================================================== -; MONSPUTER Z80 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR MONSPUTER Z80 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_mon.asm" +#INCLUDE "cfg_MON.asm" ; CPUOSC .SET 4000000 ; CPU OSC FREQ IN MHZ CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP diff --git a/Source/HBIOS/Config/N8_std.asm b/Source/HBIOS/Config/N8_std.asm index 9c632cdb..d0a7215e 100644 --- a/Source/HBIOS/Config/N8_std.asm +++ b/Source/HBIOS/Config/N8_std.asm @@ -1,44 +1,65 @@ ; ;================================================================================================== -; N8 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR N8 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_n8.asm" +#INCLUDE "cfg_N8.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) ; PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDMODE .SET SDMODE_CSIO ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) ; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +SDMODE .SET SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +; +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER diff --git a/Source/HBIOS/Config/NABU_std.asm b/Source/HBIOS/Config/NABU_std.asm index 8731dc6a..6a5c40a5 100644 --- a/Source/HBIOS/Config/NABU_std.asm +++ b/Source/HBIOS/Config/NABU_std.asm @@ -1,32 +1,51 @@ ; ;================================================================================================== -; NABU Z80 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR NABU Z80 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_nabu.asm" +#INCLUDE "cfg_NABU.asm" ; CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -TMSMODE .SET TMSMODE_NABU80 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] - +TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 diff --git a/Source/HBIOS/Config/RCEZ80_std.asm b/Source/HBIOS/Config/RCEZ80_std.asm new file mode 100644 index 00000000..ecebca31 --- /dev/null +++ b/Source/HBIOS/Config/RCEZ80_std.asm @@ -0,0 +1,82 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS EZ80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCEZ80.asm" +; +CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +;; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ180_ext.asm b/Source/HBIOS/Config/RCZ180_ext.asm deleted file mode 100644 index 3f8c7744..00000000 --- a/Source/HBIOS/Config/RCZ180_ext.asm +++ /dev/null @@ -1,69 +0,0 @@ -; -;================================================================================================== -; RCBUS Z180 STANDARD CONFIGURATION (EXTERNAL MMU ON 512K RAM/ROM BANKED MEMORY MODULE) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ180_ext_std.asm b/Source/HBIOS/Config/RCZ180_ext_std.asm new file mode 100644 index 00000000..76d9d400 --- /dev/null +++ b/Source/HBIOS/Config/RCZ180_ext_std.asm @@ -0,0 +1,88 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z180 W/ EXTERNAL Z2 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ180_nat.asm b/Source/HBIOS/Config/RCZ180_nat.asm deleted file mode 100644 index d8bd155b..00000000 --- a/Source/HBIOS/Config/RCZ180_nat.asm +++ /dev/null @@ -1,68 +0,0 @@ -; -;================================================================================================== -; RCBUS Z180 STANDARD CONFIGURATION (NATIVE Z180 MMU W/ LINEAR MEMORY MODULE) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ180_nat_std.asm b/Source/HBIOS/Config/RCZ180_nat_std.asm new file mode 100644 index 00000000..aa985d40 --- /dev/null +++ b/Source/HBIOS/Config/RCZ180_nat_std.asm @@ -0,0 +1,88 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z180 W/ NATIVE Z180 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC]] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ180_z1rcc.asm b/Source/HBIOS/Config/RCZ180_z1rcc.asm deleted file mode 100644 index 5556b6ac..00000000 --- a/Source/HBIOS/Config/RCZ180_z1rcc.asm +++ /dev/null @@ -1,77 +0,0 @@ -; -;================================================================================================== -; RCBUS Z180 Z1RCC CONFIGURATION (ROMLESS) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Z1RCC", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -MDROM .SET FALSE ; MD: ENABLE ROM DISK -MDRAM .SET TRUE ; MD: ENABLE RAM DISK -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ180_z1rcc_std.asm b/Source/HBIOS/Config/RCZ180_z1rcc_std.asm new file mode 100644 index 00000000..89707e10 --- /dev/null +++ b/Source/HBIOS/Config/RCZ180_z1rcc_std.asm @@ -0,0 +1,96 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z180 ROMLESS Z1RCC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Z1RCC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +MDROM .SET FALSE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm deleted file mode 100644 index 035b37a1..00000000 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ /dev/null @@ -1,67 +0,0 @@ -; -;================================================================================================== -; RCBUS Z280 STANDARD CONFIGURATION (EXTERNAL MMU ON 512K RAM/ROM BANKED MEMORY MODULE) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz280.asm" -; -CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) -; -Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_ext_std.asm b/Source/HBIOS/Config/RCZ280_ext_std.asm new file mode 100644 index 00000000..ddf384a4 --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_ext_std.asm @@ -0,0 +1,87 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z280 W/ EXTERNAL Z2 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ280.asm" +; +CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm deleted file mode 100644 index 2d74551c..00000000 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ /dev/null @@ -1,67 +0,0 @@ -; -;================================================================================================== -; RCBUS Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz280.asm" -; -CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] -; -Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) -; -Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_nat_std.asm b/Source/HBIOS/Config/RCZ280_nat_std.asm new file mode 100644 index 00000000..8d19c52e --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_nat_std.asm @@ -0,0 +1,88 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z280 W/ NATIVE Z280 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ280.asm" +; +CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ280_zz80mb.asm b/Source/HBIOS/Config/RCZ280_zz80mb.asm deleted file mode 100644 index 7a54bc23..00000000 --- a/Source/HBIOS/Config/RCZ280_zz80mb.asm +++ /dev/null @@ -1,72 +0,0 @@ -; -;================================================================================================== -; RCBUS Z280 STANDARD CONFIGURATION (NATIVE Z280 MMU W/ LINEAR MEMORY ON ZZ80MB) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZZ80MB", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz280.asm" -; -CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] -; -RAMBIAS .SET 8192 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) -; -Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -Z2U0HFC .SET TRUE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_zz80mb_std.asm b/Source/HBIOS/Config/RCZ280_zz80mb_std.asm new file mode 100644 index 00000000..31a17a72 --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_zz80mb_std.asm @@ -0,0 +1,91 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS ZZ80MB Z280 W/ NATIVE Z280 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZZ80MB", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ280.asm" +; +CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET 8192 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2U0HFC .SET TRUE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ280_zzrcc.asm b/Source/HBIOS/Config/RCZ280_zzrcc.asm deleted file mode 100644 index db8067b8..00000000 --- a/Source/HBIOS/Config/RCZ280_zzrcc.asm +++ /dev/null @@ -1,78 +0,0 @@ -; -;================================================================================================== -; RCBUS Z280 ZZRCC CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZZRCC", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz280.asm" -; -CPUOSC .SET 29491200 ; CPU OSC FREQ IN MHZ -INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] -; -RAMSIZE .SET 256 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 256 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) -; -MDROM .SET TRUE ; MD: ENABLE ROM DISK -MDRAM .SET TRUE ; MD: ENABLE RAM DISK -; -Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -Z2UOSC .SET (CPUOSC / 16) ; Z2U: OSC FREQUENCY IN MHZ -Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_zzrcc_ram.asm b/Source/HBIOS/Config/RCZ280_zzrcc_ram.asm deleted file mode 100644 index 957535d2..00000000 --- a/Source/HBIOS/Config/RCZ280_zzrcc_ram.asm +++ /dev/null @@ -1,78 +0,0 @@ -; -;================================================================================================== -; RCBUS Z280 ZZRCC CONFIGURATION (ROMLESS) -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZZRCC", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz280.asm" -; -CPUOSC .SET 29491200 ; CPU OSC FREQ IN MHZ -INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280] -; -RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) -; -MDROM .SET FALSE ; MD: ENABLE ROM DISK -MDRAM .SET TRUE ; MD: ENABLE RAM DISK -; -Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -Z2UOSC .SET (CPUOSC / 16) ; Z2U: OSC FREQUENCY IN MHZ -Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ280_zzrcc_ram_std.asm b/Source/HBIOS/Config/RCZ280_zzrcc_ram_std.asm new file mode 100644 index 00000000..99ee7dc1 --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_zzrcc_ram_std.asm @@ -0,0 +1,99 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z280 ROMLESS ZZRCC W/ NATIVE Z280 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZZRCC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ280.asm" +; +CPUOSC .SET 29491200 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2UOSC .SET (CPUOSC / 16) ; Z2U: OSC FREQUENCY IN MHZ +Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +MDROM .SET FALSE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ280_zzrcc_std.asm b/Source/HBIOS/Config/RCZ280_zzrcc_std.asm new file mode 100644 index 00000000..d7a6bec0 --- /dev/null +++ b/Source/HBIOS/Config/RCZ280_zzrcc_std.asm @@ -0,0 +1,100 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z280 ZZRCC W/ NATIVE Z280 MMU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZZRCC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ280.asm" +; +CPUOSC .SET 29491200 ; CPU OSC FREQ IN MHZ +INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +RAMSIZE .SET 256 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 256 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +Z2UENABLE .SET TRUE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2UOSC .SET (CPUOSC / 16) ; Z2U: OSC FREQUENCY IN MHZ +Z2U0HFC .SET TRUE ; Z2U0: ENABLE HARDWARE FLOW CONTROL +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_easy.asm b/Source/HBIOS/Config/RCZ80_easy.asm deleted file mode 100644 index ae6a1d8b..00000000 --- a/Source/HBIOS/Config/RCZ80_easy.asm +++ /dev/null @@ -1,82 +0,0 @@ -; -;================================================================================================== -; EASY Z80 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Easy-Z80", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH] -CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .SET $6F ; WATCHDOG REGISTER ADR -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT -CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] -SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_easy_std.asm b/Source/HBIOS/Config/RCZ80_easy_std.asm new file mode 100644 index 00000000..d77c57dc --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_easy_std.asm @@ -0,0 +1,105 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR EASY Z80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Easy-Z80", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +; +CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY +WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6F ; WATCHDOG REGISTER ADR +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] +SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_jbl.asm b/Source/HBIOS/Config/RCZ80_jbl.asm deleted file mode 100644 index e43b54a8..00000000 --- a/Source/HBIOS/Config/RCZ80_jbl.asm +++ /dev/null @@ -1,80 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 COLECOVISION-COMPATIBLE CONFIGURATION FOR J.B. LANGSTON'S GAME BOARDS -;================================================================================================== -; -; THIS CONFIGURATION ENABLES DRIVERS FOR THE TMS9918 AND SN76489 BOARDS BY J.B. LANGSTON -; AND THE YM2149 BOARD BY ED BRINDLEY. THE TMS9918 IS CONFIGURED TO USE THE COLECOVISION -; PORTS AND HAS INTERRUPTS DISABLED BECAUSE COLECOVISION USES NMI, WHICH WOULD BREAK CP/M -; WHEN ENABLED. IT IS CONFIGURED FOR A 3.686MHZ CPU CLOCK IN ORDER TO BE COMPATIBLE WITH -; COLECOVISION GAMES. THE FIRST SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE CPU -; RUNNING AT THIS SPEED. THE SECOND SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE -; SECOND CLOCK SET TO 7.373MHZ. LOWER BAUD RATES CAN BE ACHIEVED ON THE SECOND PORT BY -; MOVING THE SECONDARY CLOCK DIVIDER JUMPER (E.G., 38400 @ 2.458MHZ). THE BAUD RATE DOES -; NOT NEED TO BE CHANGED IN THIS CONFIGURATION FILE IN ORDER TO DO THIS, BUT THE DEVICE -; LIST WILL INCORRECTLY SHOW THE PORT RUNNING AT 115200 REGARDLESS OF THE CLOCK DIVIDER. -; UNCOMMENT THE LINE THAT SETS BOOTCON TO 1 TO BOOT ON THE SECOND SIO PORT BY DEFAULT. -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "Z" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 3686400 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -;BOOTCON .SET 1 ; BOOT CONSOLE DEVICE -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] -SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_COLECO ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 1 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET TRUE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_jbl_std.asm b/Source/HBIOS/Config/RCZ80_jbl_std.asm new file mode 100644 index 00000000..1e84ef5b --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_jbl_std.asm @@ -0,0 +1,104 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 W/ JBL GAME BOARDS +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +; NOTES: +; +; THIS CONFIGURATION ENABLES DRIVERS FOR THE TMS9918 AND SN76489 BOARDS BY J.B. LANGSTON +; AND THE YM2149 BOARD BY ED BRINDLEY. THE TMS9918 IS CONFIGURED TO USE THE COLECOVISION +; PORTS AND HAS INTERRUPTS DISABLED BECAUSE COLECOVISION USES NMI, WHICH WOULD BREAK CP/M +; WHEN ENABLED. IT IS CONFIGURED FOR A 3.686MHZ CPU CLOCK IN ORDER TO BE COMPATIBLE WITH +; COLECOVISION GAMES. THE FIRST SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE CPU +; RUNNING AT THIS SPEED. THE SECOND SIO PORT IS CONFIGURED TO RUN AT 115200 BPS WITH THE +; SECOND CLOCK SET TO 7.373MHZ. LOWER BAUD RATES CAN BE ACHIEVED ON THE SECOND PORT BY +; MOVING THE SECONDARY CLOCK DIVIDER JUMPER (E.G., 38400 @ 2.458MHZ). THE BAUD RATE DOES +; NOT NEED TO BE CHANGED IN THIS CONFIGURATION FILE IN ORDER TO DO THIS, BUT THE DEVICE +; LIST WILL INCORRECTLY SHOW THE PORT RUNNING AT 115200 REGARDLESS OF THE CLOCK DIVIDER. +; UNCOMMENT THE LINE THAT SETS BOOTCON TO 1 TO BOOT ON THE SECOND SIO PORT BY DEFAULT. +; +; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE +; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS +; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE +; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. +; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY +; YOUR FILE IN THE BUILD PROCESS. +; +#DEFINE BOOT_DEFAULT "Z" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "Config/RCZ80_std.asm" +; +CPUOSC .SET 3686400 ; CPU OSC FREQ IN MHZ +; +VDAEMU_SERKBD .SET 1 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_COLECO ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SN76489ENABLE .SET TRUE ; SN: ENABLE SN76489 SOUND DRIVER +; +AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] diff --git a/Source/HBIOS/Config/RCZ80_kio.asm b/Source/HBIOS/Config/RCZ80_kio.asm deleted file mode 100644 index df822ed8..00000000 --- a/Source/HBIOS/Config/RCZ80_kio.asm +++ /dev/null @@ -1,78 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 STANDARD CONFIGURATION W/ KIO -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT -; -CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT -CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER -CTCBASE .SET KIOBASE+$04 ; CTC BASE I/O ADDRESS -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] -SIO0BASE .SET KIOBASE+$08 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACTCC .SET 0 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCTCC .SET 1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_kio_std.asm b/Source/HBIOS/Config/RCZ80_kio_std.asm new file mode 100644 index 00000000..f2fea1fb --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_kio_std.asm @@ -0,0 +1,65 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 W/ KIO +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "Config/RCZ80_std.asm" +; +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCBASE .SET KIOBASE+$04 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET KIOBASE+$08 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACTCC .SET 0 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCTCC .SET 1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE diff --git a/Source/HBIOS/Config/RCZ80_skz.asm b/Source/HBIOS/Config/RCZ80_skz.asm deleted file mode 100644 index b2b804c6..00000000 --- a/Source/HBIOS/Config/RCZ80_skz.asm +++ /dev/null @@ -1,73 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 STANDARD CONFIGURATION W/ SERGEY KISELEV Z80 + 512K CPU -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -WDOGMODE .SET WDOG_SKZ ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDPORT .SET $6E ; STATUS LED PORT ADDRESS -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIO0BCLK .SET CPUOSC / 12 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .SET SER_38400_8N1 ; SIO 0B: SERIAL LINE CONFIG -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_skz_std.asm b/Source/HBIOS/Config/RCZ80_skz_std.asm new file mode 100644 index 00000000..b7911fd8 --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_skz_std.asm @@ -0,0 +1,90 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 W/ SERGEY KISELEL Z80+512K CPU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ +; +SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +WDOGMODE .SET WDOG_SKZ ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDPORT .SET $6E ; STATUS LED PORT ADDRESS +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIO0BCLK .SET CPUOSC / 12 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_38400_8N1 ; SIO 0B: SERIAL LINE CONFIG +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 13689758..9b9fa20f 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -1,67 +1,91 @@ ; ;================================================================================================== -; RCBUS Z80 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_rcz80.asm" +#INCLUDE "cfg_RCZ80.asm" ; CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) ; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) ; TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY ; PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_tiny.asm b/Source/HBIOS/Config/RCZ80_tiny.asm deleted file mode 100644 index 81935820..00000000 --- a/Source/HBIOS/Config/RCZ80_tiny.asm +++ /dev/null @@ -1,88 +0,0 @@ -; -;================================================================================================== -; TINY Z80 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Tiny-Z80", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH] -CPUOSC .SET 16000000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .SET $6F ; WATCHDOG REGISTER ADR -; -LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDPORT .SET $6E ; STATUS LED PORT ADDRESS -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT -CTCBASE .SET $10 ; CTC BASE I/O ADDRESS -CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP] -SIO0BASE .SET $18 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_tiny_std.asm b/Source/HBIOS/Config/RCZ80_tiny_std.asm new file mode 100644 index 00000000..d03c28be --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_tiny_std.asm @@ -0,0 +1,108 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR TINY Z80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Tiny-Z80", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +PLATFORM .SET PLT_EZZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +; +CPUOSC .SET 16000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCBASE .SET $10 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY +EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6F ; WATCHDOG REGISTER ADR +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDPORT .SET $6E ; STATUS LED PORT ADDRESS +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIO0MODE .SET SIOMODE_STD ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $18 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 1843200 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCLK .SET 1843200 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_user.asm b/Source/HBIOS/Config/RCZ80_user.asm new file mode 100644 index 00000000..9966f297 --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_user.asm @@ -0,0 +1,57 @@ +; +;================================================================================================== +; ROMWBW CUSTOM USER BUILD SETTINGS EXAMPLE FOR RCBUS Z80 +;================================================================================================== +; +; THIS FILE IS AN EXAMPLE OF A CUSTOM USER SETTINGS FILE. THESE +; SETTINGS OVERRIDE THE DEFAULT SETTINGS OF THE INHERITED FILES AS +; DESIRED BY A USER. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; THIS FILE EXEMPLIFIES THE IDEAL WAY TO CREATE A USER SPECIFIC BUILD +; CONFIGURATION. NOTICE THAT IT INCLUDES THE DEFAULT BUILD SETTINGS +; FILE AND OVERRIDES SOME DESIRED SETTINGS. +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +; THIS EXAMPLE CUSTOM USER SETTINGS FILE DOES THE FOLLOWING: +; +; 1. SETS A CUSTOM NAME USED IN THE BOOT LOADER BANNER +; 2. BOOTS ZSDOS BY DEFAULT AFTER 10 SECOND DELAY +; 3. ENABLES LPT PRINTER SUPPORT +; +#DEFINE PLATFORM_NAME "My Custom RCBus Computer", " [", CONFIG, "]" +#DEFINE BOOT_DEFAULT "Z" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "Config/RCZ80_std.asm" ; INHERIT FROM OFFICIAL BUILD SETTINGS +; +BOOT_TIMEOUT .SET 10 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +; +LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) diff --git a/Source/HBIOS/Config/RCZ80_zrc.asm b/Source/HBIOS/Config/RCZ80_zrc.asm deleted file mode 100644 index 35770df3..00000000 --- a/Source/HBIOS/Config/RCZ80_zrc.asm +++ /dev/null @@ -1,67 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 ZRC CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_zrc512.asm b/Source/HBIOS/Config/RCZ80_zrc512.asm deleted file mode 100644 index cf1eed89..00000000 --- a/Source/HBIOS/Config/RCZ80_zrc512.asm +++ /dev/null @@ -1,69 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 ZRC512 CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZRC512", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 22000000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -MDROM .SET FALSE ; MD: ENABLE ROM DISK -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_zrc512_std.asm b/Source/HBIOS/Config/RCZ80_zrc512_std.asm new file mode 100644 index 00000000..452ec099 --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_zrc512_std.asm @@ -0,0 +1,91 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 ZRC512 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZRC512", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +CPUOSC .SET 22000000 ; CPU OSC FREQ IN MHZ +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +MDROM .SET FALSE ; MD: ENABLE ROM DISK +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm deleted file mode 100644 index 3e3e3ef4..00000000 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ /dev/null @@ -1,69 +0,0 @@ -; -;================================================================================================== -; RCBUS Z80 ZRC CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_rcz80.asm" -; -CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180] -; -MDROM .SET FALSE ; MD: ENABLE ROM DISK -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram_std.asm b/Source/HBIOS/Config/RCZ80_zrc_ram_std.asm new file mode 100644 index 00000000..8f1d73d9 --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_zrc_ram_std.asm @@ -0,0 +1,90 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 ROMLESS ZRC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +MDROM .SET FALSE ; MD: ENABLE ROM DISK +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RCZ80_zrc_std.asm b/Source/HBIOS/Config/RCZ80_zrc_std.asm new file mode 100644 index 00000000..d0a6531e --- /dev/null +++ b/Source/HBIOS/Config/RCZ80_zrc_std.asm @@ -0,0 +1,88 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR RCBUS Z80 ZRC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "ZRC", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_RCZ80.asm" +; +CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ +; +RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET TRUE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/RPH_std.asm b/Source/HBIOS/Config/RPH_std.asm index 3dedea59..cfffc3c9 100644 --- a/Source/HBIOS/Config/RPH_std.asm +++ b/Source/HBIOS/Config/RPH_std.asm @@ -1,40 +1,59 @@ ; ;================================================================================================== -; RHYOPHYRE STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR RHYOPHYRE ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_rph.asm" +#INCLUDE "cfg_RPH.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; -RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) diff --git a/Source/HBIOS/Config/S100_std.asm b/Source/HBIOS/Config/S100_std.asm index e3846c73..92b43a18 100644 --- a/Source/HBIOS/Config/S100_std.asm +++ b/Source/HBIOS/Config/S100_std.asm @@ -1,38 +1,58 @@ ; ;================================================================================================== -; S100 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR S100 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_s100.asm" +#INCLUDE "cfg_S100.asm" ; CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 Z180_MEMWAIT .SET 1 ; Z180: MEMORY WAIT STATES (0-3) Z180_IOWAIT .SET 2 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) ; +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) ; @@ -42,5 +62,5 @@ SCONENABLE .SET TRUE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY diff --git a/Source/HBIOS/Config/SBC_max.asm b/Source/HBIOS/Config/SBC_max.asm deleted file mode 100644 index f2ff533d..00000000 --- a/Source/HBIOS/Config/SBC_max.asm +++ /dev/null @@ -1,72 +0,0 @@ -; -;================================================================================================== -; SBC MAXIMUM CONFIGURATION -;================================================================================================== -; -; THIS CONFIGURATION FILE IS *NOT* MEANT TO GENERATE A FUNCTIONAL ROM. -; IT IS USED TO HELP TEST BUILDS WITH MOST FEATURES ENABLED. -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .SET OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .SET BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_sbc.asm" -; -BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .SET TRUE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION -; -KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -DSKYENABLE .SET TRUE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) -ICMENABLE .SET TRUE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -PKDENABLE .SET TRUE ; ENABLES DSKY NG PKD DRIVER (8259) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -; -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -VDUENABLE .SET TRUE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -; -RFENABLE .SET TRUE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -; -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -; -PRPENABLE .SET TRUE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER (AY38910.ASM) -; -SN76489ENABLE .SET TRUE ; SN: ENABLE SN76489 SOUND DRIVER (SN76489.ASM) -; -YM2612ENABLE .SET TRUE ; YM2612: ENABLE ECB VGM YM2612 SOUND DRIVER (YM2612.ASM) diff --git a/Source/HBIOS/Config/SBC_simh.asm b/Source/HBIOS/Config/SBC_simh.asm deleted file mode 100644 index 328d6eed..00000000 --- a/Source/HBIOS/Config/SBC_simh.asm +++ /dev/null @@ -1,39 +0,0 @@ -; -;================================================================================================== -; SBC SIMH EMULATOR CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_sbc.asm" -; -INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -; -HTIMENABLE .SET TRUE ; ENABLE SIMH TIMER SUPPORT -; -SIMRTCENABLE .SET TRUE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -; -HDSKENABLE .SET TRUE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) diff --git a/Source/HBIOS/Config/SBC_simh_std.asm b/Source/HBIOS/Config/SBC_simh_std.asm new file mode 100644 index 00000000..a07330c6 --- /dev/null +++ b/Source/HBIOS/Config/SBC_simh_std.asm @@ -0,0 +1,65 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR N8VEM SBC W/SIMH SUPPORT +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SBC.asm" +; +INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +HTIMENABLE .SET TRUE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET TRUE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +SSERENABLE .SET TRUE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $6D ; SSER: STATUS PORT +SSERDATA .SET $68 ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00100000 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +; +HDSKENABLE .SET TRUE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) diff --git a/Source/HBIOS/Config/SBC_std.asm b/Source/HBIOS/Config/SBC_std.asm index 27c0f5fd..0a519655 100644 --- a/Source/HBIOS/Config/SBC_std.asm +++ b/Source/HBIOS/Config/SBC_std.asm @@ -1,55 +1,70 @@ ; ;================================================================================================== -; SBC STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR N8VEM SBC ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_sbc.asm" +#INCLUDE "cfg_SBC.asm" ; CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART -UARTCAS .SET TRUE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .SET TRUE ; UART: AUTO-DETECT MF/PIC UART -UART4 .SET TRUE ; UART: AUTO-DETECT 4UART UART -UARTRC .SET FALSE ; UART: AUTO-DETECT RC UART SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) ; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) VGAENABLE .SET TRUE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC] +SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] ; PRPENABLE .SET TRUE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_sc126.asm b/Source/HBIOS/Config/SCZ180_sc126.asm deleted file mode 100644 index 785580e9..00000000 --- a/Source/HBIOS/Config/SCZ180_sc126.asm +++ /dev/null @@ -1,71 +0,0 @@ -; -;================================================================================================== -; SC126 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC126", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -FPLED_IO .SET $0D ; FP: PORT ADDRESS FOR FP LEDS -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_sc126_std.asm b/Source/HBIOS/Config/SCZ180_sc126_std.asm new file mode 100644 index 00000000..85978ec5 --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc126_std.asm @@ -0,0 +1,92 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR SC126 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC126", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $0D ; FP: PORT ADDRESS FOR FP LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/SCZ180_sc130.asm b/Source/HBIOS/Config/SCZ180_sc130.asm deleted file mode 100644 index 9987bf39..00000000 --- a/Source/HBIOS/Config/SCZ180_sc130.asm +++ /dev/null @@ -1,72 +0,0 @@ -; -;================================================================================================== -; SC130 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC130", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_sc130_std.asm b/Source/HBIOS/Config/SCZ180_sc130_std.asm new file mode 100644 index 00000000..7d73f2f8 --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc130_std.asm @@ -0,0 +1,93 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR SC130 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC130", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +; +LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/SCZ180_sc131.asm b/Source/HBIOS/Config/SCZ180_sc131.asm deleted file mode 100644 index 8d224875..00000000 --- a/Source/HBIOS/Config/SCZ180_sc131.asm +++ /dev/null @@ -1,55 +0,0 @@ -; -;================================================================================================== -; SC131 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC131", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS -FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; -DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY -CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT diff --git a/Source/HBIOS/Config/SCZ180_sc131_std.asm b/Source/HBIOS/Config/SCZ180_sc131_std.asm new file mode 100644 index 00000000..535149db --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc131_std.asm @@ -0,0 +1,81 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR SC131 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC131", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +; +; +LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +; +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT + +LCDENABLE .SET FALSE ; DISABLE LCD DISPLAY diff --git a/Source/HBIOS/Config/SCZ180_sc140.asm b/Source/HBIOS/Config/SCZ180_sc140.asm deleted file mode 100644 index 755975d4..00000000 --- a/Source/HBIOS/Config/SCZ180_sc140.asm +++ /dev/null @@ -1,66 +0,0 @@ -; -;================================================================================================== -; SC140 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC140", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS diff --git a/Source/HBIOS/Config/SCZ180_sc140_std.asm b/Source/HBIOS/Config/SCZ180_sc140_std.asm new file mode 100644 index 00000000..fb754bbd --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc140_std.asm @@ -0,0 +1,87 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR PLATFORM: SBC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC140", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES +; +LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/SCZ180_sc503.asm b/Source/HBIOS/Config/SCZ180_sc503.asm deleted file mode 100644 index 543d2be7..00000000 --- a/Source/HBIOS/Config/SCZ180_sc503.asm +++ /dev/null @@ -1,66 +0,0 @@ -; -;================================================================================================== -; SC503 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC503", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS -FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -AY38910ENABLE .SET FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS diff --git a/Source/HBIOS/Config/SCZ180_sc503_std.asm b/Source/HBIOS/Config/SCZ180_sc503_std.asm new file mode 100644 index 00000000..ea11038d --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc503_std.asm @@ -0,0 +1,89 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR SC503 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC503", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $A0 ; FP: PORT ADDRESS FOR FP LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $A0 ; FP: PORT ADDRESS FOR FP SWITCHES +; +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +; +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDE0BASE .SET $90 ; IDE 0: IO BASE ADDRESS +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_LINC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/SCZ180_sc700.asm b/Source/HBIOS/Config/SCZ180_sc700.asm deleted file mode 100644 index d3d6284c..00000000 --- a/Source/HBIOS/Config/SCZ180_sc700.asm +++ /dev/null @@ -1,73 +0,0 @@ -; -;================================================================================================== -; SC700 STANDARD CONFIGURATION -;================================================================================================== -; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. -; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. -; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! -; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). -; -#DEFINE PLATFORM_NAME "Small Computer SC700", " [", CONFIG, "]" -; -#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT -; -#include "cfg_scz180.asm" -; -CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ -CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -; -Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -; -LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED) -LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .SET $0E ; STATUS LED PORT ADDRESS -; -FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS -; -DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO] -MKYENABLE .SET FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -; -AY38910ENABLE .SET TRUE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC] -SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER -; -FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] -; -IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR] -SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY -; -PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) diff --git a/Source/HBIOS/Config/SCZ180_sc700_std.asm b/Source/HBIOS/Config/SCZ180_sc700_std.asm new file mode 100644 index 00000000..486dfdce --- /dev/null +++ b/Source/HBIOS/Config/SCZ180_sc700_std.asm @@ -0,0 +1,92 @@ +; +;================================================================================================== +; ROMWBW DEFAULT BUILD SETTINGS FOR SC700 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer SC700", " [", CONFIG, "]" +; +#DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT +; +#INCLUDE "cfg_SCZ180.asm" +; +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +; +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPWDC] +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] diff --git a/Source/HBIOS/Config/UNA_std.asm b/Source/HBIOS/Config/UNA_std.asm index ee28f83a..ba3e6b18 100644 --- a/Source/HBIOS/Config/UNA_std.asm +++ b/Source/HBIOS/Config/UNA_std.asm @@ -1,27 +1,47 @@ ; ;================================================================================================== -; UNA STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR UNA ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_una.asm" +#INCLUDE "cfg_UNA.asm" diff --git a/Source/HBIOS/Config/Z80RETRO_std.asm b/Source/HBIOS/Config/Z80RETRO_std.asm index 29475b6a..c3a920c5 100644 --- a/Source/HBIOS/Config/Z80RETRO_std.asm +++ b/Source/HBIOS/Config/Z80RETRO_std.asm @@ -1,33 +1,54 @@ ; ;================================================================================================== -; ZETA2 STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR Z80 RETRO ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_z80retro.asm" +#INCLUDE "cfg_Z80RETRO.asm" ; CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 +; CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) diff --git a/Source/HBIOS/Config/ZETA2_std.asm b/Source/HBIOS/Config/ZETA2_std.asm index 0245bfd5..413457db 100644 --- a/Source/HBIOS/Config/ZETA2_std.asm +++ b/Source/HBIOS/Config/ZETA2_std.asm @@ -1,40 +1,57 @@ ; ;================================================================================================== -; ZETA2 STANDARD CONFIGURATION +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: ZETA 2 ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_zeta2.asm" +#INCLUDE "cfg_ZETA2.asm" ; CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART -; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) diff --git a/Source/HBIOS/Config/ZETA_std.asm b/Source/HBIOS/Config/ZETA_std.asm index d422cab9..3984e5a1 100644 --- a/Source/HBIOS/Config/ZETA_std.asm +++ b/Source/HBIOS/Config/ZETA_std.asm @@ -1,40 +1,58 @@ ; ;================================================================================================== -; ZETA STANDARD CONFIGURATION +; ROMWBW DEFAULT BUILD SETTINGS FOR ZETA ;================================================================================================== ; -; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE -; CFG_.ASM INCLUDED FILE WHICH IS FOUND IN THE PARENT DIRECTORY. THIS FILE CONTAINS -; COMMON CONFIGURATION SETTINGS THAT OVERRIDE THE DEFAULTS. IT IS INTENDED THAT YOU MAKE -; YOUR CUSTOMIZATIONS IN THIS FILE AND JUST INHERIT ALL OTHER SETTINGS FROM THE DEFAULTS. -; EVEN BETTER, YOU CAN MAKE A COPY OF THIS FILE WITH A NAME LIKE _XXX.ASM AND SPECIFY -; YOUR FILE IN THE BUILD PROCESS. +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THESE SETTINGS DEFINE THE OFFICIAL BUILD FOR THIS +; PLATFORM AS DISTRIBUTED IN ROMWBW RELEASES. ; -; THE SETTINGS BELOW ARE THE SETTINGS THAT ARE MOST COMMONLY MODIFIED FOR THIS PLATFORM. -; MANY OF THEM ARE EQUAL TO THE SETTINGS IN THE INCLUDED FILE, SO THEY DON'T REALLY DO -; ANYTHING AS IS. THEY ARE LISTED HERE TO MAKE IT EASY FOR YOU TO ADJUST THE MOST COMMON -; SETTINGS. +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: ; -; N.B., SINCE THE SETTINGS BELOW ARE REDEFINING VALUES ALREADY SET IN THE INCLUDED FILE, -; TASM INSISTS THAT YOU USE THE .SET OPERATOR AND NOT THE .EQU OPERATOR BELOW. ATTEMPTING -; TO REDEFINE A VALUE WITH .EQU BELOW WILL CAUSE TASM ERRORS! +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS ; -; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE SOURCE DIRECTORY (TWO -; DIRECTORIES ABOVE THIS ONE). +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. +; +; TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THIS FILE, THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; PLEASE REFER TO THE CUSTOM BUILD INSTRUCTIONS (README.TXT) IN THE +; SOURCE DIRECTORY (TWO DIRECTORIES ABOVE THIS ONE). +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". ; #DEFINE BOOT_DEFAULT "H" ; DEFAULT BOOT LOADER CMD ON OR AUTO BOOT ; -#include "cfg_zeta.asm" +#INCLUDE "cfg_ZETA.asm" ; CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2 -CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) ; -UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTSBC .SET TRUE ; UART: AUTO-DETECT SBC/ZETA ONBOARD UART +CRTACT .SET TRUE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP ; FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC] +FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] ; PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index d684aa1f..4370db84 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -3,10 +3,11 @@ MOREDIFF = game.bin hbios_rom.bin nascom.bin usrrom.bin \ dbgmon.bin hbios_app.bin imgpad2.bin osimg1.bin osimg2.bin romldr.bin \ eastaegg.bin hbios_img.bin osimg.bin game.bin updater.bin usrrom.bin -SUBDIRS = +# SUBDIRS = SysConfig DEST = ../../Binary TOOLS =../../Tools -OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh +OTHERS = *.img *.rom *.com *.upd *.bin *.hex cpm.sys zsys.sys Build.inc font*.asm *.dat hbios_env.sh \ + SysConfig/*.com SysConfig/*.bin SysConfig/*.lst # DIFFMAKE = 1 @@ -18,7 +19,7 @@ endif ifeq ($(OBJECTS),) start: - chmod +x Build.sh + @chmod +x Build.sh bash Build.sh $(DIFFBUILD) endif @@ -59,10 +60,10 @@ ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} # $(info TASM=$(TASM)) $(OBJECTS) : $(ROMDEPS) - cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin + @cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin ../CPM22/cpm_$(BIOS).bin >osimg.bin cat romldr.bin dbgmon.bin ../ZSDOS/zsys_$(BIOS).bin >osimg_small.bin if [ $(ROM_PLATFORM) != UNA ] ; then \ - cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin ; \ + cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin SysConfig/sysconfig.bin usrrom.bin >osimg1.bin ; \ if [ $(ROM_PLATFORM) = S100 ] ; then \ cat s100mon.bin >osimg2.bin ; \ else \ @@ -88,7 +89,7 @@ $(OBJECTS) : $(ROMDEPS) fi \ fi -prereq: $(FONTS) camel80.bin tastybasic.bin +prereq: $(FONTS) camel80.bin tastybasic.bin syscon font%.asm: cp ../Fonts/$@ . @@ -96,27 +97,30 @@ font%.asm: camel80.bin: cp ../Forth/$@ . +syscon: + $(MAKE) --directory SysConfig + s100mon.bin: $(ZXCC) $(CPM)/SLR180 -s100mon/FH $(ZXCC) $(CPM)/MLOAD25 -s100mon.bin=s100mon tastybasic.bin: cp ../TastyBasic/src/$@ . - + hbios_rom.bin: hbios.asm build.inc $(DEPS) - $(TASM) -dROMBOOT hbios.asm hbios_rom.bin hbios_rom.lst + @$(TASM) -dROMBOOT hbios.asm hbios_rom.bin hbios_rom.lst hbios_app.bin: hbios.asm build.inc $(DEPS) - $(TASM) -dAPPBOOT hbios.asm hbios_app.bin hbios_app.lst + @$(TASM) -dAPPBOOT hbios.asm hbios_app.bin hbios_app.lst hbios_img.bin: hbios.asm build.inc $(DEPS) - $(TASM) -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst + @$(TASM) -dIMGBOOT hbios.asm hbios_img.bin hbios_img.lst hbios_env.com: hbios_env.asm build.inc - $(TASM) -dBASH hbios_env.asm hbios_env.com hbios_env.lst - + @$(TASM) -dBASH hbios_env.asm hbios_env.com hbios_env.lst + hbios_env.sh: hbios_env.com - $(ZXCC) hbios_env.com >hbios_env.sh + @$(ZXCC) hbios_env.com >hbios_env.sh romldr.bin: build.inc dbgmon.bin: build.inc diff --git a/Source/HBIOS/Makefile.new b/Source/HBIOS/Makefile.new index 16d7f26e..21191551 100644 --- a/Source/HBIOS/Makefile.new +++ b/Source/HBIOS/Makefile.new @@ -5,8 +5,8 @@ DIST_OBJECTS := \ RCZ80_zrc_ram RCZ80_zrc512 RPH_std SBC_std SBC_simh MBC_std \ DUO_std SCZ180_sc126 SCZ180_sc130 SCZ180_sc131 SCZ180_sc140 \ SCZ180_sc503 SCZ180_sc700 S100_std UNA_std Z80RETRO_std \ - ZETA_std ZETA2_std HEATH_std EPITX_std -# RCZ80_mt RCZ80_duart MON_std + ZETA_std ZETA2_std HEATH_std EPITX_std GMZ180_std +# RCZ80_mt RCZ80_duart MON_std OBJECTS := $(DIST_OBJECTS) # OBJECTS := SBC_std MK4_std UNA_std S100_std @@ -41,6 +41,9 @@ camel80.bin: tastybasic.bin: cp ../TastyBasic/src/$@ . +sysconfig.bin: + cp SysConfig/$@ . + s100mon.bin: $(ZXCC) $(CPM)/SLR180 -s100mon/FH $(ZXCC) $(CPM)/MLOAD25 -s100mon.bin=s100mon @@ -100,8 +103,8 @@ UNA_%.osimg.bin: UNA_%.romldr.bin UNA_%.dbgmon.bin %.osimg_small.bin: %.romldr.bin %.dbgmon.bin cat $(*F).romldr.bin $(*F).dbgmon.bin ../ZSDOS/zsys_wbw.bin >$@ -%.osimg1.bin: camel80.bin %.nascom.bin tastybasic.bin %.game.bin %.eastaegg.bin netboot.mod %.updater.bin %.usrrom.bin - cat camel80.bin $(*F).nascom.bin tastybasic.bin $(*F).game.bin $(*F).eastaegg.bin netboot.mod $(*F).updater.bin $(*F).usrrom.bin >$@ +%.osimg1.bin: camel80.bin %.nascom.bin tastybasic.bin %.game.bin %.eastaegg.bin netboot.mod %.updater.bin sysconfig.bin %.usrrom.bin + cat camel80.bin $(*F).nascom.bin tastybasic.bin $(*F).game.bin $(*F).eastaegg.bin netboot.mod $(*F).updater.bin sysconfig.bin $(*F).usrrom.bin >$@ srec_cat $@ -Binary -Crop 0 0x7FFF -Checksum_Negative_Big_Endian 0x7FFF 1 1 -o $@ -Binary S100_%.imgpad2.bin: s100mon.bin diff --git a/Source/HBIOS/SysConfig/Build.cmd b/Source/HBIOS/SysConfig/Build.cmd new file mode 100644 index 00000000..3b609070 --- /dev/null +++ b/Source/HBIOS/SysConfig/Build.cmd @@ -0,0 +1,11 @@ +@echo off +setlocal + +set TOOLS=../../../Tools +set PATH=%TOOLS%\tasm32;%PATH% +set TASMTABS=%TOOLS%\tasm32 + +tasm -t80 -g3 -fFF -dCPM sysconfig.asm sysconfig.com sysconfig.lst || exit /b +tasm -t80 -g3 -fFF -dROMWBW sysconfig.asm sysconfig.bin sysconfig.lst || exit /b + +copy /Y sysconfig.com ..\..\..\Binary\Apps\ || exit /b diff --git a/Source/HBIOS/SysConfig/Clean.cmd b/Source/HBIOS/SysConfig/Clean.cmd new file mode 100644 index 00000000..f408cf0e --- /dev/null +++ b/Source/HBIOS/SysConfig/Clean.cmd @@ -0,0 +1,6 @@ +@echo off +setlocal + +if exist *.com del *.com +if exist *.lst del *.lst +if exist *.bin del *.bin diff --git a/Source/HBIOS/SysConfig/Makefile b/Source/HBIOS/SysConfig/Makefile new file mode 100644 index 00000000..c44a90e0 --- /dev/null +++ b/Source/HBIOS/SysConfig/Makefile @@ -0,0 +1,12 @@ +OBJECTS = sysconfig.com sysconfig.bin +DEST = ../../../Binary/Apps +NOCOPY = sysconfig.bin +TOOLS = ../../../Tools + +include $(TOOLS)/Makefile.inc + +USETASM=1 + +sysconfig.bin: TASMFLAGS=-dROMWBW + +sysconfig.com: TASMFLAGS=-dCPM diff --git a/Source/HBIOS/SysConfig/README.md b/Source/HBIOS/SysConfig/README.md new file mode 100644 index 00000000..e9269771 --- /dev/null +++ b/Source/HBIOS/SysConfig/README.md @@ -0,0 +1,21 @@ +# System Configuration + +## Introduction + +An utility applicaton that sets NVR Attributes that affect HBIOS and +RomWBW Operation. Write to RTC NVRAM to store config is reliant on HBIOS + +## Building + +TASM (Telemark Assembler) ([Anderson, 1998](##References)). + +### RomWBW Version + +Is part of the SBCv2 RomWBW distribution. And deployed as a Rom Application +It is included in Rom Bank 1 + +### CP/M Version + +The resulting `sysconfig.com` command file can be run in CP/M. +It is copied in the Binary/Apps folder. + diff --git a/Source/HBIOS/SysConfig/sysconfig.asm b/Source/HBIOS/SysConfig/sysconfig.asm new file mode 100644 index 00000000..c2ca2827 --- /dev/null +++ b/Source/HBIOS/SysConfig/sysconfig.asm @@ -0,0 +1,1032 @@ +; +;======================================================================= +; HBIOS System Configuration via NVRAM +; ALLOWS CONFIG OF NVR TO SET OPTIONS FOR HBIOS CONFIGURATION +;======================================================================= +; +; Simple utility that sets NVR Attributes that affect HBIOS +; and RomWBW Operation. Write to RTC NVRAM to store config +; is reliant on HBIOS +; +; NOTE: This program is built as both a CP/M COM and Rom WBW Applicaton +; +; ROM APPLICATION THAT IS AUTOMATICALLY INCLUDED IN THE ROMWBW ROM. +; IT IS INVOKED FROM THE BOOT LOADER USING THE 'W' OPTION. (See RomLDR) +; +; Author: Mark Pruden +; +; BASED ON USEROM.ASM +; THANKS AND CREDIT TO MARTIN R. FOR PROVIDING THIS APPLICATION! +; Also Based on The Tasty Basic Configuration +; Utilitity function were also copied from RomLdr, Assign. +; +#include "../../ver.inc" +#include "../hbios.inc" +; +;======================================================================= +; +#ifdef CPM +#define PLATFORM "CP/M" +NVR_LOC .equ 0100h +#endif +; +#ifdef ROMWBW +; +#define PLATFORM "ROMWBW" +#include "../layout.inc" +#endif +; +;======================================================================= +; +cmdmax .EQU $20 ; Max cmd input length +stksiz .EQU $40 ; Working stack size +restart .EQU $0000 ; CP/M restart vector +bdos .EQU $0005 ; BDOS invocation vector +ident .EQU $FFFE ; loc of RomWBW HBIOS ident ptr +; +ETX .EQU 3 ; CTRL-C +BEL .EQU 7 ; ASCII bell +BS .EQU 8 ; ASCII backspace +LF .EQU 10 +CR .EQU 13 +DEL .EQU 127 ; ASCII del/rubout +; +;======================================================================= +; + .ORG NVR_LOC +; +#ifdef ROMWBW + ; PLACE STACK AT THE TOP OF AVAILABLE RAM (JUST BELOW THE HBIOS PROXY). + LD SP,HBX_LOC +#endif +#ifdef CPM + ; setup stack (save old value) + ld (stksav),sp ; save stack + ld sp,stack ; set new stack + ; initialization + call init ; initialize + jr nz,exit ; abort if init fails +#endif +; + call main ; do the real work +; +exit: + ; clean up and return to command processor + ; call crlf ; formatting +; +#ifdef ROMWBW + LD B,BF_SYSRESET ; SYSTEM RESTART + LD C,BF_SYSRES_WARM ; WARM START + RST 08 ; CALL HBIOS (DOES NOT RETURN) +#endif +#ifdef CPM +; + ld sp,(stksav) ; restore stack + jp restart ; return to CP/M via restart +; +;======================================================================= +; CPM Specific Init +;======================================================================= +; +init: + ; check for UNA (UBIOS) + ld a,($FFFD) ; fixed location of UNA API vector + cp $C3 ; jp instruction? + jr nz,initwbw ; if not, not UNA + ld hl,($FFFE) ; get jp address + ld a,(hl) ; get byte at target address + cp $FD ; first byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA + inc hl ; point to next byte + ld a,(hl) ; get next byte + cp $E5 ; second byte of UNA push ix instruction + jr nz,initwbw ; if not, not UNA + jp err_una ; UNA not supported +; +initwbw: + ; get location of config data and verify integrity + ld hl,(ident) ; HL := adr or RomWBW HBIOS ident + ld a,(hl) ; get first byte of RomWBW marker + cp 'W' ; match? + jp nz,err_inv ; abort with invalid config block + inc hl ; next byte (marker byte 2) + ld a,(hl) ; load it + cp ~'W' ; match? + jp nz,err_inv ; abort with invalid config block + inc hl ; next byte (major/minor version) + ld a,(hl) ; load it + cp rmj << 4 | rmn ; match? + jp nz,err_ver ; abort with invalid os version +; +initz: + ; initialization complete + xor a ; signal success + ret ; return +; +err_una: + ld de,str_err_una + jp err_ret +err_inv: + ld de,str_err_inv + jp err_ret +err_ver: + ld de,str_err_ver + jp err_ret +; +str_err_una .db " ERROR: UNA not supported by application",0 +str_err_inv .db " ERROR: Invalid BIOS (signature missing)",0 +str_err_ver .db " ERROR: Unexpected HBIOS version",0 +; +#endif +; +;======================================================================= +; Main Program and Loop +; +; TODO Potentially turn this into CP/M command line driven app. +; TODO Ie it just processes a single command (if provided) by CPM. +;======================================================================= +; +main: + call prtcrlf + ld de,str_banner ; banner + call prtstr +; + CALL PRT_STATUS ; PRINT STATUS + ld de,MSG_MENU ; Print the Main Menu + CALL prtstr +; +mainloop: + ld DE,MSG_PROMPT + CALL prtstr ; Print a prompt > + CALL rdln ; READ INPUT +; + ; accept and pare input + ld de,cmdbuf ; point to start of buf + call skipws ; skip whitespace + JR z,mainloop ; if empty line, just loop back + call upcase +; + ; MENU OPTIONS (documented) + cp 'H' + JR Z,helpandloop ; get help + cp 'P' + JR Z,statusandloop ; print status + cp 'Q' + ret Z ; finished + cp 'R' + JR Z,resetandloop ; reset NVRAM + cp 'S' + JR Z,setvalueandloop ; todo set Value +; + ; COMMON ALTERNATES (undocumented) + cp 'L' + JR Z,statusandloop ; print status + cp 'X' + ret Z ; finished + cp 'Z' + ret Z ; finished + cp '?' + JR Z,helpandloop ; get help + cp '/' + JR Z,helpandloop ; get help +; + ; Main Loop + JR mainloop ; Noting Valid was entered +; +;======================================================================= +; General Functional Routines Called By Menu Options +;======================================================================= +; +; Print Help Menu +; +helpandloop: ; HELP MENU + CALL findskipws ; skip over WS to first char + JR z,printmainhelp ; if empty line, print main help + call upcase +; + ; the folloiwng is just testing a single charater + cp 'A' ; Auto Boot help menu + JP Z,HELP_AB + cp 'D' ; Default Boot help menu + JP Z,HELP_DB +; +printmainhelp: + ld de,MSG_MENU ; nothing found Print the Main Menu +printhelp: + CALL prtstr ; print the selected help message + JR mainloop +; +; ----------- +; RESET NVRAM +; +resetandloop: ; RESET NVRAM + LD BC,BC_SYSSET_SWITCH + LD D,$FF ; RESET SWITCH + RST 08 ; Reset NV RAM + JR statusandloop ; now reprint the status +; +; ------------- +; Set NV Ram Value +; +setvalueandloop: + CALL findskipws ; skip over WS to first char + JR z,setvalueerror ; if empty line, print ? + call upcase +; + ; the folloiwng is just testing a single charater + cp 'A' ; Auto Boot help menu + JP Z,SET_AB + cp 'D' ; Default Boot help menu + JP Z,SET_DB +; +setvalueerror: + ld de,MSG_QUESTION ; nothing found Print the Main Menu + CALL prtstr ; print the selected help message + JR mainloop +; +setvaluesave: + LD BC,BC_SYSSET_SWITCH ; SET THE VALUE + RST 08 ; HL is savd + ; JR statusandloop ; finish display status (FALL THROUGH) +; +; ------------ +; Print Status +; +statusandloop: + CALL PRT_STATUS ; print status + JR mainloop +; +; Call with Return to print status +; +PRT_STATUS: + LD de,MSG_STAT ; print status open mesg + CALL prtstr + LD BC,BC_SYSGET_SWITCH + LD D,$FF ; check for existence of switches + RST 08 + JR NZ,STAT_NOTFOUND ; error means switchs are not enabled +; +; print invdividual stats, on all per switch +; + CALL STAT_DEFBOOT + CALL STAT_AUTOB +; +; end individual stats +; + CALL prtcrlf + RET +STAT_NOTFOUND: + LD de,MSG_NOTF + CALL prtstr + RET +; +; ====================================================================== +; Specific Switches Below +; ====================================================================== +; +; DEFAULT BOOT +; Byte 1: (L) +; Bit 7-0 DISK BOOT SLice Number to Boot -> default = 0 +; Bit 7-0 ROM BOOT (alpha character) Application to boot -> default = 0 translates to "H" +; Byte 2: (H) +; Bit 7 - DISK/ROM - Disk or Rom Boot -> Default=ROM (BOOT_DEFAULT is Numeric/Alpha) +; Bit 6-0 - DISK BOOT Disk Unit to Boot (0-127) -> default = 0 +; +; PRINT CURRENT SWITCH VALUE +; +STAT_DEFBOOT: + LD BC,BC_SYSGET_SWITCH + LD D,NVSW_DEFBOOT + RST 08 ; Should return auto Boot in HL + RET NZ ; return if error + LD de,MSG_DEFBOOT + CALL prtstr + LD A,H ; Byte 2 + AND DBOOT_ROM ; DISK/ROM + JR NZ,STAT_AUTOROM ; is it ROM +STAT_AUTODISK: + LD de,MSG_DISK ; disk + CALL prtstr + LD A,H ; Byte 2 + AND DBOOT_UNIT ; Unit + CALL prtdecb + LD de,MSG_DISK2 ; Slice + CALL prtstr + LD A,L ; SLICE + CALL prtdecb + LD de,MSG_DISK3 ; close bracket + CALL prtstr + RET +STAT_AUTOROM: + LD de,MSG_ROM ; ROM + CALL prtstr + LD A,L ; ROM APP + call prtchr + LD de,MSG_ROM2 ; close bracket + CALL prtstr + RET +; +; SET SWITCH VALUE +; +SET_DB: + CALL findskipws ; skip over WS to first char + JR z,SET_DB_ERR ; if empty line, print main help + call upcase + cp 'R' ; ROM + JR Z,SET_DB_ROM + cp 'D' ; DISK + JR Z,SET_DB_DISK + JR SET_DB_ERR +SET_DB_ROM: + CALL findskipcomma + CALL skipws + JR z,SET_DB_ERR ; if empty line, print main help + LD L,A ; LOW BYTE ; next CHAR is the ROM App Name + LD A,DBOOT_ROM + LD H,A ; HIGH BYTE, has constant. DBOOT_ROM = $80 + JR SET_DB_SAVE ; SAVE +SET_DB_DISK: + CALL findskipcomma + CALL skipws + JR z,SET_DB_ERR ; if empty line, print main help + CALL getnum ; next CHAR is the DISK UNIT + JR C,SET_DB_ERR ; overflow + BIT 7,A ; is > 127 + JR NZ, SET_DB_ERR + LD H,A ; HIGH BYTE, has disk unit < $80 + CALL findskipcomma + CALL skipws + JR z,SET_DB_ERR ; if empty line, print main help + CALL getnum ; next CHAR is the SLICE + JR C,SET_DB_ERR ; overflow + LD L,A ; LOW BYTE, has the slice number + ;JR SET_DB_SAVE ; SAVE - Fall Through +SET_DB_SAVE: + LD D,NVSW_DEFBOOT ; DEFAULT BOOT + JP setvaluesave ; SAVE THE VALUE +SET_DB_ERR: + JP setvalueerror ; ERROR. Added this so can use JR above +; +; PRINT HELP TEST FOR SWITCH +; +HELP_DB: + ld de,MSG_DEFB_H + JP printhelp +; +MSG_DEFBOOT .DB CR,LF, " [DB] / Default Boot: ",0 +MSG_DISK .DB "Disk (Unit = ",0 +MSG_DISK2 .DB ", Slice = ",0 +MSG_DISK3 .DB ")",0 +MSG_ROM .DB "ROM (App = \"",0 +MSG_ROM2 .DB "\")",0 +; +MSG_DEFB_H .DB "\r\nDefault Boot - Disk or Rom App (DB):\r\n" + .DB " DB [R|D],[{romapp}|{unit},{slice}]\r\n" + .DB " e.g. S DB D,2,14 ; Disk Boot, unit 2, slice 14\r\n" + .DB " S DB R,M ; Rom Application 'M'onitor\r\n" + .DB " Note: Disk: Unit (0-127); Slice (0-255)\r\n",0 +; +;======================================================================= +; +; AUTO BOOT +; Byte 0: (L) +; Bit 7-6 - Reserved +; Bit 5 - AUTO BOOT Auto boot, default=false (i.e. BOOT_TIMEOUT != -1) +; Bit 4 - Reserved +; Bit 3-0 - BOOT_TIMEOUT in seconds (0-15) 0=immediate -> default=3 +; +; PRINT CURRENT SWITCH VALUE +; +STAT_AUTOB: + LD BC,BC_SYSGET_SWITCH + LD D,NVSW_AUTOBOOT + RST 08 ; Should return auto Boot in HL + RET NZ ; return if error + LD de,MSG_AUTOB + CALL prtstr + LD A,L ; Byte 1 + LD de,MSG_DISABLED + AND ABOOT_AUTO ; enabled + JR Z, STAT_AUTOB1 ; disabled + LD de,MSG_ENABLED ; enabled + CALL prtstr + LD A,L ; Byte 1 + AND ABOOT_TIMEOUT ; timeout + CALL prtdecb ; print timeout + LD de,MSG_ENABLED2 ; and closing bracket +STAT_AUTOB1: + CALL prtstr + RET +; +; SET SWITCH VALUE +; +SET_AB: + CALL findskipws ; skip over WS to first char + JR z,SET_AB_ERR ; if empty line, print main help + call upcase + cp 'E' ; Enabled + JR Z,SET_AB_ENAB + cp 'D' ; Disabled + JR Z,SET_AB_DISAB + JR SET_AB_ERR +SET_AB_ENAB: + CALL findskipcomma + CALL skipws + JR z,SET_AB_ERR ; if empty line, print main help + CALL getnum ; next NUMBER is the timout + JR C,SET_AB_ERR ; overflow + AND $F0 ; mask just the upper bits + JR NZ,SET_AB_ERR ; if any upper bit set > 15 then Error + LD A,C ; NOTE getnum also returns Value in C + OR ABOOT_AUTO ; set the enabled bit for auto boot + LD L,A ; LOW BYTE, has the timeout from getNum + JR SET_AB_SAVE ; SAVE +SET_AB_DISAB: + LD L,0 + ;JR SET_AB_SAVE ; SAVE - Fall Through +SET_AB_SAVE: + LD D,NVSW_AUTOBOOT ; AUTO BOOT + JP setvaluesave ; SAVE THE VALUE +SET_AB_ERR: + JP setvalueerror ; ERROR. Added this so can use JR above +; +; PRINT HELP TEST FOR SWITCH +; +HELP_AB: + ld de,MSG_AUTOB_H + JP printhelp +; +MSG_AUTOB: .DB CR,LF," [AB] / Auto Boot: ",0 +MSG_ENABLED: .DB "Enabled (Timeout = ",0 +MSG_ENABLED2: .DB ")",0 +MSG_DISABLED: .DB "Disabled",0 +; +MSG_AUTOB_H .DB "\r\nAutomatic Boot (AB):\r\n" + .DB " AB [,{timeout}]\r\n" + .DB " e.g. S AB E,3 ; enabled (show menu) with 3 second timout before boot\r\n" + .DB " S AB E,0 ; enabled with immediate effect, bypass menu\r\n" + .DB " S AB D ; disabled, just display menu\r\n",0 +; +;======================================================================= +; Error Handlers +;======================================================================= +; +err_unknown: + ld de,str_err_unknown + jr err_ret +; +err_ret: + call prtcrlf2 + call prtstr + or $FF ; signal error + ret +; +;======================================================================= +; GENERAL CONSTANTS +;======================================================================= +; +str_banner .db "\r\n" + .db "RomWBW System Config Utility, Version 1.0 Nov-2024\r\n",0 +; +MSG_MENU .DB "\r\n" + .DB "Commands:\r\n" + .DB " (P)rint - Display Current settings\r\n" + .DB " (S)et {SW},{val}[,{val}[,{val}]]- Set a switch value(s)\r\n" + .DB " (R)eset - Init NVRAM to Defaults\r\n" + .DB " (H)elp [{SW}] - This help menu, or help on a switch\r\n" + .DB " (Q)uit - Quit\r\n" + .DB 0 +MSG_PROMPT: .DB "\r\n" + .DB "$", 0 +MSG_STAT: .DB "\r\nCurrent Configuration: ",0 +MSG_NOTF: .DB "Config Not Found.\r\n",0 +MSG_QUESTION .DB "\r\n?\r\n",0 +; +;MSG_PAK: .DB "\r\nPress Any Key ...",0 +; +str_err_unknown .db "\r\nUnknown Error\r\n",0 +; +;======================================================================= +; Utility Routines +;======================================================================= +; +; Print a dot character without destroying any registers +; +prtdot: + ; shortcut to print a dot preserving all regs + push af ; save af + ld a,'.' ; load dot char + call prtchr ; print it + pop af ; restore af + ret ; done +; +; Print Cr LF +; +prtcrlf2: + call prtcrlf ; two of them +prtcrlf: + ; shortcut to print a dot preserving all regs + push af ; save af + ld a,13 + call prtchr ; print it + ld a,10 + call prtchr ; print it + pop af ; restore af + ret ; done +; +; Print a zero terminated string at (de) without destroying any registers +; +prtstr: + push af + push de +; +prtstr1: + ld a,(de) ; get next char + or a + jr z,prtstr2 + call prtchr + inc de + jr prtstr1 +; +prtstr2: + pop de ; restore registers + pop af + ret +; +; Print a hex value prefix "0x" +; +prthexpre: + push af + ld a,'0' + call prtchr + ld a,'x' + call prtchr + pop af + ret +; +; Print the value in A in hex without destroying any registers +; +;prthex: +; call prthexpre +;prthex1: +; push af ; save AF +; push de ; save DE +; call hexascii ; convert value in A to hex chars in DE +; ld a,d ; get the high order hex char +; call prtchr ; print it +; ld a,e ; get the low order hex char +; call prtchr ; print it +; pop de ; restore DE +; pop af ; restore AF +; ret ; done +; +; print the hex word value in hl +; +;prthexword: +; call prthexpre +;prthexword1: +; push af +; ld a,h +; call prthex1 +; ld a,l +; call prthex1 +; pop af +; ret +; +; print the hex dword value in de:hl +; +;prthex32: +; call prthexpre +; push bc +; push de +; pop bc +; call prthexword1 +; push hl +; pop bc +; call prthexword1 +; pop bc +; ret +; +; Convert binary value in A to ascii hex characters in DE +; +;hexascii: +; ld d,a ; save A in D +; call hexconv ; convert low nibble of A to hex +; ld e,a ; save it in E +; ld a,d ; get original value back +; rlca ; rotate high order nibble to low bits +; rlca +; rlca +; rlca +; call hexconv ; convert nibble +; ld d,a ; save it in D +; ret ; done +; +; Convert low nibble of A to ascii hex +; +;hexconv: +; and $0F ; low nibble only +; add a,$90 +; daa +; adc a,$40 +; daa +; ret +; +; Print value of A or HL in decimal with leading zero suppression +; Use prtdecb for A or prtdecw for HL +; +prtdecb: + push hl + ld h,0 + ld l,a + call prtdecw ; print it + pop hl + ret +; +prtdecw: + push af + push bc + push de + push hl + call prtdec0 + pop hl + pop de + pop bc + pop af + ret +; +prtdec0: + ld e,'0' + ld bc,-10000 + call prtdec1 + ld bc,-1000 + call prtdec1 + ld bc,-100 + call prtdec1 + ld c,-10 + call prtdec1 + ld e,0 + ld c,-1 +prtdec1: + ld a,'0' - 1 +prtdec2: + inc a + add hl,bc + jr c,prtdec2 + sbc hl,bc + cp e + ret z + ld e,0 + call prtchr + ret +; +; Print value of HL as thousandths, ie. 0.000 +; +;prtd3m: +; push bc +; push de +; push hl +; ld e,'0' +; ld bc,-10000 +; call prtd3m1 +; ld e,0 +; ld bc,-1000 +; call prtd3m1 +; call prtdot +; ld bc,-100 +; call prtd3m1 +; ld c,-10 +; call prtd3m1 +; ld c,-1 +; call prtd3m1 +; pop hl +; pop de +; pop bc +; ret +;prtd3m1: +; ld a,'0' - 1 +;prtd3m2: +; inc a +; add hl,bc +; jr c,prtd3m2 +; sbc hl,bc +; cp e +; jr z,prtd3m3 +; ld e,0 +; call prtchr +;prtd3m3: +; ret +; +; ------------------------------------------------------- +; +; Get the next non-blank character from (HL). +; +;nonblank: +; ld a,(ix) ; load next character +; or a ; string ends with a null +; ret z ; if null, return pointing to null +; cp ' ' ; check for blank +; ret nz ; return if not blank +; inc ix ; if blank, increment character pointer +; jr nonblank ; and loop +; +; Get alpha chars and save in tmpstr +; Length of string returned in A +; +;getalpha: +; +; ld hl,tmpstr ; location to save chars +; ld b,8 ; length counter (tmpstr max chars) +; ld c,0 ; init character counter +; +;getalpha1: +; ld a,(ix) ; get active char +; call upcase ; lower case -> uppper case, if needed +; cp 'A' ; check for start of alpha range +; jr c,getalpha2 ; not alpha, get out +; cp 'Z' + 1 ; check for end of alpha range +; jr nc,getalpha2 ; not alpha, get out +; ; handle alpha char +; ld (hl),a ; save it +; inc c ; bump char count +; inc hl ; inc string pointer +; inc ix ; increment buffer ptr +; djnz getalpha1 ; if space, loop for more chars +; +;getalpha2: ; non-alpha, clean up and return +; ld (hl),0 ; terminate string +; ld a,c ; string length to A +; or a ; set flags +; ret ; and return +; +;tmpstr .fill 9,0 ; temp string (8 chars, 0 term) +; +; Determine if byte in A is a numeric '0'-'9' +; Return with CF clear if it is numeric +; +isnum: + cp '0' + jr c,isnum1 ; too low + cp '9' + 1 + jr nc,isnum1 ; too high + or a ; clear CF + ret +isnum1: + or a ; clear CF + ccf ; set CF + ret +; +; Get numeric chars at DE and convert to number returned in A +; Carry flag set on overflow +; +getnum: + ld c,0 ; C is working register +getnum1: + ld a,(de) ; get the active char + cp '0' ; compare to ascii '0' + jr c,getnum2 ; abort if below + cp '9' + 1 ; compare to ascii '9' + jr nc,getnum2 ; abort if above +; + ; valid digit, add new digit to C + ld a,c ; get working value to A + rlca ; multiply by 10 + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + add a,c ; ... + ret c ; overflow, return with carry set + rlca ; ... + ret c ; overflow, return with carry set + ld c,a ; back to C + ld a,(de) ; get new digit + sub '0' ; make binary + add a,c ; add in working value + ret c ; overflow, return with carry set + ld c,a ; back to C +; + inc de ; bump to next char + jr getnum1 ; loop +; +getnum2: ; return result + ld a,c ; return result in A + or a ; with flags set, CF is cleared + ret +; +; Find (AND SKIP) whitespace at buffer adr in DE, returns with first +; NON whitespace character in A. +; +findskipws: + ld a,(de) ; get next char + or a ; check for eol + ret z ; done if so + cp ' ' ; blank? + JR z,skipws ; nope, done + inc de ; bump buffer pointer + jr findskipws ; and loop +; +; Skip whitespace at buffer adr in DE, returns with first +; non-whitespace character in A. +; +skipws: + ld a,(de) ; get next char + or a ; check for eol + ret z ; done if so + cp ' ' ; blank? + ret nz ; nope, done + inc de ; bump buffer pointer + jr skipws ; and loop +; +; Find (AND SKIP) "," at buffer adr in DE, returns with first +; NON "," character in A. +; +findskipcomma: + ld a,(de) ; get next char + or a ; check for eol + ret z ; done if so + cp ',' ; blank? + JR z,skipcomma ; nope, done + inc de ; bump buffer pointer + jr findskipcomma ; and loop +; +; Skip "," at buffer adr in DE, returns with first +; non-comma character in A. +; +skipcomma: + ld a,(de) ; get next char + or a ; check for eol + ret z ; done if so + cp ',' ; blank? + ret nz ; nope, done + inc de ; bump buffer pointer + jr skipcomma ; and loop +; +; Uppercase character in A +; +upcase: + cp 'a' ; below 'a'? + ret c ; if so, nothing to do + cp 'z'+1 ; above 'z'? + ret nc ; if so, nothing to do + and ~$20 ; convert character to lower + ret ; done +; +; ----------------------------- +; Add hl,a +; A register is destroyed! +; +;addhla: +; add a,l +; ld l,a +; ret nc +; inc h +; ret +; +;======================================================================= +; Read a string on the console +; (Code originally from RomLDR) +; +; Uses address $0080 in page zero for buffer +; Input is zero terminated +; +rdln: + ld de,cmdbuf ; init buffer address ptr +rdln_nxt: + call CIN ; get a character + cp BS ; backspace? + jr z,rdln_bs ; handle it if so + cp DEL ; del/rubout? + jr z,rdln_bs ; handle as backspace + cp CR ; return? + jr z,rdln_cr ; handle it if so +; + ; check for non-printing characters + cp ' ' ; first printable is space char + jr c,rdln_bel ; too low, beep and loop + cp '~'+1 ; last printable char + jr nc,rdln_bel ; too high, beep and loop +; + ; need to check for buffer overflow here!!! + ld hl,cmdbuf+cmdmax ; max cmd length + or a ; clear carry + sbc hl,de ; test for max + jr z,rdln_bel ; at max, beep and loop +; + ; good to go, echo and store character + call COUT ; echo character input + ld (de),a ; save in buffer + inc de ; inc buffer ptr + jr rdln_nxt ; loop till done +; +rdln_bs: + ld hl,cmdbuf ; start of buffer + or a ; clear carry + sbc hl,de ; subtract from cur buf ptr + jr z,rdln_bel ; at buf start, just beep + ;ld hl,str_bs ; backspace sequence + ld a,BS + call COUT + ld a,' ' + call COUT + ld a,BS + call COUT + ;call prtstr ; send it + dec de ; backup buffer pointer + jr rdln_nxt ; and loop +; +rdln_bel: + ld a,BEL ; Bell characters + call COUT ; send it + jr rdln_nxt ; and loop +; +rdln_cr: + xor a ; null to A + ld (de),a ; store terminator + ret +; +str_bs .db BS,' ',BS,0 +; +;======================================================================= +; Basic Input Output (Specific to Target) +;======================================================================= +; +; Print character in A without destroying any registers +; +COUT: +prtchr: + push af + push bc ; save registers + push de + push hl +#ifdef ROMWBW + LD BC, BF_CIOOUT<<8 | CIO_CONSOLE + LD E,A + RST 08 +#endif +#ifdef CPM + ld e,a ; character to print in E + ld c,$02 ; BDOS function to output a character + call bdos ; do it +#endif + pop hl ; restore registers + pop de + pop bc + pop af + ret +; +; WAIT FOR A CHARACTER FROM THE CONSOLE DEVICE AND RETURN IT IN A +; +CIN: PUSH BC + PUSH DE + PUSH HL +#ifdef ROMWBW + LD BC, BF_CIOIN << 8 | CIO_CONSOLE + RST 08 + LD A,E +#endif +#ifdef CPM + ; todo CONVERT TO BDOS CALL + LD BC, BF_CIOIN << 8 | CIO_CONSOLE + RST 08 + LD A,E +#endif + POP HL + POP DE + POP BC + RET +; +;======================================================================= +; General Working data +;======================================================================= +; +stksav .dw 0 ; stack pointer saved at start +; +cmdbuf: .FILL cmdmax,0 ; cmd inut buffer +; + .fill stksiz,0 ; stack +stack .equ $ ; stack top +; +#ifdef ROMWBW +; +;======================================================================= +; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY NVR_SIZ BYTES. +; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY +; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. +;======================================================================= +; +SLACK .EQU (NVR_END - $) +; +#IF (SLACK < 0) + .ECHO "*** NVRCONFIG APP IS TOO BIG!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR +#endif +; + .FILL SLACK,$00 + .ECHO "NVRCONFIG space remaining: " + .ECHO SLACK + .ECHO " bytes.\n" +; + .NOLIST +; +#endif + .END diff --git a/Source/HBIOS/ay38910.asm b/Source/HBIOS/ay38910.asm index bd2671b9..6006b2a9 100644 --- a/Source/HBIOS/ay38910.asm +++ b/Source/HBIOS/ay38910.asm @@ -19,6 +19,15 @@ ; UNUSED BITS CAN BE READ BACK AND WRITTEN ON YM. ; VOLTAGE LEVEL OUTPUT ON A AY-3-8910 IS LOW AND AROUND 2V ON YM2149. ; +; THERE ARE TWO VARIANTS OF AY-3-8910 SOUND CARDS THAT HAVE BEEN +; PRODUCED FOR THE RCBUS. THE ONE PRODUCED BY ED BRINDLEY (EB) USES +; THE SAME PORT FOR REGISTER SELECT (RSEL) AND REGISTER IN (RIN). +; THE ONE PRODUCED BY MARTEN FELDTMANN (MF) USES THE PORT FOLLOWING +; REGISTER SELECT (RSEL) FOR THE REGISTER IN (RIN) PORT. THE FOLLOWING +; EQUATE MUST BE SET CORRECTLY FOR THE HARDWARE BEING USED. THIS +; HAS NOT BEEN MOVED TO A CONFIG VARIABLE BECAUSE THE MF MODULE IS +; RARELY ENCOUNTERED IN THE WILD. +; AY_RCSND .EQU 0 ; 0 = EB MODULE, 1=MF MODULE ; DEVECHO "AY38910: MODE=" @@ -118,6 +127,7 @@ AY_FNTBL: .DW AY_QUERY .DW AY_DURATION .DW AY_DEVICE + .DW AY_BEEP ; #IF (($ - AY_FNTBL) != (SND_FNCNT * 2)) .ECHO "*** INVALID SND FUNCTION TABLE ***\n" @@ -147,7 +157,6 @@ AY_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS ; ; ANNOUNCE DEVICE ON CONSOLE. ACTIVATE DEVICE IF REQUIRED. ; SETUP FUNCTION TABLES. SETUP THE DEVICE. -; ANNOUNCE DEVICE WITH BEEP. SET VOLUME OFF. ; RETURN INITIALIZATION STATUS ; AY38910_INIT: @@ -212,72 +221,22 @@ AY38910_INIT: LD A,$FF ; UNSUCCESSFULL INIT RET ; -AY_FND: LD IY, AY_IDAT ; SETUP FUNCTION TABLE +AY_FND: + LD IY, AY_IDAT ; SETUP FUNCTION TABLE LD BC, AY_FNTBL ; POINTER TO INSTANCE DATA LD DE, AY_IDAT ; BC := FUNCTION TABLE ADDRESS CALL SND_ADDENT ; DE := INSTANCE DATA PTR ; - CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION -; - LD E,$07 ; SET VOLUME TO 50% - CALL AY_SETV ; ON ALL CHANNELS -; -; LD DE,(AY_R2CHBP*256)+$55 ; BEEP ON CHANNEL B (CENTER) -; CALL AY_WRTPSG ; R02 = $55 = 01010101 - LD DE,(AY_R3CHBP*256)+$00 - CALL AY_WRTPSG ; R03 = $00 = XXXX0000 -; -#IF ((SYSTIM != TM_NONE) & (AYMODE != AYMODE_DUO)) - LD A, TICKFREQ / 3 ; SCHEDULE IN 1/3 SECOND TO TURN OFF SOUND - LD (AY_TIMTIK), A -; - LD HL, (VEC_TICK + 1) ; GET CUR TICKS VECTOR - LD (AY_TIMHOOK), HL ; SAVE IT INTERNALLY - LD HL, AY_TIMER ; INSTALL TIMER HOOK HANDLER - LD (VEC_TICK + 1), HL -; - LD A, $02 ; NOT READY & IN INTERUPT HANDLER - LD (AY_READY), A -#ELSE - CALL LDELAY ; HALF SECOND DELAY - LD E,$00 ; SET VOLUME OFF - CALL AY_SETV ; ON ALL CHANNELS - LD A, $01 ; READY & NOT IN INTERUPT HANDLER - LD (AY_READY), A -#ENDIF -; + CALL AY_RESET ; SET DEFAULT CHIP CONFIGURATION XOR A ; SUCCESSFULL INIT RET ; -#IF ((SYSTIM != TM_NONE) & (AYMODE != AYMODE_DUO)) -AY_TIMER: - LD A, (AY_TIMTIK) - DEC A - LD (AY_TIMTIK), A - JR NZ, AY_TIMER1 -; - LD E,$00 ; SET VOLUME OFF - CALL AY_SETV ; ON ALL CHANNELS - LD A, $01 ; READY & NOT IN INTERUPT HANDLER - LD (AY_READY), A -; - LD DE, AY_TIMER ; MAKE AY_TIMER A NO_OP HANDLER - LD HL, AY_TIMER1 - LD BC, 3 - LDIR -; -AY_TIMER1: - JP 0 ; OVERWRITTEN WITH NEXT HANDLER -AY_TIMHOOK: .EQU $ - 2 - -AY_TIMTIK .DB 0 ; COUNT DOWN TO FINISH BOOT BEEP -#ENDIF -; ;====================================================================== ; INITIALIZE DEVICE ;====================================================================== ; AY_INIT: + ; HANDLE R7 SPECIAL #IF (AYMODE == AYMODE_NABU) ; I/O B=INPUT, I/O A=OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE LD DE,(AY_R7ENAB*256)+$78 ; SET MIXER CONTROL / IO ENABLE. $78 - 01 111 000 @@ -285,29 +244,21 @@ AY_INIT: ; I/O PORTS = OUTPUT, NOISE CHANNEL C, B, A DISABLE, TONE CHANNEL C, B, A ENABLE LD DE,(AY_R7ENAB*256)+$F8 ; SET MIXER CONTROL / IO ENABLE. $F8 - 11 111 000 #ENDIF - JP AY_WRTPSG -; -AY_CHKREDY: - LD A, (AY_READY) - BIT 0, A - RET NZ - - POP HL ; REMOVE LAST RETURN ADDRESS - OR $FF - RET ; RETURN NZ -; -;====================================================================== -; SET VOLUME ALL CHANNELS -;====================================================================== -; -AY_SETV: - PUSH BC - LD B,AY_TONECNT ; NUMBER OF CHANNELS - LD D,AY_R8AVOL ; BASE REGISTER FOR VOLUME -AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS - INC D - DJNZ AY_SV - POP BC + CALL AY_WRTPSG ; SETUP R7 +; + ; THEN JUST SET ALL OTHER REGISTERS TO ZERO + LD E,0 ; VALUE ZERO + LD D,0 ; START W/ R0 + LD B,7 ; DO 7 REGISTERS (R0-R6) + CALL AY_INIT1 ; DO IT + INC D ; SKIP R7 + LD B,6 ; DO 6 MORE REGISTERS (R8-R13) + ; FALL THRU TO DO IT +; +AY_INIT1: + CALL AY_WRTPSG ; WRITE REGISTER + INC D ; BUMP TO NEXT + DJNZ AY_INIT1 ; LOOP RET ; ;====================================================================== @@ -319,25 +270,15 @@ AY_SV: CALL AY_WRTPSG ; CYCLING THROUGH ALL CHANNELS ; AY_RESET: AUDTRACE(AYT_INIT) - CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY -; - PUSH DE - PUSH HL CALL AY_INIT ; SET DEFAULT CHIP CONFIGURATION ; - AUDTRACE(AYT_VOLOFF) - LD E,0 ; SET VOLUME OFF - CALL AY_SETV ; ON ALL CHANNELS -; + ; RESET DEFAULTS IN CASE OF AN IN-PLACE HBIOS RESTART + LD HL,0 + LD (AY_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO + LD (AY_PENDING_DURATION),HL; SET DURATION TO ZERO XOR A ; SIGNAL SUCCESS LD (AY_PENDING_VOLUME),A ; SET VOLUME TO ZERO - LD H,A - LD L,A - LD (AY_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO -; - POP HL - POP DE - RET + RET ; DONE, A=0 ABOVE ; ;====================================================================== ; SOUND DRIVER FUNCTION - VOLUME @@ -400,12 +341,14 @@ AY_PLAY: AUDTRACE(AYT_PLAY) AUDTRACE_D AUDTRACE_CR - CALL AY_CHKREDY ; RETURNS TO OUR CALLER IF NOT READY ; LD A, (AY_PENDING_PERIOD + 1) ; CHECK THE HIGH BYTE OF THE PERIOD INC A - JR Z, AY_PLAY1 ; PERIOD IS TOO LARGE, UNABLE TO PLAY + JR NZ, AY_PLAY1 ; PERIOD IS OK, CONTINUE + OR $FF ; ELSE TOO LARGE, SIGNAL FAILURE + RET ; AND RETURN ; +AY_PLAY1: PUSH HL PUSH DE LD A,D ; LIMIT CHANNEL 0-2 @@ -418,7 +361,7 @@ AY_PLAY: AUDTRACE_CR ; LD HL,AY_PENDING_PERIOD ; WRITE THE LOWER - ld E,(HL) ; 8-BITS OF THE TONE PERIOD + LD E,(HL) ; 8-BITS OF THE TONE PERIOD CALL AY_WRTPSG INC D ; NEXT REGISTER INC HL ; NEXT BYTE @@ -453,18 +396,6 @@ AY_PLAY: XOR A ; SIGNAL SUCCESS RET ; -AY_PLAY1: - PUSH DE ; TURN VOLUME OFF TO STOP PLAYING - LD A,D ; LIMIT CHANNEL 0-2 - AND $3 ; AND INDEX TO THE - ADD A,AY_R8AVOL ; CHANNEL VOLUME - LD D,A ; REGISTER - LD E,0 - CALL AY_WRTPSG ; SET VOL (E) IN CHANNEL REG (D) - POP DE - OR $FF ; SIGNAL FAILURE - RET -; ;====================================================================== ; SOUND DRIVER FUNCTION - QUERY AND SUBFUNCTIONS ;====================================================================== @@ -532,22 +463,11 @@ AY_DEVICE: RET ; ;====================================================================== -; NON-BLOCKING INTERRUPT CODE +; SOUND DRIVER FUNCTION - BEEP ;====================================================================== ; -AY_DI: - LD A, (AY_READY) - BIT 1, A - RET NZ - HB_DI - RET -; -AY_EI: - LD A, (AY_READY) - BIT 1, A - RET NZ - HB_EI - RET +AY_BEEP: + JP SND_BEEP ; DEFER TO GENERIC CODE IN HBIOS ; ;====================================================================== ; @@ -557,7 +477,6 @@ AY_EI: ;====================================================================== ; AY_WRTPSG: - CALL AY_DI #IFDEF SBCV2004 LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE OR %00001000 ; SBC-V2-004 CHANGE @@ -570,8 +489,10 @@ AY_WRTPSG: OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL #ENDIF LD A,D ; SELECT THE REGISTER WE + EZ80_IO OUT (AY_RSEL),A ; WANT TO WRITE TO LD A,E ; WRITE THE VALUE TO + EZ80_IO OUT (AY_RDAT),A ; THE SELECTED REGISTER #IF (CPUFAM == CPU_Z180) POP AF ; GET SAVED DCNTL VALUE @@ -581,14 +502,13 @@ AY_WRTPSG: LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF - JP AY_EI + RET ; ;====================================================================== ; ; READ FROM REGISTER D AND RETURN WITH RESULT IN E ; AY_RDPSG: - CALL AY_DI #IFDEF SBCV2004 LD A,(HB_RTCVAL) ; GET CURRENT RTC LATCH VALUE OR %00001000 ; SBC-V2-004 CHANGE @@ -601,7 +521,9 @@ AY_RDPSG: OUT0 (Z180_DCNTL),A ; AND UPDATE DCNTL #ENDIF LD A,D ; SELECT THE REGISTER WE + EZ80_IO OUT (AY_RSEL),A ; WANT TO READ + EZ80_IO IN A,(AY_RIN) ; READ SELECTED REGISTER LD E,A #IF (CPUFAM == CPU_Z180) @@ -612,15 +534,13 @@ AY_RDPSG: LD A,(HB_RTCVAL) ; SBC-V2-004 CHANGE TO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF - JP AY_EI + RET ; ;====================================================================== ; AY_PENDING_PERIOD .DW 0 ; PENDING PERIOD (12 BITS) ; ORDER AY_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) ; SIGNIFICANT AY_PENDING_DURATION .DW 0 ; PENDING DURATION (16 BITS) -AY_READY .DB 0 ; BIT 0 -> NZ DRIVER IS READY TO RECEIVE PLAY COMMAND - ; BIT 1 -> NZ EXECUTING WITHIN TIMER HANDLER = DO NOT DIS/ENABLE INT ; #IF AUDIOTRACE AYT_INIT .DB "\r\nAY_INIT\r\n$" diff --git a/Source/HBIOS/cfg_DUO.asm b/Source/HBIOS/cfg_DUO.asm new file mode 100644 index 00000000..0e85f07a --- /dev/null +++ b/Source/HBIOS/cfg_DUO.asm @@ -0,0 +1,380 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: DUO +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Duodyne", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_DUO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_UNSUP ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $50 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $51 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $52 ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $53 ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $54 ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $94 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $60 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET (7372800/8) ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $56 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $42 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $42 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $88 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $88 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 7372800 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $58 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $A8 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $70 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $78 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $60 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET (7372800/4) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET 0 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET (7372800/4) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET 1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_DUO ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_DUO ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET FALSE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET FALSE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $88 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $20 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $14 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET TRUE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 1 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $4E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET TRUE ; CH 0: ENABLE SD DISK +CH1BASE .SET $FF ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET FALSE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +ESPCONENABLE .SET TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +HDSKTRACE .SET 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $68 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $6C ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $48 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $EC ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_DUO ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_DUO ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $40 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_DUO ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_DYNO.asm b/Source/HBIOS/cfg_DYNO.asm new file mode 100644 index 00000000..b3f7c09f --- /dev/null +++ b/Source/HBIOS/cfg_DYNO.asm @@ -0,0 +1,360 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: DYNO +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Dyno", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $0C ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET TRUE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_DYNO ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $4C ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_EPITX.asm b/Source/HBIOS/cfg_EPITX.asm new file mode 100644 index 00000000..6c1fdae5 --- /dev/null +++ b/Source/HBIOS/cfg_EPITX.asm @@ -0,0 +1,386 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: EPITX +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "MiniITX" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_EPITX ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $0C ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +; TODO - ADD PS/2 BITBANGER +VDAEMU_SERKBD .SET $00 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 2 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 2 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $A0 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $A8 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_EPFDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_EPITX ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $40 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 2 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_FZ80.asm b/Source/HBIOS/cfg_FZ80.asm new file mode 100644 index 00000000..ed907a20 --- /dev/null +++ b/Source/HBIOS/cfg_FZ80.asm @@ -0,0 +1,395 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: FZ80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "S100 FPGA Z80", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_FZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $FF ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET TRUE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET TRUE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $34 ; SSER: STATUS PORT +SSERDATA .SET $35 ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET TRUE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET TRUE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET TRUE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET FALSE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $30 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_FZ80 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_S100 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $C7 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_GMZ180.asm b/Source/HBIOS/cfg_GMZ180.asm new file mode 100644 index 00000000..8539cbe8 --- /dev/null +++ b/Source/HBIOS/cfg_GMZ180.asm @@ -0,0 +1,391 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: GMZ180 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "GM STD BUS Z180", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_GMZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $84 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET TRUE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET TRUE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +GM7303BASE .SET $30 ; BASE ADDRESS FOR GM3703 BOARD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET TRUE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_GIDE ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_GM ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $18 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_HEATH.asm b/Source/HBIOS/cfg_HEATH.asm new file mode 100644 index 00000000..aeec7d78 --- /dev/null +++ b/Source/HBIOS/cfg_HEATH.asm @@ -0,0 +1,385 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: HEATH +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "HEATHKIT", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_HEATH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 16384000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET FALSE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET TRUE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET 0 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $E8 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $E0 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $D8 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $D0 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE]] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE]] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE]] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_MSX ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_MASTER.asm b/Source/HBIOS/cfg_MASTER.asm new file mode 100644 index 00000000..a4986b94 --- /dev/null +++ b/Source/HBIOS/cfg_MASTER.asm @@ -0,0 +1,488 @@ +; +;================================================================================================== +; ROMWBW GLOBAL MASTER CONFIGURATION FILE +;================================================================================================== +; +; THIS FILE IS THE GLOBAL MASTER CONFIGURATION FILE FOR THE ROMWBW +; BUILD PROCESS. IT DEFINES ALL POSSIBLE CONFIGURATION SETTINGS +; AVAILABLE WITHIN ROMWBW. MANY SETTINGS WILL NOT BE APPLICABLE TO +; ALL OF THE DIFFERENT ROMWBW PLATFORMS. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; EACH FILE BELOW THIS TOP MASTER CONFIGURATION FILE INHERITS THE +; CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY OVERRIDE THESE +; SETTINGS AS DESIRED. +; +; OTHER THAN THIS TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE. THE TOP TWO FILES SHOULD NOT BE MODIFIED. TO CUSTOMIZE YOUR +; BUILD SETTINGS, YOU SHOULD MODIFY THE DEFAULT BUILD SETTINGS +; (Config/_std.asm) OR PREFERABLY CREATE AN OPTIONAL CUSTOM +; USER SETTINGS FILE THAT INCLUDES THE DEFAULT BUILD SETTINGS FILE (SEE +; EXAMPLE Config/SBC_custom.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** NOTE: THIS FILE USES ".EQU" TO DEFINE ALL SETTINGS. ALL OTHER +; CONFIGURATION FILES BELOW THIS FILE MUST USE ".SET" TO OVERRIDE +; SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT TO USE ".EQU" +; TO REDEFINE A PREVIOUS DEFINITION. +; +#DEFINE PLATFORM_NAME "RomWBW", " [", CONFIG, "]" +; +#INCLUDE "hbios.inc" +; +PLATFORM .EQU PLT_NONE ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .EQU CPU_NONE ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .EQU BIOS_NONE ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .EQU FALSE ; ENABLE FONT COMPRESSION +TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .EQU 1000000 ; CPU OSC FREQ IN MHZ +INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .EQU SER_9600_8N1 ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .EQU MM_NONE ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) +MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) +MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .EQU FALSE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +Z280_MEMLOWAIT .EQU 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .EQU 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .EQU 0 ; Z280: INT ACK WAIT STATUS (0-3) +Z280_TIMER .EQU FALSE ; Z280: ENABLE INTERNAL Z280 SYSTEM PERIODIC TIMER +; +N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR +N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR +N8_RTC .EQU $88 ; N8: RTC LATCH REGISTER ADR +N8_ACR .EQU $94 ; N8: AUXILLARY CONTROL REGISTER (ACR) ADR +N8_RMAP .EQU $96 ; N8: ROM PAGE REGISTER ADR +N8_DEFACR .EQU $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) +; +RPH_PPI0 .EQU $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR +RPH_RTC .EQU $84 ; RPH: RTC LATCH REGISTER ADR +RPH_ACR .EQU $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR +RPH_DEFACR .EQU $00 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) +; +MK4_IDE .EQU $80 ; MK4: IDE REGISTERS BASE ADR +MK4_XAR .EQU $88 ; MK4: EXTERNAL ADDRESS REGISTER (XAR) ADR +MK4_SD .EQU $89 ; MK4: SD CARD CONTROL REGISTER ADR +MK4_RTC .EQU $8A ; MK4: RTC LATCH REGISTER ADR +; +RTCIO .EQU $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) +CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY +; +PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .EQU FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .EQU FALSE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .EQU FALSE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .EQU FALSE ; ENABLE LCD DISPLAY +LCDBASE .EQU $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .EQU FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +GM7303BASE .EQU $30 ; BASE ADDRESS FOR GM3703 BOARD +; +BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE +SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE +CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTCMODE_[PCF] +; +DS5RTCENABLE .EQU FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .EQU FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .EQU SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .EQU $FF ; SSER: STATUS PORT +SSERDATA .EQU $FF ; SSER: DATA PORT +SSERIRDY .EQU %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .EQU FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .EQU %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .EQU FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .EQU 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .EQU FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .EQU $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .EQU $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .EQU DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .EQU $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .EQU DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .EQU $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .EQU DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .EQU $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .EQU DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .EQU $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .EQU DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .EQU $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .EQU DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .EQU $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .EQU DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .EQU $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .EQU DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2UOSC .EQU 1843200 ; Z2U: OSC FREQUENCY IN MHZ +Z2UOSCEXT .EQU TRUE ; Z2U: USE EXTERNAL OSCILLATOR +Z2U0BASE .EQU $10 ; Z2U 0: BASE I/O ADDRESS +Z2U0CFG .EQU DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG +Z2U0HFC .EQU FALSE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL +; +ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .EQU TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] +GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] +TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .EQU FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .EQU FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .EQU TRUE ; MD: ENABLE ROM DISK +MDRAM .EQU TRUE ; MD: ENABLE RAM DISK +MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .EQU FDMODE_NONE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .EQU IDEMODE_NONE ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .EQU SDMODE_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .EQU FALSE ; CH 0: ENABLE USB DISK +CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK +CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .EQU FALSE ; CH 1: ENABLE USB DISK +CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS +PPPSDENABLE .EQU FALSE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT +PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPPCONENABLE .EQU FALSE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT +; +ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +ESPCONENABLE .EQU FALSE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT +; +HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +; +PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .EQU PPAMODE_NONE ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .EQU IMMMODE_NONE ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .EQU IMMMODE_NONE ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .EQU $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER +SN76489CHNOUT .EQU SNCHAN_BOTH ; SN: CHANNEL OUTPUTS: SNCHAN_[BOTH|LEFT|RIGHT] +AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) +; +; EZ80 SETTINGS +; +EZ80TMR_NONE .EQU 0 ; DO NOT USE ON-BOARD TIMER TO GENERATE TICKS +EZ80TMR_INT .EQU 1 ; MARSHALL TIMER TICK INTERRUPTS FROM EZ80 TO HBIOS +EZ80TMR_FIRM .EQU 2 ; DELEGATE SYS TIMER HBIOS CALL TO EZ80 FIRMWARE (TIMER TICK INTS DISABLED) +; +EZ80UARTENABLE .EQU FALSE ; EZ80 UART: ENABLE EZ80 UART0 DRIVER (EZ80UART.ASM) +EZ80RTCENABLE .EQU FALSE ; EZ80 ON CHIP RTC +EZ80TIMER .EQU EZ80TMR_FIRM ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM] +EZ80IOBASE .EQU $FF ; EZ80 I/O BASE ADDRESS FOR EXTERNAL IO +; +; BUS TIMING FOR PAGED MEMORY ACCESS (CS3) +EZ80_MEM_CYCLES .EQU 3 ; MEMORY BUS CYCLES (1-15) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CYCLES +EZ80_MEM_MIN_NS .EQU 100 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +EZ80_MEM_WS .EQU 5 ; MEMORY WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT +EZ80_MEM_MIN_WS .EQU 0 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +; +; BUS TIMING FOR EXTERNAL I/O ACCESS (CS2) +EZ80_IO_CYCLES .EQU 4 ; IO BUS CYCLES (1-15) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CYCLES +EZ80_IO_WS .EQU 5 ; IO WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT +EZ80_IO_MIN_NS .EQU 320 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +EZ80_IO_MIN_WS .EQU 6 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +; +; APPLY CYCLES, W/S OR CALCULATE CYCLES BASED ON DESIRED PERIOD +EZ80_WSMD_TYP .EQU EZ80WSMD_CALC ; BUS WAIT STATE CONFIG: EZ80WSMD_[CALC|CYCLES|WAIT] +; +; BUS TIMING FOR ON CHIP ROM +; +EZ80_FLSH_WS .EQU 1 ; WAIT STATES FOR ON CHIP FLASH (0-7) +EZ80_FLSH_MIN_NS .EQU 60 ; MINIMUM WAIT STATES TO APPLY TO ON-CHIP FLASH, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +EZ80_FWSMD_TYP .EQU EZ80WSMD_CALC ; WAIT STATE TYPE: EZ80RMMD_[CALC|WAIT] (CYCLES NOT ALLOWED) diff --git a/Source/HBIOS/cfg_MBC.asm b/Source/HBIOS/cfg_MBC.asm new file mode 100644 index 00000000..b523be30 --- /dev/null +++ b/Source/HBIOS/cfg_MBC.asm @@ -0,0 +1,366 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: MBC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Nhyodyne", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_HILO ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPCL_RAM .SET $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) +MPCL_ROM .SET $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) +; +RTCIO .SET $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET (4915200/8) ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 3 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $68 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $80 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $88 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_MBC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET FALSE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET FALSE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $20 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $14 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +ESPCONENABLE .SET TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +HDSKTRACE .SET 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +; +PIOENABLE .SET TRUE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $E8 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $EC ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_MBC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_MK4.asm b/Source/HBIOS/cfg_MK4.asm new file mode 100644 index 00000000..f2990440 --- /dev/null +++ b/Source/HBIOS/cfg_MK4.asm @@ -0,0 +1,363 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: MK4 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Mark IV", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z180_BASE .SET $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +MK4_IDE .SET $80 ; MK4: IDE REGISTERS BASE ADR +MK4_XAR .SET $88 ; MK4: EXTERNAL ADDRESS REGISTER (XAR) ADR +MK4_SD .SET $89 ; MK4: SD CARD CONTROL REGISTER ADR +MK4_RTC .SET $8A ; MK4: RTC LATCH REGISTER ADR +; +RTCIO .SET MK4_RTC ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 6 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET TRUE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $18 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $80 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $C0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $C8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $D0 ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $D8 ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_MK4 ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $80 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_DIDE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $20 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $28 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $28 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET FALSE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET FALSE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_DIDE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $30 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $38 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $38 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET FALSE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET FALSE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 2 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $14 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $20 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET TRUE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +PPPBASE .SET $60 ; PPP: PPI REGISTERS BASE ADDRESS +PPPSDENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT +PPPSDTRACE .SET 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPPCONENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $E8 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $EC ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_MON.asm b/Source/HBIOS/cfg_MON.asm new file mode 100644 index 00000000..fea9559d --- /dev/null +++ b/Source/HBIOS/cfg_MON.asm @@ -0,0 +1,390 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: MON +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Monsputer", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_MON ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 4000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_MON ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_N8.asm b/Source/HBIOS/cfg_N8.asm new file mode 100644 index 00000000..92653bb0 --- /dev/null +++ b/Source/HBIOS/cfg_N8.asm @@ -0,0 +1,356 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: N8 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RetroBrew N8", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_N8 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z180_BASE .SET $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +N8_PPI0 .SET $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR +N8_PPI1 .SET $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR +N8_RTC .SET $88 ; N8: RTC LATCH REGISTER ADR +N8_ACR .SET $94 ; N8: AUXILLARY CONTROL REGISTER (ACR) ADR +N8_RMAP .SET $96 ; N8: ROM PAGE REGISTER ADR +N8_DEFACR .SET $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) +; +RTCIO .SET N8_RTC ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET N8_PPI0 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET N8_PPI0 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 5 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET TRUE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $C0 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $C8 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $D0 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $D8 ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_N8 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET FALSE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET FALSE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET N8_PPI0 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET N8_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET N8_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_NABU.asm b/Source/HBIOS/cfg_NABU.asm new file mode 100644 index 00000000..eb6a7742 --- /dev/null +++ b/Source/HBIOS/cfg_NABU.asm @@ -0,0 +1,395 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: NABU +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "NABU Personal Computer", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_NABU ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 3580000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_NABU ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $00 ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET TRUE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $48 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_NABU ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET TRUE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET TRUE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_NABU ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_RCEZ80.asm b/Source/HBIOS/cfg_RCEZ80.asm new file mode 100644 index 00000000..edb7f22c --- /dev/null +++ b/Source/HBIOS/cfg_RCEZ80.asm @@ -0,0 +1,430 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: RCZE80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_RCEZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_EZ80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 20000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET CPUOSC/4 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET CPUOSC/4 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) +; +; EZ80 SETTINGS +; +EZ80TMR_NONE .SET 0 ; DO NOT USE ON-BOARD TIMER TO GENERATE TICKS +EZ80TMR_INT .SET 1 ; MARSHALL TIMER TICK INTERRUPTS FROM EZ80 TO HBIOS +EZ80TMR_FIRM .SET 2 ; DELEGATE SYS TIMER HBIOS CALL TO EZ80 FIRMWARE (TIMER TICK INTS DISABLED) +; +EZ80UARTENABLE .SET TRUE ; EZ80 UART: ENABLE EZ80 UART0 DRIVER (EZ80UART.ASM) +EZ80RTCENABLE .SET TRUE ; EZ80 ON CHIP RTC +EZ80TIMER .SET EZ80TMR_FIRM ; EZ80: TIMER TICK MODEL: EZ80TMR_[INT|FIRM] +EZ80IOBASE .SET $FF ; EZ80 I/O BASE ADDRESS FOR EXTERNAL IO +; +; BUS TIMING FOR PAGED MEMORY ACCESS (CS3) +EZ80_MEM_CYCLES .SET 3 ; MEMORY BUS CYCLES (1-15) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CYCLES +EZ80_MEM_MIN_NS .SET 100 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +EZ80_MEM_WS .SET 5 ; MEMORY WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT +EZ80_MEM_MIN_WS .SET 0 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +; +; BUS TIMING FOR EXTERNAL I/O ACCESS (CS2) +EZ80_IO_CYCLES .SET 4 ; IO BUS CYCLES (1-15) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CYCLES +EZ80_IO_WS .SET 7 ; IO WAIT STATES (0-7) TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_WAIT +EZ80_IO_MIN_NS .SET 250 ; CALCULATE AT BOOT TIME THE REQUIRED W/S OR B/C, IF EZ80_WSMD_TYP = EZ80WSMD_CALC + +; THE MINMUM W/S SHOULD BE AT LEAST 1 GREATER THAN THE HOLD TRIGGER COUNT PROGRAMMED WITHIN THE PLD OF THE +; EZ80 INTERFACE MODULE. SEE THE EZ80-CPU.PLD FILE WITHIN THE EZ80 FIRMWARE CODE BASE +EZ80_IO_MIN_WS .SET 7 ; MINIMUM WAIT STATES TO APPLY, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +; +; APPLY CYCLES, W/S OR CALCULATE CYCLES BASED ON DESIRED PERIOD +EZ80_WSMD_TYP .SET EZ80WSMD_CALC ; BUS WAIT STATE CONFIG: EZ80WSMD_[CALC|CYCLES|WAIT] +; +; BUS TIMING FOR ON CHIP ROM +; +EZ80_FLSH_WS .SET 1 ; WAIT STATES FOR ON CHIP FLASH (0-7) +EZ80_FLSH_MIN_NS .SET 60 ; MINIMUM WAIT STATES TO APPLY TO ON-CHIP FLASH, IF EZ80_WSMD_TYP = EZ80WSMD_CALC +EZ80_FWSMD_TYP .SET EZ80WSMD_CALC ; WAIT STATE TYPE: EZ80RMMD_[CALC|WAIT] (CYCLES NOT ALLOWED) diff --git a/Source/HBIOS/cfg_RCZ180.asm b/Source/HBIOS/cfg_RCZ180.asm new file mode 100644 index 00000000..e9bbc699 --- /dev/null +++ b/Source/HBIOS/cfg_RCZ180.asm @@ -0,0 +1,390 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: RCZ180 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $0C ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY +LCDBASE .SET $AA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_RCZ280.asm b/Source/HBIOS/cfg_RCZ280.asm new file mode 100644 index 00000000..bf6ce0c1 --- /dev/null +++ b/Source/HBIOS/cfg_RCZ280.asm @@ -0,0 +1,400 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: RCZ280 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z280 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 24000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) +Z280_MEMHIWAIT .SET 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) +Z280_IOWAIT .SET 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z280_INTWAIT .SET 0 ; Z280: INT ACK WAIT STATUS (0-3) +Z280_TIMER .SET TRUE ; Z280: ENABLE INTERNAL Z280 SYSTEM PERIODIC TIMER +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +Z2UOSC .SET 1843200 ; Z2U: OSC FREQUENCY IN MHZ +Z2UOSCEXT .SET TRUE ; Z2U: USE EXTERNAL OSCILLATOR +Z2U0BASE .SET $10 ; Z2U 0: BASE I/O ADDRESS +Z2U0CFG .SET DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG +Z2U0HFC .SET FALSE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL +; +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET 7372800 ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET 7372800 ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_RCZ80.asm b/Source/HBIOS/cfg_RCZ80.asm new file mode 100644 index 00000000..d7cf922c --- /dev/null +++ b/Source/HBIOS/cfg_RCZ80.asm @@ -0,0 +1,395 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: RCZ80 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ +INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $C0 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET CPUOSC ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +SKZDIV .SET DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +WDOGIO .SET $6E ; WATCHDOG REGISTER ADR +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +ACIADEBUG .SET FALSE ; ACIA: ENABLE DEBUG OUTPUT +ACIACNT .SET 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) +ACIA0BASE .SET $80 ; ACIA 0: REGISTERS BASE ADR +ACIA0CLK .SET CPUOSC ; ACIA 0: OSC FREQ IN HZ +ACIA0DIV .SET 1 ; ACIA 0: SERIAL CLOCK DIVIDER +ACIA0CFG .SET DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) +ACIA1BASE .SET $40 ; ACIA 1: REGISTERS BASE ADR +ACIA1CLK .SET CPUOSC ; ACIA 1: OSC FREQ IN HZ +ACIA1DIV .SET 1 ; ACIA 1: SERIAL CLOCK DIVIDER +ACIA1CFG .SET DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $0C ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_RPH.asm b/Source/HBIOS/cfg_RPH.asm new file mode 100644 index 00000000..1365f5e7 --- /dev/null +++ b/Source/HBIOS/cfg_RPH.asm @@ -0,0 +1,344 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: RPH +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Rhyophyre", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET TRUE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_RPH ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +; +Z180_BASE .SET $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RPH_PPI0 .SET $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR +RPH_RTC .SET $84 ; RPH: RTC LATCH REGISTER ADR +RPH_ACR .SET $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR +RPH_DEFACR .SET $20 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) +; +RTCIO .SET RPH_RTC ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET RPH_PPI0 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET RPH_PPI0 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET TRUE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +GDCMODE .SET GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] +GDCMON .SET GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_N8 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET FALSE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET FALSE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET RPH_PPI0 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET RPH_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET FALSE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET RPH_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_S100.asm b/Source/HBIOS/cfg_S100.asm new file mode 100644 index 00000000..4fbfc00c --- /dev/null +++ b/Source/HBIOS/cfg_S100.asm @@ -0,0 +1,380 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: S100 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "S100", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_S100 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_57600_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 1 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 2 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $0C ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET TRUE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $18 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_SBC.asm b/Source/HBIOS/cfg_SBC.asm new file mode 100644 index 00000000..ded55bd7 --- /dev/null +++ b/Source/HBIOS/cfg_SBC.asm @@ -0,0 +1,345 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: SBC +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "RetroBrew SBC", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPCL_RAM .SET $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) +MPCL_ROM .SET $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) +; +RTCIO .SET $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $B0 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 2 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 3 ; TIMER CHANNEL (0-3) +CTCOSC .SET 614400 ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 7 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET TRUE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $68 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $80 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $18 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $C0 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $C8 ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $D0 ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $D8 ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $B0 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +VDUSIZ .SET V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +CVDUMODE .SET CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] +CVDUMON .SET CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VGASIZ .SET V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +RFCNT .SET 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $20 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET FALSE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET FALSE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $20 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $14 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +HDSKTRACE .SET 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO4BASE .SET $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIOZBASE .SET $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +UFBASE .SET $0C ; UF: REGISTERS BASE ADR +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_SCZ180.asm b/Source/HBIOS/cfg_SCZ180.asm new file mode 100644 index 00000000..280e9b21 --- /dev/null +++ b/Source/HBIOS/cfg_SCZ180.asm @@ -0,0 +1,390 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: SCZ180 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Small Computer", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +RAMBIAS .SET ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +Z180_BASE .SET $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS +Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 +Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3) +Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) +Z180_TIMER .SET TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER +; +RTCIO .SET $0C ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $88 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET TRUE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $0E ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET TRUE ; ENABLE LCD DISPLAY +LCDBASE .SET $AA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +DUARTCNT .SET 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) +DUART0BASE .SET $A0 ; DUART 0: BASE ADDRESS OF CHIP +DUART0ACFG .SET DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG +DUART0BCFG .SET DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG +DUART1BASE .SET $40 ; DUART 1: BASE ADDRESS OF CHIP +DUART1ACFG .SET DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG +DUART1BCFG .SET DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 4 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $80 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $88 ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $A0 ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $A8 ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +ASCIINTS .SET TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +ASCISWAP .SET FALSE ; ASCI: SWAP CHANNELS +ASCIBOOT .SET 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) +ASCI0CFG .SET DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG +ASCI1CFG .SET DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +IDETRACE .SET 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IDECNT .SET 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH +IDE0MODE .SET IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE0BASE .SET $10 ; IDE 0: IO BASE ADDRESS +IDE0DATLO .SET $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O +IDE0DATHI .SET $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O +IDE0A8BIT .SET TRUE ; IDE 0A (MASTER): 8 BIT XFER +IDE0B8BIT .SET TRUE ; IDE 0B (MASTER): 8 BIT XFER +IDE1MODE .SET IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE1BASE .SET $00 ; IDE 1: IO BASE ADDRESS +IDE1DATLO .SET $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O +IDE1DATHI .SET $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O +IDE1A8BIT .SET TRUE ; IDE 1A (MASTER): 8 BIT XFER +IDE1B8BIT .SET TRUE ; IDE 1B (MASTER): 8 BIT XFER +IDE2MODE .SET IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC|GIDE] +IDE2BASE .SET $00 ; IDE 2: IO BASE ADDRESS +IDE2DATLO .SET $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O +IDE2DATHI .SET $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O +IDE2A8BIT .SET TRUE ; IDE 2A (MASTER): 8 BIT XFER +IDE2B8BIT .SET TRUE ; IDE 2B (MASTER): 8 BIT XFER +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $20 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE1BASE .SET $00 ; PPIDE 1: PPI REGISTERS BASE ADR +PPIDE1A8BIT .SET FALSE ; PPIDE 1A (MASTER): 8 BIT XFER +PPIDE1B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +PPIDE2BASE .SET $00 ; PPIDE 2: PPI REGISTERS BASE ADR +PPIDE2A8BIT .SET FALSE ; PPIDE 2A (MASTER): 8 BIT XFER +PPIDE2B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET TRUE ; CH: ENABLE CH375/376 USB SUPPORT +CHTRACE .SET 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHUSBTRACE .SET 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHSDTRACE .SET 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +CHCNT .SET 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) +CH0BASE .SET $3E ; CH 0: BASE I/O ADDRESS +CH0USBENABLE .SET TRUE ; CH 0: ENABLE USB DISK +CH0SDENABLE .SET FALSE ; CH 0: ENABLE SD DISK +CH1BASE .SET $3C ; CH 1: BASE I/O ADDRESS +CH1USBENABLE .SET TRUE ; CH 1: ENABLE USB DISK +CH1SDENABLE .SET FALSE ; CH 1: ENABLE SD DISK +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +PRPSDENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT +PRPSDTRACE .SET 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PRPCONENABLE .SET TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +PIOCNT .SET 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +PIO0BASE .SET $B8 ; PIO 0: REGISTERS BASE ADR +PIO1BASE .SET $BC ; PIO 1: REGISTERS BASE ADR +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +LPTMODE .SET LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] +LPTCNT .SET 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) +LPTTRACE .SET 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +LPT0BASE .SET $18 ; LPT 0: REGISTERS BASE ADR +LPT1BASE .SET $00 ; LPT 1: REGISTERS BASE ADR +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +PPACNT .SET 1 ; PPA: NUMBER OF PPA DEVICES (1-2) +PPATRACE .SET 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPAMODE .SET PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] +PPA0BASE .SET LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA +PPA1BASE .SET LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +IMMCNT .SET 1 ; IMM: NUMBER OF IMM DEVICES (1-2) +IMMTRACE .SET 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +IMMMODE .SET IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] +IMM0BASE .SET LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM +IMM1BASE .SET LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +SYQCNT .SET 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) +SYQTRACE .SET 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SYQMODE .SET IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] +SYQ0BASE .SET LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ +SYQ1BASE .SET LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AUDIOTRACE .SET FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER +SN7CLK .SET 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD +SNMODE .SET SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] +; +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +AY_CLK .SET 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD +AYMODE .SET AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] +; +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_UNA.asm b/Source/HBIOS/cfg_UNA.asm new file mode 100644 index 00000000..4fe90615 --- /dev/null +++ b/Source/HBIOS/cfg_UNA.asm @@ -0,0 +1,42 @@ +; +;================================================================================================== +; ROMWBW 3.X CONFIGURATION DEFAULTS FOR UNA +;================================================================================================== +; +; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD +; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY +; UNDER THIS DIRECTORY. +; +; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS +; FOR THE PLATFORM. +; +#DEFINE PLATFORM_NAME "UNA", " [", CONFIG, "]" +; +#INCLUDE "../UBIOS/ubios.inc" +; +;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA] +; +FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES +; +DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING +; +BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +; +CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ +INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +; +RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .EQU 0 ; NOT SUPPORTED ON UNA +; +MDROM .EQU TRUE ; MD: ENABLE ROM DISK +MDRAM .EQU TRUE ; MD: ENABLE RAM DISK +; +RTCIO .EQU $70 ; RTC LATCH REGISTER ADR +; +DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) diff --git a/Source/HBIOS/cfg_Z80RETRO.asm b/Source/HBIOS/cfg_Z80RETRO.asm new file mode 100644 index 00000000..a6c9d088 --- /dev/null +++ b/Source/HBIOS/cfg_Z80RETRO.asm @@ -0,0 +1,311 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: Z80RETRO +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Z80Retro", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $60 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $61 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $62 ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $63 ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $64 ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $40 ; CTC BASE I/O ADDRESS +CTCTIMER .SET FALSE ; ENABLE CTC PERIODIC TIMER (too fast for RomWBW right now) +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 0 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 1 ; TIMER CHANNEL (0-3) +CTCOSC .SET 7372800 ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET $00 ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $FF ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET DEFSERCFG ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +SIODEBUG .SET FALSE ; SIO: ENABLE DEBUG OUTPUT +SIOBOOT .SET 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) +SIOCNT .SET 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP +SIOINTS .SET TRUE ; SIO: INCLUDE SIO INTERRUPT SUPPORT UNDER IM1/2/3 +SIO0MODE .SET SIOMODE_Z80R ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO0BASE .SET $80 ; SIO 0: REGISTERS BASE ADR +SIO0ACLK .SET CPUOSC/2 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0ACFG .SET DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG +SIO0ACTCC .SET -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO0BCLK .SET CPUOSC/2 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO0BCFG .SET DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG +SIO0BCTCC .SET -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1MODE .SET SIOMODE_Z80R ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] +SIO1BASE .SET $84 ; SIO 1: REGISTERS BASE ADR +SIO1ACLK .SET CPUOSC/2 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1ACFG .SET DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG +SIO1ACTCC .SET -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +SIO1BCLK .SET CPUOSC/2 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 +SIO1BCFG .SET DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG +SIO1BCTCC .SET -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_Z80R ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +PPPBASE .SET $60 ; PPP: PPI REGISTERS BASE ADDRESS +PPPSDENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT +PPPSDTRACE .SET 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPPCONENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_ZETA.asm b/Source/HBIOS/cfg_ZETA.asm new file mode 100644 index 00000000..7640bf05 --- /dev/null +++ b/Source/HBIOS/cfg_ZETA.asm @@ -0,0 +1,281 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: ZETA +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Zeta", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPCL_RAM .SET $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) +MPCL_ROM .SET $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) +; +RTCIO .SET $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET FALSE ; ENABLE ZILOG CTC SUPPORT +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $68 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +PPPBASE .SET $60 ; PPP: PPI REGISTERS BASE ADDRESS +PPPSDENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT +PPPSDTRACE .SET 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPPCONENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_ZETA2.asm b/Source/HBIOS/cfg_ZETA2.asm new file mode 100644 index 00000000..11662620 --- /dev/null +++ b/Source/HBIOS/cfg_ZETA2.asm @@ -0,0 +1,292 @@ +; +;================================================================================================== +; ROMWBW PLATFORM CONFIGURATION DEFAULTS FOR PLATFORM: ZETA2 +;================================================================================================== +; +; THIS FILE DEFINES THE DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM +; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, +; YOU SHOULD OVERRIDE SETTINGS YOU WANT USING A CONFIGURATION FILE IN +; THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. IT IS MAINTAINED BY THE +; AUTHORS OF ROMWBW. TO OVERRIDE SETTINGS YOU SHOULD USE A +; CONFIGURATION FILE IN THE CONFIG DIRECTORY UNDER THIS DIRECTORY. +; +; ROMWBW USES CASCADING CONFIGURATION FILES AS INDICATED BELOW: +; +; cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +; | +; +-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM +; | +; +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD +; | +; +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS +; +; THE TOP (MASTER CONFIGURATION) FILE DEFINES ALL POSSIBLE ROMWBW +; CONFIGURATION SETTINGS. EACH FILE BELOW THE MASTER CONFIGURATION FILE +; INHERITS THE CUMULATIVE SETTINGS OF THE FILES ABOVE IT AND MAY +; OVERRIDE THESE SETTINGS AS DESIRED. +; +; OTHER THAN THE TOP MASTER FILE, EACH FILE MUST "#INCLUDE" ITS PARENT +; FILE (SEE #INCLUDE STATEMENT BELOW). THE TOP TWO FILES SHOULD NOT BE +; MODIFIED. TO CUSTOMIZE YOUR BUILD SETTINGS YOU SHOULD MODIFY THE +; DEFAULT BUILD SETTINGS (Config/_std.asm) OR PREFERABLY +; CREATE AN OPTIONAL CUSTOM USER SETTINGS FILE THAT INCLUDES THE DEFAULT +; BUILD SETTINGS FILE (SEE EXAMPLE Config/SBC_user.asm). +; +; BY CREATING A CUSTOM USER SETTINGS FILE, YOU ARE LESS LIKELY TO BE +; IMPACTED BY FUTURE CHANGES BECAUSE YOU WILL BE INHERITING MOST +; OF YOUR SETTINGS WHICH WILL BE UPDATED BY AUTHORS AS ROMWBW EVOLVES. +; +; *** WARNING: ASIDE FROM THE MASTER CONFIGURATION FILE, YOU MUST USE +; ".SET" TO OVERRIDE SETTINGS. THE ASSEMBLER WILL ERROR IF YOU ATTEMPT +; TO USE ".EQU" BECAUSE IT WON'T LET YOU REDEFINE A SETTING WITH ".EQU". +; +#DEFINE PLATFORM_NAME "Zeta 2", " [", CONFIG, "]" +; +#INCLUDE "cfg_MASTER.asm" +; +PLATFORM .SET PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCEZ80|RCZ180|EZZ80|SCZ180|GMZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|EPITX|MON|STDZ180|NABU|FZ80] +CPUFAM .SET CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280|EZ80] +BIOS .SET BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] +BATCOND .SET FALSE ; ENABLE LOW BATTERY WARNING MESSAGE +HBIOS_MUTEX .SET FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) +USELZSA2 .SET TRUE ; ENABLE FONT COMPRESSION +TICKFREQ .SET 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) +; +BOOT_TIMEOUT .SET -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE +BOOT_DELAY .SET 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .SET TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT +; +CPUSPDCAP .SET SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO +CPUSPDDEF .SET SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW +CPUOSC .SET 8000000 ; CPU OSC FREQ IN MHZ +INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) +DEFSERCFG .SET SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) +; +RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) +ROMSIZE .SET 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) +APP_BNKS .SET $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) +MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] +MPGSEL_0 .SET $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) +MPGSEL_1 .SET $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) +MPGSEL_2 .SET $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) +MPGSEL_3 .SET $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) +MPGENA .SET $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) +; +RTCIO .SET $70 ; RTC LATCH REGISTER ADR +; +KIOENABLE .SET FALSE ; ENABLE ZILOG KIO SUPPORT +KIOBASE .SET $80 ; KIO BASE I/O ADDRESS +; +CTCENABLE .SET TRUE ; ENABLE ZILOG CTC SUPPORT +CTCDEBUG .SET FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT +CTCBASE .SET $20 ; CTC BASE I/O ADDRESS +CTCTIMER .SET TRUE ; ENABLE CTC PERIODIC TIMER +CTCMODE .SET CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] +CTCPRE .SET 256 ; PRESCALE CONSTANT (1-256) +CTCPRECH .SET 0 ; PRESCALE CHANNEL (0-3) +CTCTIMCH .SET 1 ; TIMER CHANNEL (0-3) +CTCOSC .SET 921600 ; CTC CLOCK FREQUENCY +; +PCFENABLE .SET FALSE ; ENABLE PCF8584 I2C CONTROLLER +PCFBASE .SET $F0 ; PCF8584 BASE I/O ADDRESS +; +EIPCENABLE .SET FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION +; +SKZENABLE .SET FALSE ; ENABLE SERGEY'S Z80-512K FEATURES +; +WDOGMODE .SET WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] +; +FPLED_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL LEDS +FPLED_IO .SET $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .SET FALSE ; FP: LED BITS ARE INVERTED +FPLED_DSKACT .SET TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS +FPSW_ENABLE .SET FALSE ; FP: ENABLES FRONT PANEL SWITCHES +FPSW_IO .SET $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .SET FALSE ; FP: SWITCH BITS ARE INVERTED +; +DIAGLVL .SET DL_CRITICAL ; ERROR LEVEL REPORTING +; +LEDENABLE .SET FALSE ; ENABLES STATUS LED (SINGLE LED) +LEDMODE .SET LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] +LEDPORT .SET RTCIO ; STATUS LED PORT ADDRESS +LEDDISKIO .SET TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED +; +DSKYENABLE .SET FALSE ; ENABLES DSKY FUNCTIONALITY +DSKYDSKACT .SET TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY +ICMENABLE .SET FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) +ICMPPIBASE .SET $60 ; BASE I/O ADDRESS OF ICM PPI +PKDENABLE .SET FALSE ; ENABLES DSKY NG PKD DRIVER (8259) +PKDPPIBASE .SET $60 ; BASE I/O ADDRESS OF PKD PPI +PKDOSC .SET 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) +H8PENABLE .SET FALSE ; ENABLES HEATH H8 FRONT PANEL +LCDENABLE .SET FALSE ; ENABLE LCD DISPLAY +LCDBASE .SET $DA ; BASE I/O ADDRESS OF LCD CONTROLLER +GM7303ENABLE .SET FALSE ; ENABLES THE GM7303 BOARD WITH 16X2 LCD +; +BOOTCON .SET 0 ; BOOT CONSOLE DEVICE +SECCON .SET $FF ; SECONDARY CONSOLE DEVICE +CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP +VDAEMU .SET EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] +VDAEMU_SERKBD .SET $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD +ANSITRACE .SET 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKTRACE .SET 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +KBDTRACE .SET 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPKKBLOUT .SET KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] +KBDKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +MKYKBLOUT .SET KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] +; +DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) +DSRTCMODE .SET DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTCMODE_[STD|MFPIC|K80W] +DSRTCCHG .SET FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) +; +DS1501RTCENABLE .SET FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) +DS1501RTC_BASE .SET $50 ; DS1501RTC: I/O BASE ADDRESS +; +BQRTCENABLE .SET FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) +BQRTC_BASE .SET $50 ; BQRTC: I/O BASE ADDRESS +; +INTRTCENABLE .SET FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) +; +RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) +; +HTIMENABLE .SET FALSE ; ENABLE SIMH TIMER SUPPORT +SIMRTCENABLE .SET FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) +; +DS7RTCENABLE .SET FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) +DS7RTCMODE .SET DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] +; +DS5RTCENABLE .SET FALSE ; DS5RTC: ENABLE DS-1305 SPI CLOCK DRIVER (DS5RTC.ASM) +; +SSERENABLE .SET FALSE ; SSER: ENABLE SIMPLE SERIAL DRIVER (SSER.ASM) +SSERCFG .SET SER_9600_8N1 ; SSER: SERIAL LINE CONFIG +SSERSTATUS .SET $FF ; SSER: STATUS PORT +SSERDATA .SET $FF ; SSER: DATA PORT +SSERIRDY .SET %00000001 ; SSER: INPUT READY BIT MASK +SSERIINV .SET FALSE ; SSER: INPUT READY BIT INVERTED +SSERORDY .SET %00000010 ; SSER: OUTPUT READY BIT MASK +SSEROINV .SET FALSE ; SSER: OUTPUT READY BIT INVERTED +; +DUARTENABLE .SET FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) +; +UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) +UARTCNT .SET 1 ; UART: NUMBER OF CHIPS TO DETECT (1-8) +UARTOSC .SET 1843200 ; UART: OSC FREQUENCY IN MHZ +UARTINTS .SET FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 +UART4UART .SET FALSE ; UART: SUPPORT 4UART ECB BOARD +UART4UARTBASE .SET $C0 ; UART: BASE IO ADDRESS OF 4UART ECB BOARD +UART0BASE .SET $68 ; UART 0: REGISTERS BASE ADR +UART0CFG .SET DEFSERCFG ; UART 0: SERIAL LINE CONFIG +UART1BASE .SET $FF ; UART 1: REGISTERS BASE ADR +UART1CFG .SET SER_300_8N1 ; UART 1: SERIAL LINE CONFIG +UART2BASE .SET $FF ; UART 2: REGISTERS BASE ADR +UART2CFG .SET DEFSERCFG ; UART 2: SERIAL LINE CONFIG +UART3BASE .SET $FF ; UART 3: REGISTERS BASE ADR +UART3CFG .SET DEFSERCFG ; UART 3: SERIAL LINE CONFIG +UART4BASE .SET $FF ; UART 4: REGISTERS BASE ADR +UART4CFG .SET DEFSERCFG ; UART 4: SERIAL LINE CONFIG +UART5BASE .SET $FF ; UART 5: REGISTERS BASE ADR +UART5CFG .SET DEFSERCFG ; UART 5: SERIAL LINE CONFIG +UART6BASE .SET $FF ; UART 6: REGISTERS BASE ADR +UART6CFG .SET DEFSERCFG ; UART 6: SERIAL LINE CONFIG +UART7BASE .SET $FF ; UART 7: REGISTERS BASE ADR +UART7CFG .SET DEFSERCFG ; UART 7: SERIAL LINE CONFIG +; +ASCIENABLE .SET FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) +; +Z2UENABLE .SET FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) +; +ACIAENABLE .SET FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) +; +SIOENABLE .SET FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) +; +XIOCFG .SET DEFSERCFG ; XIO: SERIAL LINE CONFIG +; +VDUENABLE .SET FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) +CVDUENABLE .SET FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) +GDCENABLE .SET FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) +TMSENABLE .SET FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) +TMSMODE .SET TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MSX|MSXKBD|MSXMKY|MBC|COLECO|DUO|NABU] +TMS80COLS .SET FALSE ; TMS: ENABLE 80 COLUMN SCREEN, REQUIRES V9958 +TMSTIMENABLE .SET FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) +VGAENABLE .SET FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) +VRCENABLE .SET FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) +SCONENABLE .SET FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) +EFENABLE .SET FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) +FVENABLE .SET FALSE ; FV: ENABLE FPGA VGA VIDEO DRIVER (FV.ASM) +; +MDENABLE .SET TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) +MDROM .SET TRUE ; MD: ENABLE ROM DISK +MDRAM .SET TRUE ; MD: ENABLE RAM DISK +MDTRACE .SET 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +MDFFENABLE .SET FALSE ; MD: ENABLE FLASH FILE SYSTEM +; +FDENABLE .SET TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) +FDMODE .SET FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] +FDCNT .SET 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) +FDTRACE .SET 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) +FDMAUTO .SET TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS +FD0TYPE .SET FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +FD1TYPE .SET FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] +; +RFENABLE .SET FALSE ; RF: ENABLE RAM FLOPPY DRIVER +; +IDEENABLE .SET FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) +; +PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) +PPIDETRACE .SET 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPIDECNT .SET 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP +PPIDE0BASE .SET $60 ; PPIDE 0: PPI REGISTERS BASE ADR +PPIDE0A8BIT .SET FALSE ; PPIDE 0A (MASTER): 8 BIT XFER +PPIDE0B8BIT .SET FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER +; +SDENABLE .SET FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) +SDMODE .SET SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|USR|PIO|Z80R|EPITX|FZ80|GM] +SDPPIBASE .SET $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE +SDCNT .SET 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY +SDTRACE .SET 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +SDCSIOFAST .SET FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE +SDMTSWAP .SET FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 +; +CHENABLE .SET FALSE ; CH: ENABLE CH375/376 USB SUPPORT +; +PRPENABLE .SET FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) +; +PPPENABLE .SET FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) +PPPBASE .SET $60 ; PPP: PPI REGISTERS BASE ADDRESS +PPPSDENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT +PPPSDTRACE .SET 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) +PPPCONENABLE .SET TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT +; +ESPENABLE .SET FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) +; +HDSKENABLE .SET FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) +; +PIOENABLE .SET FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) +; +LPTENABLE .SET FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) +; +PPAENABLE .SET FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) +; +IMMENABLE .SET FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) +; +SYQENABLE .SET FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) +; +PIO_4P .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD +PIO_ZP .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) +PIO_SBC .SET FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP +PIOSBASE .SET $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI +; +UFENABLE .SET FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) +; +SN76489ENABLE .SET FALSE ; SN: ENABLE SN76489 SOUND DRIVER +AY38910ENABLE .SET FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER +SPKENABLE .SET FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) +; +DMAENABLE .SET FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) +DMABASE .SET $E0 ; DMA: DMA BASE ADDRESS +DMAMODE .SET DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) +; +YM2612ENABLE .SET FALSE ; YM2612: ENABLE YM2612 DRIVER +VGMBASE .SET $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm deleted file mode 100644 index 4843f81b..00000000 --- a/Source/HBIOS/cfg_duo.asm +++ /dev/null @@ -1,324 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR DUODYNE -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Duodyne", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_DUO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU FALSE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_UNSUP ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $50 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $51 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $52 ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $53 ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $54 ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $94 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $60 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU (7372800/8) ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $56 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $42 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $42 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU TRUE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $88 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU TRUE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $88 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 7372800 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU TRUE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU TRUE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $60 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU (7372800/4) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU 0 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU (7372800/4) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU 1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_DUO ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -; -FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_DUO ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $88 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU TRUE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 1 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $4E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU TRUE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $FF ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU FALSE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -; -PIOENABLE .EQU TRUE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $68 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $6C ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $48 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -UFBASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_DUO ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM|DUO] -; -AY38910ENABLE .EQU TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_DUO ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU TRUE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $40 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_DUO ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm deleted file mode 100644 index dd3f3c05..00000000 --- a/Source/HBIOS/cfg_dyno.asm +++ /dev/null @@ -1,303 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR DYNO -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Dyno", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_DYNO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $0C ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU TRUE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_DYNO ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $4C ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_epitx.asm b/Source/HBIOS/cfg_epitx.asm deleted file mode 100644 index 4002c7d1..00000000 --- a/Source/HBIOS/cfg_epitx.asm +++ /dev/null @@ -1,335 +0,0 @@ -; -;================================================================================================== -; ROMWBW 2.X CONFIGURATION DEFAULTS FOR SC Z180 VARIANTS (SC126, SC130, ETC.) -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "MiniITX" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_EPITX ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $0C ; RTC LATCH REGISTER ADR - TODO -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES -FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS -DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT -DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS -DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -; TODO - ADD PS/2 BITBANGER -VDAEMU_SERKBD .EQU $00 ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 2 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_EPFDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_EPITX ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|EPITX] -SDPPIBASE .EQU $40 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD & SC ONLY -SDTRACE .EQU 2 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm deleted file mode 100644 index 41f6cb6a..00000000 --- a/Source/HBIOS/cfg_heath.asm +++ /dev/null @@ -1,328 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z80 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_HEATH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 7372800 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm deleted file mode 100644 index e10cda1d..00000000 --- a/Source/HBIOS/cfg_master.asm +++ /dev/null @@ -1,395 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION MASTER -;================================================================================================== -; -; THIS FILE IS *NOT* A REAL CONFIGURATION FILE. IT IS A MASTER TEMPLATE FILE -; CONTAINING ALL POSSIBLE CONFIGURATION SETTINGS ACROSS ALL PLATFORMS. IT IS -; USED ONLY AS A REFERENCE TO HELP MANAGE THE FULL SET OF POSSIBLE SETTINGS AND -; KEEP THINGS CONSISTENT. -; -#DEFINE PLATFORM_NAME "RomWBW", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_NONE ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) -MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU FALSE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -Z280_MEMLOWAIT .EQU 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .EQU 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .EQU 0 ; Z280: INT ACK WAIT STATUS (0-3) -Z280_TIMER .EQU FALSE ; Z280: ENABLE INTERNAL Z280 SYSTEM PERIODIC TIMER -; -N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR -N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR -N8_RTC .EQU $88 ; N8: RTC LATCH REGISTER ADR -N8_ACR .EQU $94 ; N8: AUXILLARY CONTROL REGISTER (ACR) ADR -N8_RMAP .EQU $96 ; N8: ROM PAGE REGISTER ADR -N8_DEFACR .EQU $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) -; -RPH_PPI0 .EQU $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR -RPH_RTC .EQU $84 ; RPH: RTC LATCH REGISTER ADR -RPH_ACR .EQU $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR -RPH_DEFACR .EQU $00 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) -; -MK4_IDE .EQU $80 ; MK4: IDE REGISTERS BASE ADR -MK4_XAR .EQU $88 ; MK4: EXTERNAL ADDRESS REGISTER (XAR) ADR -MK4_SD .EQU $89 ; MK4: SD CARD CONTROL REGISTER ADR -MK4_RTC .EQU $8A ; MK4: RTC LATCH REGISTER ADR -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 8255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -Z2UOSC .EQU 1843200 ; Z2U: OSC FREQUENCY IN MHZ -Z2UOSCEXT .EQU TRUE ; Z2U: USE EXTERNAL OSCILLATOR -Z2U0BASE .EQU $10 ; Z2U 0: BASE I/O ADDRESS -Z2U0CFG .EQU DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG -Z2U0HFC .EQU FALSE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] -GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_NONE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_NONE ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_NONE ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS -PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT -PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -UFBASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_NONE ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm deleted file mode 100644 index bc37a51f..00000000 --- a/Source/HBIOS/cfg_mbc.asm +++ /dev/null @@ -1,311 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR MBC -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Nhyodyne", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_MBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_HILO ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_MBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) -MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU (4915200/8) ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU TRUE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU TRUE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU TRUE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_MBC ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_CGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MBC ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_MBC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -ESPCONENABLE .EQU TRUE ; ESP: ENABLE ESP32 CONSOLE IO DRIVER VIDEO/KBD SUPPORT -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -; -PIOENABLE .EQU TRUE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_SPP ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -UFBASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_MBC ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm deleted file mode 100644 index 691440e6..00000000 --- a/Source/HBIOS/cfg_mk4.asm +++ /dev/null @@ -1,307 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION FOR MARK IV -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Mark IV", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_MK4 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -MK4_IDE .EQU $80 ; MK4: IDE REGISTERS BASE ADR -MK4_XAR .EQU $88 ; MK4: EXTERNAL ADDRESS REGISTER (XAR) ADR -MK4_SD .EQU $89 ; MK4: SD CARD CONTROL REGISTER ADR -MK4_RTC .EQU $8A ; MK4: RTC LATCH REGISTER ADR -; -RTCIO .EQU MK4_RTC ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_DIDE ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU TRUE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_MK4 ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $80 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_DIDE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $20 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $28 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $28 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU FALSE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU FALSE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_DIDE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $30 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $38 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $38 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU FALSE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU FALSE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 2 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $14 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MK4 ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU TRUE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS -PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT -PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -UFBASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_mon.asm b/Source/HBIOS/cfg_mon.asm deleted file mode 100644 index 00f7b408..00000000 --- a/Source/HBIOS/cfg_mon.asm +++ /dev/null @@ -1,333 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR MONSPUTER Z80 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Monsputer", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_MON ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 4000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_MON ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -; -RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm deleted file mode 100644 index d810827d..00000000 --- a/Source/HBIOS/cfg_n8.asm +++ /dev/null @@ -1,300 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION FOR N8 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RetroBrew N8", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_N8 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_N8 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -N8_PPI0 .EQU $80 ; N8: FIRST PARALLEL PORT REGISTERS BASE ADR -N8_PPI1 .EQU $84 ; N8: SECOND PARALLEL PORT REGISTERS BASE ADR -N8_RTC .EQU $88 ; N8: RTC LATCH REGISTER ADR -N8_ACR .EQU $94 ; N8: AUXILLARY CONTROL REGISTER (ACR) ADR -N8_RMAP .EQU $96 ; N8: ROM PAGE REGISTER ADR -N8_DEFACR .EQU $1B ; N8: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) -; -RTCIO .EQU N8_RTC ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU N8_PPI0 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_N8 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU N8_PPI0 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU N8_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU N8_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_nabu.asm b/Source/HBIOS/cfg_nabu.asm deleted file mode 100644 index 372a26cd..00000000 --- a/Source/HBIOS/cfg_nabu.asm +++ /dev/null @@ -1,338 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR NABU Z80 W/ OPTION BOARD -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "NABU Personal Computer", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_NABU ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 3580000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_NABU ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU TRUE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NABU80 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU TRUE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU TRUE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_NABU ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm deleted file mode 100644 index d1f2da99..00000000 --- a/Source/HBIOS/cfg_rcz180.asm +++ /dev/null @@ -1,339 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z180 CPU -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_RCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $0C ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES -FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS -DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT -DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS -DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU TRUE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm deleted file mode 100644 index f97f7033..00000000 --- a/Source/HBIOS/cfg_rcz280.asm +++ /dev/null @@ -1,343 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z280 CPU -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_RCZ280 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z280 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 24000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z280_MEMLOWAIT .EQU 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3) -Z280_MEMHIWAIT .EQU 0 ; Z280: HIGH 8MB MEMORY WAIT STATES (0-3) -Z280_IOWAIT .EQU 1 ; Z280: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z280_INTWAIT .EQU 0 ; Z280: INT ACK WAIT STATUS (0-3) -Z280_TIMER .EQU TRUE ; Z280: ENABLE INTERNAL Z280 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -Z2UOSC .EQU 1843200 ; Z2U: OSC FREQUENCY IN MHZ -Z2UOSCEXT .EQU TRUE ; Z2U: USE EXTERNAL OSCILLATOR -Z2U0BASE .EQU $10 ; Z2U 0: BASE I/O ADDRESS -Z2U0CFG .EQU DEFSERCFG ; Z2U 0: SERIAL LINE CONFIG -Z2U0HFC .EQU FALSE ; Z2U 0: ENABLE HARDWARE FLOW CONTROL -; -ACIAENABLE .EQU TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU 7372800 ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU 7372800 ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU TRUE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm deleted file mode 100644 index 7224ff1d..00000000 --- a/Source/HBIOS/cfg_rcz80.asm +++ /dev/null @@ -1,338 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR RCBUS Z80 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RCBus", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_RCZ80 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 7372800 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $C0 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_TIM16 ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU CPUOSC ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU TRUE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -ACIADEBUG .EQU FALSE ; ACIA: ENABLE DEBUG OUTPUT -ACIACNT .EQU 1 ; ACIA: NUMBER OF CHIPS TO DETECT (1-2) -ACIA0BASE .EQU $80 ; ACIA 0: REGISTERS BASE ADR -ACIA0CLK .EQU CPUOSC ; ACIA 0: OSC FREQ IN HZ -ACIA0DIV .EQU 1 ; ACIA 0: SERIAL CLOCK DIVIDER -ACIA0CFG .EQU DEFSERCFG ; ACIA 0: SERIAL LINE CONFIG (SEE STD.ASM) -ACIA1BASE .EQU $40 ; ACIA 1: REGISTERS BASE ADR -ACIA1CLK .EQU CPUOSC ; ACIA 1: OSC FREQ IN HZ -ACIA1DIV .EQU 1 ; ACIA 1: SERIAL CLOCK DIVIDER -ACIA1CFG .EQU DEFSERCFG ; ACIA 1: SERIAL LINE CONFIG (SEE STD.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_MT ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 2 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU TRUE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ80 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm deleted file mode 100644 index fbf1ebbf..00000000 --- a/Source/HBIOS/cfg_rph.asm +++ /dev/null @@ -1,289 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION FOR RHYOPHYRE -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Rhyophyre", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_RPH ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU TRUE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_RPH ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU 0 ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -; -Z180_BASE .EQU $40 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RPH_PPI0 .EQU $88 ; RPH: FIRST PARALLEL PORT REGISTERS BASE ADR -RPH_RTC .EQU $84 ; RPH: RTC LATCH REGISTER ADR -RPH_ACR .EQU $80 ; RPH: AUXILLARY CONTROL REGISTER (ACR) ADR -RPH_DEFACR .EQU $20 ; RPH: AUX CTL REGISTER DEFAULT VALUE (QUIESCIENT STATE) -; -RTCIO .EQU RPH_RTC ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU RPH_PPI0 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU TRUE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -GDCMODE .EQU GDCMODE_RPH ; GDC: GDC MODE: GDCMODE_[NONE|ECB|RPH] -GDCMON .EQU GDCMON_EGA ; GDC: GDC MONITOR SETUP: GDCMON_[NONE|CGA|EGA] -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_N8 ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_N8 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU TRUE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU RPH_PPI0 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_CSIO ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU RPH_PPI0 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU FALSE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU RPH_PPI0 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -FIFO_BASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_NONE ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_N8 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm deleted file mode 100644 index 70800cf8..00000000 --- a/Source/HBIOS/cfg_s100.asm +++ /dev/null @@ -1,323 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR S100 Z180 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "S100", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_S100 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_57600_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 1 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 2 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $0C ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU TRUE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm deleted file mode 100644 index 76cd046b..00000000 --- a/Source/HBIOS/cfg_sbc.asm +++ /dev/null @@ -1,289 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SBC -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "RetroBrew SBC", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_SBC ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) -MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $B0 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 2 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 3 ; TIMER CHANNEL (0-3) -CTCOSC .EQU 614400 ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU TRUE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU TRUE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU TRUE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_ZP ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $B0 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU (4915200/8) ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU (4915200/8) ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -VDUSIZ .EQU V80X25 ; VDU: DISPLAY FORMAT [V80X24|V80X25|V80X30] -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -CVDUMODE .EQU CVDUMODE_ECB ; CVDU: CVDU MODE: CVDUMODE_[NONE|ECB|MBC] -CVDUMON .EQU CVDUMON_EGA ; CVDU: CVDU MONITOR SETUP: CVDUMON_[NONE|CGA|EGA] -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_SCG ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VGASIZ .EQU V80X25 ; VGA: DISPLAY FORMAT [V80X25|V80X30|V80X43] -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_DIO3 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -RFCNT .EQU 1 ; RF: NUMBER OF RAM FLOPPY UNITS (1-4) -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_DIO ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $20 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $20 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $28 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU FALSE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU FALSE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $20 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $14 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_JUHA ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -HDSKTRACE .EQU 1 ; HDSK: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIOZBASE .EQU $88 ; PIO: PIO REGISTERS BASE ADR FOR ECB ZP BOARD -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -UFBASE .EQU $0C ; UF: REGISTERS BASE ADR -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_VGM ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_SCG ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm deleted file mode 100644 index 52849489..00000000 --- a/Source/HBIOS/cfg_scz180.asm +++ /dev/null @@ -1,333 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SC Z180 VARIANTS (SC126, SC130, ETC.) -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Small Computer", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_SCZ180 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z180 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_115200_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -RAMBIAS .EQU ROMSIZE ; OFFSET OF START OF RAM IN PHYSICAL ADDRESS SPACE -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -Z180_BASE .EQU $C0 ; Z180: I/O BASE ADDRESS FOR INTERNAL REGISTERS -Z180_CLKDIV .EQU 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2 -Z180_MEMWAIT .EQU 0 ; Z180: MEMORY WAIT STATES (0-3) -Z180_IOWAIT .EQU 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3) -Z180_TIMER .EQU TRUE ; Z180: ENABLE Z180 SYSTEM PERIODIC TIMER -; -RTCIO .EQU $0C ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $88 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED (SINGLE LED) -LEDMODE .EQU LEDMODE_SC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $0E ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKTRACE .EQU 1 ; PPK DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -KBDTRACE .EQU 1 ; KBD DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPKKBLOUT .EQU KBD_US ; PPK KEYBOARD LANGUAGE: KBD_[US|DE] -KBDKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -MKYKBLOUT .EQU KBD_US ; KBD KEYBOARD LANGUAGE: KBD_[US|DE] -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -DUARTCNT .EQU 1 ; DUART: NUMBER OF CHIPS TO DETECT (1-2) -DUART0BASE .EQU $A0 ; DUART 0: BASE ADDRESS OF CHIP -DUART0ACFG .EQU DEFSERCFG ; DUART 0A: SERIAL LINE CONFIG -DUART0BCFG .EQU DEFSERCFG ; DUART 0B: SERIAL LINE CONFIG -DUART1BASE .EQU $40 ; DUART 1: BASE ADDRESS OF CHIP -DUART1ACFG .EQU DEFSERCFG ; DUART 1A: SERIAL LINE CONFIG -DUART1BCFG .EQU DEFSERCFG ; DUART 1B: SERIAL LINE CONFIG -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG | SER_RTS ; UART: LINE CONFIG FOR UART PORTS -UARTSBC .EQU FALSE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU TRUE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU TRUE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -ASCIINTS .EQU TRUE ; ASCI: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -ASCISWAP .EQU FALSE ; ASCI: SWAP CHANNELS -ASCIBOOT .EQU 0 ; ASCI: REBOOT ON RCV CHAR (0=DISABLED) -ASCI0CFG .EQU DEFSERCFG ; ASCI 0: SERIAL LINE CONFIG -ASCI1CFG .EQU DEFSERCFG ; ASCI 1: SERIAL LINE CONFIG -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 2 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_RC ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU 7372800 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU SER_115200_8N1 ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU 7372800 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU SER_115200_8N1 ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_RC ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU 7372800 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU SER_115200_8N1 ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU 7372800 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU SER_115200_8N1 ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_MSX ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_RCWDC ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 2 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -IDETRACE .EQU 1 ; IDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IDECNT .EQU 1 ; IDE: NUMBER OF IDE INTERFACES TO DETECT (1-3), 2 DRIVES EACH -IDE0MODE .EQU IDEMODE_RC ; IDE 0: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE0BASE .EQU $10 ; IDE 0: IO BASE ADDRESS -IDE0DATLO .EQU $00 ; IDE 0: DATA LO PORT FOR 16-BIT I/O -IDE0DATHI .EQU $00 ; IDE 0: DATA HI PORT FOR 16-BIT I/O -IDE0A8BIT .EQU TRUE ; IDE 0A (MASTER): 8 BIT XFER -IDE0B8BIT .EQU TRUE ; IDE 0B (MASTER): 8 BIT XFER -IDE1MODE .EQU IDEMODE_NONE ; IDE 1: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE1BASE .EQU $00 ; IDE 1: IO BASE ADDRESS -IDE1DATLO .EQU $00 ; IDE 1: DATA LO PORT FOR 16-BIT I/O -IDE1DATHI .EQU $00 ; IDE 1: DATA HI PORT FOR 16-BIT I/O -IDE1A8BIT .EQU TRUE ; IDE 1A (MASTER): 8 BIT XFER -IDE1B8BIT .EQU TRUE ; IDE 1B (MASTER): 8 BIT XFER -IDE2MODE .EQU IDEMODE_NONE ; IDE 2: DRIVER MODE: IDEMODE_[DIO|DIDE|MK4|RC] -IDE2BASE .EQU $00 ; IDE 2: IO BASE ADDRESS -IDE2DATLO .EQU $00 ; IDE 2: DATA LO PORT FOR 16-BIT I/O -IDE2DATHI .EQU $00 ; IDE 2: DATA HI PORT FOR 16-BIT I/O -IDE2A8BIT .EQU TRUE ; IDE 2A (MASTER): 8 BIT XFER -IDE2B8BIT .EQU TRUE ; IDE 2B (MASTER): 8 BIT XFER -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $20 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE1BASE .EQU $00 ; PPIDE 1: PPI REGISTERS BASE ADR -PPIDE1A8BIT .EQU FALSE ; PPIDE 1A (MASTER): 8 BIT XFER -PPIDE1B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -PPIDE2BASE .EQU $00 ; PPIDE 2: PPI REGISTERS BASE ADR -PPIDE2A8BIT .EQU FALSE ; PPIDE 2A (MASTER): 8 BIT XFER -PPIDE2B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_SC ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU TRUE ; CH: ENABLE CH375/376 USB SUPPORT -CHTRACE .EQU 1 ; CH: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHUSBTRACE .EQU 1 ; CHUSB: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHSDTRACE .EQU 1 ; CHSD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -CHCNT .EQU 2 ; CH: NUMBER OF BOARDS TO DETECT (1-2) -CH0BASE .EQU $3E ; CH 0: BASE I/O ADDRESS -CH0USBENABLE .EQU TRUE ; CH 0: ENABLE USB DISK -CH0SDENABLE .EQU FALSE ; CH 0: ENABLE SD DISK -CH1BASE .EQU $3C ; CH 1: BASE I/O ADDRESS -CH1USBENABLE .EQU TRUE ; CH 1: ENABLE USB DISK -CH1SDENABLE .EQU FALSE ; CH 1: ENABLE SD DISK -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -PRPSDENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER SD CARD SUPPORT -PRPSDTRACE .EQU 1 ; PRP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PRPCONENABLE .EQU TRUE ; PRP: ENABLE PROPIO DRIVER VIDEO/KBD SUPPORT -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR -PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014] -LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2) -LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR -LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) -PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014] -PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA -PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) -IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014] -IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM -IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -SYQCNT .EQU 1 ; SYQ: NUMBER OF SYQ DEVICES (1-2) -SYQTRACE .EQU 1 ; SYQ: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SYQMODE .EQU IMMMODE_MG014 ; SYQ: DRIVER MODE: SYQMODE_[NONE|SPP|MG014] -SYQ0BASE .EQU LPT0BASE ; SYQ 0: BASE I/O ADDRESS OF PPI FOR SYQ -SYQ1BASE .EQU LPT1BASE ; SYQ 1: BASE I/O ADDRESS OF PPI FOR SYQ -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN: ENABLE SN76489 SOUND DRIVER -AUDIOTRACE .EQU FALSE ; ENABLE TRACING TO CONSOLE OF SOUND DRIVER -SN7CLK .EQU 3579545 ; SN: PSG CLOCK FREQ, ASSUME MSX STD -SNMODE .EQU SNMODE_RC ; SN: DRIVER MODE: SNMODE_[NONE|RC|VGM] -; -AY38910ENABLE .EQU FALSE ; AY: ENABLE AY-3-8910 / YM2149 SOUND DRIVER -AY_CLK .EQU 1789772 ; AY: PSG CLOCK FREQ, ASSUME MSX STD -AYMODE .EQU AYMODE_RCZ180 ; AY: DRIVER MODE: AYMODE_[SCG|N8|RCZ80|RCZ180|MSX|LINC|MBC|DUO|NABU] -; -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_una.asm b/Source/HBIOS/cfg_una.asm deleted file mode 100644 index ca57b1f3..00000000 --- a/Source/HBIOS/cfg_una.asm +++ /dev/null @@ -1,42 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR UNA -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "UNA", " [", CONFIG, "]" -; -#INCLUDE "../UBIOS/ubios.inc" -; -;PLATFORM .EQU PLT_UNA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA] -; -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 18432000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU 0 ; NOT SUPPORTED ON UNA -; -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY (DO NOT COMBINE WITH PPIDE) diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm deleted file mode 100644 index e95c80ae..00000000 --- a/Source/HBIOS/cfg_z80retro.asm +++ /dev/null @@ -1,250 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR SIMPLE Z80 RETRO -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Z80Retro", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_Z80RETRO ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 14745600 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $60 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $61 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $62 ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $63 ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $64 ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $40 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU FALSE ; ENABLE CTC PERIODIC TIMER (too fast for RomWBW right now) -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 0 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 1 ; TIMER CHANNEL (0-3) -CTCOSC .EQU 7372800 ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU $00 ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -; -DSRTCENABLE .EQU FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU FALSE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU TRUE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -SIODEBUG .EQU FALSE ; SIO: ENABLE DEBUG OUTPUT -SIOBOOT .EQU 0 ; SIO: REBOOT ON RCV CHAR (0=DISABLED) -SIOCNT .EQU 1 ; SIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP -SIO0MODE .EQU SIOMODE_Z80R ; SIO 0: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO0BASE .EQU $80 ; SIO 0: REGISTERS BASE ADR -SIO0ACLK .EQU CPUOSC/2 ; SIO 0A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0ACFG .EQU DEFSERCFG ; SIO 0A: SERIAL LINE CONFIG -SIO0ACTCC .EQU -1 ; SIO 0A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO0BCLK .EQU CPUOSC/2 ; SIO 0B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO0BCFG .EQU DEFSERCFG ; SIO 0B: SERIAL LINE CONFIG -SIO0BCTCC .EQU -1 ; SIO 0B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1MODE .EQU SIOMODE_Z80R ; SIO 1: CHIP TYPE: SIOMODE_[STD|RC|SMB|ZP|Z80R] -SIO1BASE .EQU $84 ; SIO 1: REGISTERS BASE ADR -SIO1ACLK .EQU CPUOSC/2 ; SIO 1A: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1ACFG .EQU DEFSERCFG ; SIO 1A: SERIAL LINE CONFIG -SIO1ACTCC .EQU -1 ; SIO 1A: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -SIO1BCLK .EQU CPUOSC/2 ; SIO 1B: OSC FREQ IN HZ, ZP=2457600/4915200, RC/SMB=7372800 -SIO1BCFG .EQU DEFSERCFG ; SIO 1B: SERIAL LINE CONFIG -SIO1BCTCC .EQU -1 ; SIO 1B: CTC CHANNEL 0=A, 1=B, 2=C, 3=D, -1 FOR NONE -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU FALSE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU TRUE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_Z80R ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS -PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT -PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER -AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm deleted file mode 100644 index 0b3c409f..00000000 --- a/Source/HBIOS/cfg_zeta.asm +++ /dev/null @@ -1,221 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR ZETA V1 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Zeta", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_ZETA ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; BIOS_[WBW|UNA]: HARDWARE BIOS -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 0 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_SBC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPCL_RAM .EQU $78 ; SBC MEM MGR RAM PAGE SELECT REG (WRITE ONLY) -MPCL_ROM .EQU $7C ; SBC MEM MGR ROM PAGE SELECT REG (WRITE ONLY) -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU FALSE ; ENABLE ZILOG CTC SUPPORT -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_RTC ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_ZETA ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS -PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT -PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER -AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm deleted file mode 100644 index 7e3c6f10..00000000 --- a/Source/HBIOS/cfg_zeta2.asm +++ /dev/null @@ -1,232 +0,0 @@ -; -;================================================================================================== -; ROMWBW 3.X CONFIGURATION DEFAULTS FOR ZETA V2 -;================================================================================================== -; -; THIS FILE CONTAINS THE FULL SET OF DEFAULT CONFIGURATION SETTINGS FOR THE PLATFORM -; INDICATED ABOVE. THIS FILE SHOULD *NOT* NORMALLY BE CHANGED. INSTEAD, YOU SHOULD -; OVERRIDE ANY SETTINGS YOU WANT USING A CONFIGURATION FILE IN THE CONFIG DIRECTORY -; UNDER THIS DIRECTORY. -; -; THIS FILE CAN BE CONSIDERED A REFERENCE THAT LISTS ALL POSSIBLE CONFIGURATION SETTINGS -; FOR THE PLATFORM. -; -#DEFINE PLATFORM_NAME "Zeta 2", " [", CONFIG, "]" -; -#INCLUDE "hbios.inc" -; -PLATFORM .EQU PLT_ZETA2 ; PLT_[SBC|ZETA|ZETA2|N8|MK4|UNA|RCZ80|RCZ180|EZZ80|SCZ180|DYNO|RCZ280|MBC|RPH|Z80RETRO|S100|DUO|HEATH|MON] -CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280] -BIOS .EQU BIOS_WBW ; HARDWARE BIOS: BIOS_[WBW|UNA] -BATCOND .EQU FALSE ; ENABLE LOW BATTERY WARNING MESSAGE -HBIOS_MUTEX .EQU FALSE ; ENABLE REENTRANT CALLS TO HBIOS (ADDS OVERHEAD) -USELZSA2 .EQU TRUE ; ENABLE FONT COMPRESSION -TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) -; -BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE -BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT -AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT -; -CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO -CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW -CPUOSC .EQU 8000000 ; CPU OSC FREQ IN MHZ -INTMODE .EQU 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280) -DEFSERCFG .EQU SER_38400_8N1 | SER_RTS ; DEFAULT SERIAL LINE CONFIG (SEE STD.ASM) -; -RAMSIZE .EQU 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!) -ROMSIZE .EQU 512 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!) -APP_BNKS .EQU $FF ; BANKS TO RESERVE FOR APP USE ($FF FOR AUTO SIZING) -MEMMGR .EQU MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280|MBC|RPH|MON] -MPGSEL_0 .EQU $78 ; Z2 MEM MGR BANK 0 PAGE SELECT REG (WRITE ONLY) -MPGSEL_1 .EQU $79 ; Z2 MEM MGR BANK 1 PAGE SELECT REG (WRITE ONLY) -MPGSEL_2 .EQU $7A ; Z2 MEM MGR BANK 2 PAGE SELECT REG (WRITE ONLY) -MPGSEL_3 .EQU $7B ; Z2 MEM MGR BANK 3 PAGE SELECT REG (WRITE ONLY) -MPGENA .EQU $7C ; Z2 MEM MGR PAGING ENABLE REGISTER (BIT 0, WRITE ONLY) -; -RTCIO .EQU $70 ; RTC LATCH REGISTER ADR -; -KIOENABLE .EQU FALSE ; ENABLE ZILOG KIO SUPPORT -KIOBASE .EQU $80 ; KIO BASE I/O ADDRESS -; -CTCENABLE .EQU TRUE ; ENABLE ZILOG CTC SUPPORT -CTCDEBUG .EQU FALSE ; ENABLE CTC DRIVER DEBUG OUTPUT -CTCBASE .EQU $20 ; CTC BASE I/O ADDRESS -CTCTIMER .EQU TRUE ; ENABLE CTC PERIODIC TIMER -CTCMODE .EQU CTCMODE_CTR ; CTC MODE: CTCMODE_[NONE|CTR|TIM16|TIM256] -CTCPRE .EQU 256 ; PRESCALE CONSTANT (1-256) -CTCPRECH .EQU 0 ; PRESCALE CHANNEL (0-3) -CTCTIMCH .EQU 1 ; TIMER CHANNEL (0-3) -CTCOSC .EQU 921600 ; CTC CLOCK FREQUENCY -; -PCFENABLE .EQU FALSE ; ENABLE PCF8584 I2C CONTROLLER -PCFBASE .EQU $F0 ; PCF8584 BASE I/O ADDRESS -; -EIPCENABLE .EQU FALSE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION -; -SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES -; -WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] -; -FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS -FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS -FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED -FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS -FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES -FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED -; -DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING -; -LEDENABLE .EQU FALSE ; ENABLES STATUS LED -LEDMODE .EQU LEDMODE_STD ; LEDMODE_[STD|SC|RTC|NABU] -LEDPORT .EQU RTCIO ; STATUS LED PORT ADDRESS -LEDDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON STATUS LED -; -DSKYENABLE .EQU FALSE ; ENABLES DSKY FUNCTIONALITY -DSKYDSKACT .EQU TRUE ; ENABLES DISK ACTIVITY ON DSKY DISPLAY -ICMENABLE .EQU FALSE ; ENABLES ORIGINAL DSKY ICM DRIVER (7218) -ICMPPIBASE .EQU $60 ; BASE I/O ADDRESS OF ICM PPI -PKDENABLE .EQU FALSE ; ENABLES DSKY NG PKD DRIVER (8259) -PKDPPIBASE .EQU $60 ; BASE I/O ADDRESS OF PKD PPI -PKDOSC .EQU 3000000 ; OSCILLATOR FREQ FOR PKD (IN HZ) -H8PENABLE .EQU FALSE ; ENABLES HEATH H8 FRONT PANEL -; -BOOTCON .EQU 0 ; BOOT CONSOLE DEVICE -SECCON .EQU $FF ; SECONDARY CONSOLE DEVICE -CRTACT .EQU FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP -VDAEMU .EQU EMUTYP_ANSI ; VDA EMULATION: EMUTYP_[TTY|ANSI] -VDAEMU_SERKBD .EQU $FF ; VDA EMULATION: SERIAL KBD UNIT #, OR $FF FOR HW KBD -ANSITRACE .EQU 1 ; ANSI DRIVER TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MKYENABLE .EQU FALSE ; MSX 5255 PPI KEYBOARD COMPATIBLE DRIVER (REQUIRES TMS VDA DRIVER) -; -DSRTCENABLE .EQU TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM) -DSRTCMODE .EQU DSRTCMODE_STD ; DSRTC: OPERATING MODE: DSRTC_[STD|MFPIC|K80W] -DSRTCCHG .EQU FALSE ; DSRTC: FORCE BATTERY CHARGE ON (USE WITH CAUTION!!!) -; -DS1501RTCENABLE .EQU FALSE ; DS1501RTC: ENABLE DS-1501 CLOCK DRIVER (DS1501RTC.ASM) -DS1501RTC_BASE .EQU $50 ; DS1501RTC: I/O BASE ADDRESS -; -BQRTCENABLE .EQU FALSE ; BQRTC: ENABLE BQ4845 CLOCK DRIVER (BQRTC.ASM) -BQRTC_BASE .EQU $50 ; BQRTC: I/O BASE ADDRESS -; -INTRTCENABLE .EQU FALSE ; ENABLE PERIODIC INTERRUPT CLOCK DRIVER (INTRTC.ASM) -; -RP5RTCENABLE .EQU FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM) -; -HTIMENABLE .EQU FALSE ; ENABLE SIMH TIMER SUPPORT -SIMRTCENABLE .EQU FALSE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM) -; -DS7RTCENABLE .EQU FALSE ; DS7RTC: ENABLE DS-1307 I2C CLOCK DRIVER (DS7RTC.ASM) -DS7RTCMODE .EQU DS7RTCMODE_PCF ; DS7RTC: OPERATING MODE: DS7RTC_[PCF] -; -DUARTENABLE .EQU FALSE ; DUART: ENABLE 2681/2692 SERIAL DRIVER (DUART.ASM) -; -UARTENABLE .EQU TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM) -UARTOSC .EQU 1843200 ; UART: OSC FREQUENCY IN MHZ -UARTINTS .EQU FALSE ; UART: INCLUDE INTERRUPT SUPPORT UNDER IM1/2/3 -UARTCFG .EQU DEFSERCFG ; UART: LINE CONFIG FOR UART PORTS -UARTCASSPD .EQU SER_300_8N1 ; UART: ECB CASSETTE UART DEFAULT SPEED -UARTSBC .EQU TRUE ; UART: AUTO-DETECT SBC/ZETA/DUO/NABU ONBOARD UART -UARTSBCFORCE .EQU FALSE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH) -UARTAUX .EQU FALSE ; UART: AUTO-DETECT AUX UART -UARTCAS .EQU FALSE ; UART: AUTO-DETECT ECB CASSETTE UART -UARTMFP .EQU FALSE ; UART: AUTO-DETECT MF/PIC UART -UART4 .EQU FALSE ; UART: AUTO-DETECT 4UART UART -UARTRC .EQU FALSE ; UART: AUTO-DETECT RC UART -UARTDUAL .EQU FALSE ; UART: AUTO-DETECT DUAL UART -; -ASCIENABLE .EQU FALSE ; ASCI: ENABLE Z180 ASCI SERIAL DRIVER (ASCI.ASM) -; -Z2UENABLE .EQU FALSE ; Z2U: ENABLE Z280 UART SERIAL DRIVER (Z2U.ASM) -; -ACIAENABLE .EQU FALSE ; ACIA: ENABLE MOTOROLA 6850 ACIA DRIVER (ACIA.ASM) -; -SIOENABLE .EQU FALSE ; SIO: ENABLE ZILOG SIO SERIAL DRIVER (SIO.ASM) -; -XIOCFG .EQU DEFSERCFG ; XIO: SERIAL LINE CONFIG -; -VDUENABLE .EQU FALSE ; VDU: ENABLE VDU VIDEO/KBD DRIVER (VDU.ASM) -CVDUENABLE .EQU FALSE ; CVDU: ENABLE CVDU VIDEO/KBD DRIVER (CVDU.ASM) -GDCENABLE .EQU FALSE ; GDC: ENABLE 7220 GDC VIDEO/KBD DRIVER (GDC.ASM) -TMSENABLE .EQU FALSE ; TMS: ENABLE TMS9918 VIDEO/KBD DRIVER (TMS.ASM) -TMSMODE .EQU TMSMODE_NONE ; TMS: DRIVER MODE: TMSMODE_[SCG|N8|MBC|MSX|MSX9958|MSXKBD|COLECO|DUO|NABU40|NABU80] -TMSTIMENABLE .EQU FALSE ; TMS: ENABLE TIMER INTERRUPTS (REQUIRES IM1) -VGAENABLE .EQU FALSE ; VGA: ENABLE VGA VIDEO/KBD DRIVER (VGA.ASM) -VRCENABLE .EQU FALSE ; VRC: ENABLE VGARC VIDEO/KBD DRIVER (VRC.ASM) -SCONENABLE .EQU FALSE ; SCON: ENABLE S100 CONSOLE DRIVER (SCON.ASM) -EFENABLE .EQU FALSE ; EF: ENABLE EF9345 VIDEO DRIVER (EF.ASM) -; -MDENABLE .EQU TRUE ; MD: ENABLE MEMORY (ROM/RAM) DISK DRIVER (MD.ASM) -MDROM .EQU TRUE ; MD: ENABLE ROM DISK -MDRAM .EQU TRUE ; MD: ENABLE RAM DISK -MDTRACE .EQU 1 ; MD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -MDFFENABLE .EQU FALSE ; MD: ENABLE FLASH FILE SYSTEM -; -FDENABLE .EQU TRUE ; FD: ENABLE FLOPPY DISK DRIVER (FD.ASM) -FDMODE .EQU FDMODE_ZETA2 ; FD: DRIVER MODE: FDMODE_[DIO|ZETA|ZETA2|DIDE|N8|DIO3|RCSMC|RCWDC|DYNO|EPFDC|MBC] -FDCNT .EQU 1 ; FD: NUMBER OF FLOPPY DRIVES ON THE INTERFACE (1-2) -FDTRACE .EQU 1 ; FD: TRACE LEVEL (0=NO,1=FATAL,2=ERRORS,3=ALL) -FDMAUTO .EQU TRUE ; FD: AUTO SELECT DEFAULT/ALTERNATE MEDIA FORMATS -FD0TYPE .EQU FDT_3HD ; FD 0: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -FD1TYPE .EQU FDT_3HD ; FD 1: DRIVE TYPE: FDT_[3DD|3HD|5DD|5HD|8] -; -RFENABLE .EQU FALSE ; RF: ENABLE RAM FLOPPY DRIVER -; -IDEENABLE .EQU FALSE ; IDE: ENABLE IDE DISK DRIVER (IDE.ASM) -; -PPIDEENABLE .EQU FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM) -PPIDETRACE .EQU 1 ; PPIDE: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPIDECNT .EQU 1 ; PPIDE: NUMBER OF PPI CHIPS TO DETECT (1-3), 2 DRIVES PER CHIP -PPIDE0BASE .EQU $60 ; PPIDE 0: PPI REGISTERS BASE ADR -PPIDE0A8BIT .EQU FALSE ; PPIDE 0A (MASTER): 8 BIT XFER -PPIDE0B8BIT .EQU FALSE ; PPIDE 0B (SLAVE): 8 BIT XFER -; -SDENABLE .EQU FALSE ; SD: ENABLE SD CARD DISK DRIVER (SD.ASM) -SDMODE .EQU SDMODE_PPI ; SD: DRIVER MODE: SDMODE_[JUHA|N8|CSIO|PPI|UART|DSD|MK4|SC|MT|PIO|Z80R|USR] -SDPPIBASE .EQU $60 ; SD: BASE I/O ADDRESS OF PPI FOR PPI MODDE -SDCNT .EQU 1 ; SD: NUMBER OF SD CARD DEVICES (1-2), FOR DSD/SC/MT ONLY -SDTRACE .EQU 1 ; SD: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -SDCSIOFAST .EQU FALSE ; SD: ENABLE TABLE-DRIVEN BIT INVERTER IN CSIO MODE -SDMTSWAP .EQU FALSE ; SD: SWAP THE LOGICAL ORDER OF THE SPI PORTS OF THE MT011 -; -CHENABLE .EQU FALSE ; CH: ENABLE CH375/376 USB SUPPORT -; -PRPENABLE .EQU FALSE ; PRP: ENABLE ECB PROPELLER IO BOARD DRIVER (PRP.ASM) -; -PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (PPP.ASM) -PPPBASE .EQU $60 ; PPP: PPI REGISTERS BASE ADDRESS -PPPSDENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER SD CARD SUPPORT -PPPSDTRACE .EQU 1 ; PPP: SD CARD TRACE LEVEL (0=NO,1=ERRORS,2=ALL) -PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT -; -ESPENABLE .EQU FALSE ; ESP: ENABLE ESP32 IO BOARD DRIVER (ESP.ASM) -; -HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) -; -PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) -; -LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) -; -PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM) -; -IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) -; -SYQENABLE .EQU FALSE ; SYQ: ENABLE IMM DISK DRIVER (SYQ.ASM) -; -PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD -PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) -PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP -PIOSBASE .EQU $60 ; PIO: PIO REGISTERS BASE ADR FOR SBC PPI -; -UFENABLE .EQU FALSE ; UF: ENABLE ECB USB FIFO DRIVER (UF.ASM) -; -SN76489ENABLE .EQU FALSE ; SN76489 SOUND DRIVER -AY38910ENABLE .EQU FALSE ; AY: AY-3-8910 / YM2149 SOUND DRIVER -SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) -; -DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) -DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC|DUO) -; -YM2612ENABLE .EQU FALSE ; YM2612: ENABLE YM2612 DRIVER (MUTE STUB) -VGMBASE .EQU $C0 ; YM2612: BASE ADDRESS FOR VGM BOARD (YM2612/SN76489s/CTC) diff --git a/Source/HBIOS/ch.asm b/Source/HBIOS/ch.asm index 0bfb877d..b7f52caa 100644 --- a/Source/HBIOS/ch.asm +++ b/Source/HBIOS/ch.asm @@ -236,6 +236,7 @@ CH_INIT4: CH_CMD: LD C,(IY+CH_IOBASE) ; BASE PORT INC C ; BUMP TO CMD PORT + EZ80_IO OUT (C),A ; SEND COMMAND CALL CH_NAP ; *DEBUG* RET @@ -245,6 +246,7 @@ CH_CMD: CH_STAT: LD C,(IY+CH_IOBASE) ; BASE PORT INC C ; BUMP TO CMD PORT + EZ80_IO IN A,(C) ; READ STATUS RET ; @@ -252,6 +254,7 @@ CH_STAT: ; CH_RD: LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO IN A,(C) ; READ BYTE RET ; @@ -259,6 +262,7 @@ CH_RD: ; CH_WR: LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO OUT (C),A ; READ BYTE RET ; diff --git a/Source/HBIOS/chsd.asm b/Source/HBIOS/chsd.asm index c4b38194..2b217b80 100644 --- a/Source/HBIOS/chsd.asm +++ b/Source/HBIOS/chsd.asm @@ -19,7 +19,7 @@ ; #DEFINE CHSD_IMGFILE "DISK.IMG" ; -CHSD_FASTIO .EQU TRUE ; USE INIR/OTIR? +CHSD_FASTIO .EQU FALSE ; USE INIR/OTIR? ; ; CHUSB DEVICE STATUS ; @@ -196,6 +196,7 @@ CHSD_READ1: #IF (CHSD_FASTIO) LD B,A ; BYTE COUNT TO READ LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO ;!! NOT SUPPORT INIR YET INIR ; DO IT FAST #ELSE LD B,A ; SAVE IT @@ -263,6 +264,7 @@ CHSD_WRITE1: #IF (CHSD_FASTIO) LD B,A ; BYTE COUNT TO WRITE LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO ;!! NOT SUPPORT OTIR YET OTIR ; DO IT FAST #ELSE LD B,A ; SAVE IT diff --git a/Source/HBIOS/chusb.asm b/Source/HBIOS/chusb.asm index 175a00b2..d77f3f64 100644 --- a/Source/HBIOS/chusb.asm +++ b/Source/HBIOS/chusb.asm @@ -196,6 +196,7 @@ CHUSB_READ1: PUSH BC ; SAVE LOOP CONTROL LD B,64 ; READ 64 BYTES LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO INIR ; DO IT FAST POP BC ; RESTORE LOOP CONTROL #ELSE @@ -260,6 +261,7 @@ CHUSB_WRITE1: PUSH BC ; SAVE LOOP CONTROL LD B,64 ; WRITE 64 BYTES LD C,(IY+CH_IOBASE) ; BASE PORT + EZ80_IO OTIR ; DO IT FAST POP BC ; RESTORE LOOP CONTROL #ELSE diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 2d0231d8..2a041e73 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -1290,8 +1290,8 @@ DSKY_ENTRY: ;_____________________________________________________________________________ ; FRONTPANELLOOP: - LD HL,CPUUP ; SET POINTER TO CPU UP MSG - CALL DSKY_SHOW ; DISPLAY UNENCODED + LD C,DSKY_MSG_MON_RDY + CALL DSKY_MSG CALL DSKY_HIGHLIGHTCMDKEYS CALL DSKY_L1ON CALL KB_GET ; GET KEY FROM DSKY @@ -1321,8 +1321,8 @@ FRONTPANELLOOP1: ;_____________________________________________________________________________ ; DOBOOT: - LD HL,MSGBOOT ; SET POINTER TO BOOT MESSAGE - CALL DSKY_SHOW ; DISPLAY UNENCODED + LD C,DSKY_MSG_MON_BOOT + CALL DSKY_MSG JP BOOT ; DO BOOT ; ;__DOPORTREAD_________________________________________________________________ @@ -1343,7 +1343,7 @@ PORTREADLOOP: INC DE ; ADVANCE BUF PTR INC DE ; ... TO LAST TWO POSITIONS CALL PUTVALUE ; DISPLAY PORT VALUE - CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS + CALL DISPLAY ; DISPLAY BUFFER CONTENTS PORTREADGETKEY: CALL KB_GET ; GET KEY FROM KB JR PORTREADGETKEY ; NO VALID KEY, LOOP @@ -1367,7 +1367,7 @@ PORTWRITELOOP: OUT (C),A ; OUTPUT VALUE TO PORT STORED IN "C" LD DE,DISPLAYBUF+6 ; DISPLAY WRITTEN PORT VALUE CALL PUTVALUE ; ... WITHOUT DP'S - CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS + CALL DISPLAY ; DISPLAY BUFFER CONTENTS PORTWRITEGETKEY: CALL KB_GET ; GET KEY FROM KB JR PORTWRITEGETKEY ; NO VALID KEY, LOOP @@ -1379,18 +1379,18 @@ PORTWRITEGETKEY: ; DOGO: CALL DSKY_HIGHLIGHTNUMKEYS - CALL GETADDR ; GET ADDRESS INTO HL - PUSH HL - CALL DSKY_HIGHLIGHTKEYSOFF LD HL,GOTO ; POINT TO "GO" MSG CALL INITBUF + CALL GETVALW ; GET ADDRESS TO JUMP TO + PUSH HL + CALL DSKY_HIGHLIGHTKEYSOFF POP HL LD DE,DISPLAYBUF+4 LD A,H CALL PUTVALUE LD A,L CALL PUTVALUE - CALL ENCDISPLAY ; DISPLAY + CALL DISPLAY ; DISPLAY JP (HL) ; AND RUN ; ;__DOEXAMINE__________________________________________________________________ @@ -1416,7 +1416,7 @@ EXAMINELOOP: INC DE LD A,(HL) ; GET VALUE FROM ADDRESS IN HL CALL PUTVALUE - CALL ENCDISPLAY ; DISPLAY BUFFER ON DISPLAYS + CALL DISPLAY ; DISPLAY BUFFER ON DISPLAYS CALL DSKY_HIGHLIGHTFWDKEYS EXAMINEGETKEY: CALL KB_GET ; GET KEY FROM KB @@ -1451,7 +1451,7 @@ DEPOSITLOOP: LD (HL),A ; LD DE,DISPLAYBUF+6 ; DISPLAY WRITTEN MEM VALUE CALL PUTVALUE ; ... WITHOUT DP'S - CALL ENCDISPLAY ; DISPLAY BUFFER CONTENTS + CALL DISPLAY ; DISPLAY BUFFER CONTENTS CALL DSKY_HIGHLIGHTFWDKEYS DEPOSITGETKEY: CALL KB_GET ; GET KEY FROM KB @@ -1488,7 +1488,7 @@ GETVALW: LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+7),A ; GETVALW1: - CALL ENCDISPLAY ; + CALL DISPLAY ; GETVALWLOOP: CALL KB_GET ; CP $10 ; @@ -1557,7 +1557,7 @@ GETVALUE: LD (DISPLAYBUF+6),A ; LD (DISPLAYBUF+7),A ; GETVALUE1: - CALL ENCDISPLAY ; + CALL DISPLAY ; GETVALUELOOP: CALL KB_GET ; CP $10 ; @@ -1644,52 +1644,22 @@ INITBUF: LDIR RET ; -;__ENCDISPLAY_________________________________________________________________ +;__DISPLAY _________________________________________________________________ ; -; DISPLAY CONTENTS OF DISPLAYBUF ENCODED PER SEGDECODE TABLE +; DISPLAY CONTENTS OF DISPLAYBUF ;_____________________________________________________________________________ ; -ENCDISPLAY: +DISPLAY: + PUSH AF + PUSH BC + PUSH DE PUSH HL LD HL,DISPLAYBUF - JR ENCBUF0 -; -;__ENCBUF_____________________________________________________________________ -; -; DISPLAY CONTENTS OF BUFFER AT HL ENCODED PER SEGDECODE TABLE -;_____________________________________________________________________________ -; -ENCBUF: - PUSH HL ; SAVE HL -ENCBUF0: - PUSH AF ; SAVE AF - PUSH BC ; SAVE BC - PUSH DE ; SAVE DE - LD DE,DSKY_BUF ; DESTINATION FOR DECODED BYTES - LD B,8 ; NUMBER OF BYTES TO DECODE -ENCBUF1: - LD A,(HL) ; GET SOURCE BYTE - INC HL ; BUMP TO NEXT BYTE FOR NEXT PASS - PUSH AF ; SAVE IT - AND $80 ; ISOLATE HI BIT (DP) - LD C,A ; SAVE IN C - POP AF ; RECOVER ORIGINAL - AND $7F ; REMOVE HI BIT (DP) - PUSH HL ; SAVE POINTER - LD HL,SEGDECODE ; POINT TO DECODE TABLE - CALL ADDHLA ; OFFSET BY INCOMING VALUE - LD A,(HL) ; GET DECODED VALUE - OR C ; RECOMBINE WITH DP VALUE - LD (DE),A ; SAVE IN DEST BUF - INC DE ; INC DEST BUF PTR - POP HL ; RESTORE POINTER - DJNZ ENCBUF1 ; LOOP THRU ALL BUF POSITIONS - LD HL,DSKY_BUF ; POINT TO DECODED BUFFER - CALL DSKY_SHOW ; DISPLAY IT - POP DE ; RESTORE DE - POP BC ; RESTORE BC - POP AF ; RESTORE AF - POP HL ; RESTORE HL + CALL DSKY_SHOW + POP HL + POP DE + POP BC + POP AF RET ; ;_____________________________________________________________________________ @@ -1751,38 +1721,21 @@ DSKY_HIGHLIGHT: POP HL RET ; +DSKY_MSG: + LD B,BF_DSKYMESSAGE + RST 08 + RET + DSKY_HIGHLIGHTFWDKEYLEDS .DB $00,$00,$00,$30,$00,$00,$00,$00 DSKY_HIGHLIGHTCMDKEYLEDS .DB $20,$00,$20,$3F,$00,$00,$00,$00 DSKY_HIGHLIGHTNUMKEYLEDS .DB $1F,$3F,$1F,$30,$00,$00,$00,$00 DSKY_HIGHLIGHTKEYLEDSOFF .DB $00,$00,$00,$00,$00,$00,$00,$00 ; -CPUUP .DB $40,$39,$73,$3E,$00,$3E,$73,$40 ; "-CPU UP-" (RAW SEG) -MSGBOOT .DB $7F,$5C,$5C,$78,$82,$00,$00,$00 ; "Boot! " (RAW SEG) -ADDR .DB $17,$18,$19,$10,$00,$00,$00,$00 ; "Adr 0000" (ENCODED) -PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED) -GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED) -; -;_HEX_7_SEG_DECODE_TABLE______________________________________________________ -; -; SET BIT 7 TO DISPLAY W/ DECIMAL POINT -;_____________________________________________________________________________ -; -SEGDECODE: -; - ; POS $00 $01 $02 $03 $04 $05 $06 $07 - ; GLYPH '0' '1' '2' '3' '4' '5' '6' '7' - .DB $3F, $06, $5B, $4F, $66, $6D, $7D, $07 -; - ; POS $08 $09 $0A $0B $0C $0D $0E $0F - ; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' - .DB $7F, $67, $77, $7C, $39, $5E, $79, $71 -; - ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A - ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' - .DB $00, $40, $00, $73, $5C, $50, $78, $77, $5E, $50, $3D +ADDR .DB $17,$18,$19,$10,$00,$00,$00,$00 ; "Adr 0000" (ENCODED FOR SHOWSEG) +PORT .DB $13,$14,$15,$16,$10,$10,$00,$00 ; "Port 00" (ENCODED FOR SHOWSEG) +GOTO .DB $1A,$14,$10,$10,$00,$00,$00,$00 ; "Go 0000" (ENCODED FOR SHOWSEG) ; DISPLAYBUF: .FILL 8,0 -DSKY_BUF .FILL 8,0 ; #ELSE ; @@ -1795,7 +1748,6 @@ DSKY_ENTRY: ; UTILITY FUNCTIONS ;================================================================================================== ; -; CHR_BEL .EQU 07H CHR_CR .EQU 0DH CHR_LF .EQU 0AH diff --git a/Source/HBIOS/ds5rtc.asm b/Source/HBIOS/ds5rtc.asm new file mode 100644 index 00000000..1c67d55b --- /dev/null +++ b/Source/HBIOS/ds5rtc.asm @@ -0,0 +1,566 @@ +; +;================================================================================================== +; MAXIM DS1305 RTC DRIVER +;================================================================================================== +; +; THE DS1305 USES AN SPI INTERFACE. THIS DRIVER CURRENTLY ASSUMES THE +; FPGA-BASED SPI INTERFACE IMPLEMENTED IN THE S100 FPGA Z80. +; +; TRICKLE CHARGING IS NOT CURRENTLY IMPLEMENTED SINCE THE S100 FPGA Z80 +; DOES NOT SUPPORT THE USER OF A SUPER CAPACITOR. +; +; REGISTER ADDRESSES (HEX / BCD): +; +; +---+-----+---------------+-------------------+------------------+----------------+ +; |ADR| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | RANGE | REGISTER | +; +---+-----+---------------+-------------------+------------------+----------------+ +; | 0 | 0 | 10-SECOND | 1-SECOND | 00-59 | SECONDS | +; +---+-----+-----+---------+-------------------+------------------+----------------+ +; | 1 | 0 | 10-MINUTE | 1-MINUTE | 00-59 | MINUTES | +; +---+-----+-----+---------+-------------------+------------------+----------------+ +; | 2 | 0 | 0 | 10-HOUR | 1-HOUR | 00-23 | HOURS | +; +---+-----+-----+----+----+-------------------+------------------+----------------+ +; | 3 | 0 | 0 | 0 | 0 | DAY OF WEEK | 01-07 | DAY OF WEEK | +; +---+-----+-----+----+----+----+--------------+------------------+----------------+ +; | 4 | 0 | 0 | 10-DATE | 1-DATE | 01-31 | DATE | +; +---+-----+-----+----+----+-------------------+------------------+----------------+ +; | 5 | 0 | 0 |10-MONTH | 1-MONTH | 01-12 | MONTH | +; +---+-----+-----+----+----+-------------------+------------------+----------------+ +; | 6 | 10-YEAR | 1-YEAR | 00-99 | YEAR | +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; --- ALARM 0 --- +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; | 7 | M | 10-SECOND | 1-SECOND | 00-59 | SECONDS ALARM | +; +---+-----+---------------+-------------------+------------------+----------------+ +; | 8 | M | 10-MINUTE | 1-MINUTE | 00-59 | MINUTES ALARM | +; +---+-----+-----+---------+-------------------+------------------+----------------+ +; | 9 | M | 0 | 10-HOUR | 1-HOUR | 00-23 | HOURS ALARM | +; +---+-----+-----+----+----+-------------------+------------------+----------------+ +; | A | M | 0 | 0 | 0 | DAY | 1-7 | DAY ALARM | +; +---+-----+-----+----+----+----+--------------+------------------+----------------+ +; --- ALARM 1 --- +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; | B | M | 10-SECOND | 1-SECOND | 00-59 | SECONDS ALARM | +; +---+-----+---------------+-------------------+------------------+----------------+ +; | C | M | 10-MINUTE | 1-MINUTE | 00-59 | MINUTES ALARM | +; +---+-----+-----+---------+-------------------+------------------+----------------+ +; | D | M | 0 | 10-HOUR | 1-HOUR | 00-23 | HOURS ALARM | +; +---+-----+-----+----+----+-------------------+------------------+----------------+ +; | E | M | 0 | 0 | 0 | DAY | 1-7 | DAY ALARM | +; +---+-----+-----+----+----+----+--------------+------------------+----------------+ +; +; +---+-----+-----+---------+-------------------+------------------+----------------+ +; | F |/EOSC| WP | 0 | 0 | 0 |INTC|AIE1|AIE0| | CONTROL REG | +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; |10 | 0 | 0 | 0 | 0 | 0 | 0 |IRQ1|IRQ0| | STATUS REG | +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; |11 | TRICKLE CHG ENABLE | DIODE |RESISTOR | | TRICKLE CHG REG| +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; |12-1F | RESERVED | | | +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; |20-7F | USER NVRAM | 00-FF | | +; +---+-----+-----+----+----+----+----+----+----+------------------+----------------+ +; +; 0 = SHOULD BE SET TO 0 FOR VALID TIME/CALENDAR RANGE. +; CLOCK CALENDAR DATA IS BCD. AUTOMATIC LEAP YEAR ADJUSTMENT. +; DAY-OF-WEEK CODED AS SUNDAY = 1 THROUGH SATURDAY = 7. +; +; CONSTANTS +; +DS5RTC_BASE .EQU $68 +DS5RTC_DATA .EQU DS5RTC_BASE + 0 +DS5RTC_SELECT .EQU DS5RTC_BASE + 2 ; WRITE +DS5RTC_STATUS .EQU DS5RTC_BASE + 2 ; READ +DS5RTC_RUN .EQU DS5RTC_BASE + 3 ; START READ/WRITE USING IN/OUT OPCODE +; +; IO PORTS +; +DS5NVM_BASE .EQU DS5RTC_BASE + $20 + +DS5RTC_REG_SEC .EQU $00 +DS5RTC_REG_MIN .EQU $01 +DS5RTC_REG_HOUR .EQU $02 +DS5RTC_REG_WEEKDAY .EQU $03 +DS5RTC_REG_DATE .EQU $04 +DS5RTC_REG_MONTH .EQU $05 +DS5RTC_REG_YEAR .EQU $06 +DS5RTC_REG_ALM0_SEC .EQU $07 +DS5RTC_REG_ALM0_MIN .EQU $08 +DS5RTC_REG_ALM0_HOUR .EQU $09 +DS5RTC_REG_ALM0_DAY .EQU $0A +DS5RTC_REG_ALM1_SEC .EQU $0B +DS5RTC_REG_ALM1_MIN .EQU $0C +DS5RTC_REG_ALM1_HOUR .EQU $0D +DS5RTC_REG_ALM1_DAY .EQU $0E +DS5RTC_REG_CONTROL .EQU $0F +DS5RTC_REG_STATUS .EQU $10 +DS5RTC_REG_TCHG .EQU $11 +DS5RTC_REG_NVM_BASE .EQU $20 +; +; VALUES FOR DIFFERENT BATTERY OR SUPERCAPACITOR CHARGE RATES +; +DS5RTC_TC1D2K .EQU %10100101 ; 1 DIODE 2K RESISTOR (DEFAULT) +DS5RTC_TC1D4K .EQU %10100110 ; 1 DIODE 4K RESISTOR +DS5RTC_TC1D8K .EQU %10100111 ; 1 DOIDE 8K RESISTOR +DS5RTC_TC2D2K .EQU %10101001 ; 2 DIODES 2K RESISTOR +DS5RTC_TC2D4K .EQU %10101010 ; 2 DIODES 4K RESISTOR +DS5RTC_TC2D8K .EQU %10101011 ; 2 DIODES 8K RESISTOR +; +; +; +DS5RTC_BUFSIZE .EQU 6 ; 6 BYTE BUFFER (YYMMDDHHMMSS) +; + DEVECHO "DS5RTC: RTCIO=" + DEVECHO DS5RTC_BASE + DEVECHO ", IO=" + DEVECHO DS5RTC_BASE + DEVECHO "\n" +; +; RTC DEVICE INITIALIZATION ENTRY +; +DS5RTC_INIT: + LD A,(RTC_DISPACT) ; RTC DISPATCHER ALREADY SET? + OR A ; SET FLAGS + RET NZ ; IF ALREADY ACTIVE, ABORT +; + CALL NEWLINE ; FORMATTING + PRTS("DS5RTC: IO=0x$") + LD A, DS5RTC_BASE + CALL PRTHEXBYTE +; + CALL DS5RTC_DETECT ; HARDWARE DETECTION + JR Z,DS5RTC_INIT1 ; IF ZERO, ALL GOOD + PRTS(" NOT PRESENT$") ; NOT ZERO, H/W NOT PRESENT + OR $FF ; SIGNAL FAILURE + RET ; BAIL OUT +; +DS5RTC_INIT1: + ; DISPLAY CURRENT TIME + CALL PC_SPACE ; FORMATTING + LD HL,DS5RTC_BUF ; USE INTERNAL BUFFER + CALL DS5RTC_RDCLK ; GET RAW RTC DATE/TIME + LD HL,DS5RTC_TIMBUF ; POINT TO HBIOS TIME BUF + CALL DS5RTC_CLK2TIM ; CONVERT TO HBIOS FMT + LD HL,DS5RTC_TIMBUF ; POINT TO HBIOS TIME BUF + CALL PRTDT ; PRINT FORMATTED DATE/TIME +; + ; ADD OURSELVES TO RTC DISPATCHER + LD BC,DS5RTC_DISPATCH + CALL RTC_SETDISP +; + XOR A + RET +; +; RTC DEVICE FUNCTION DISPATCH ENTRY +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; B: FUNCTION (IN) +; +DS5RTC_DISPATCH: + LD A, B ; Get requested function + AND $0F ; Isolate Sub-Function + JP Z, DS5RTC_GETTIM ; Get Time + DEC A + JP Z, DS5RTC_SETTIM ; Set Time + DEC A + JP Z, DS5RTC_GETBYT ; Get NVRAM Byte Value + DEC A + JP Z, DS5RTC_SETBYT ; Set NVRAM Byte Value + DEC A + JP Z, DS5RTC_GETBLK ; Get NVRAM Data Block Value + DEC A + JP Z, DS5RTC_SETBLK ; Set NVRAM Data Block Value + DEC A + JP Z, DS5RTC_GETALM ; Get Alarm + DEC A + JP Z, DS5RTC_SETALM ; Set Alarm +; +; RTC GET TIME +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: DATE/TIME BUFFER (OUT) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSS +; 24 HOUR TIME FORMAT IS ASSUMED +; +DS5RTC_GETTIM: + PUSH HL ; SAVE ADR OF OUTPUT BUF +; + ; READ THE CLOCK + LD HL,DS5RTC_BUF ; POINT TO CLOCK BUFFER + CALL DS5RTC_RDCLK ; READ THE CLOCK + LD HL,DS5RTC_TIMBUF ; POINT TO TIME BUFFER + CALL DS5RTC_CLK2TIM ; CONVERT CLOCK TO TIME +; + ; NOW COPY TO REAL DESTINATION (INTERBANK SAFE) + LD A,BID_BIOS ; COPY FROM BIOS BANK + LD (HB_SRCBNK),A ; SET IT + LD A,(HB_INVBNK) ; COPY TO CURRENT USER BANK + LD (HB_DSTBNK),A ; SET IT + LD HL,DS5RTC_TIMBUF ; SOURCE ADR + POP DE ; DEST ADR + LD BC,6 ; LENGTH IS 6 BYTES +#IF (INTMODE == 1) + DI +#ENDIF + CALL HB_BNKCPY ; COPY THE CLOCK DATA +#IF (INTMODE == 1) + EI +#ENDIF +; + ; CLEAN UP AND RETURN + XOR A ; SIGNAL SUCCESS + RET ; AND RETURN +; +; RTC SET TIME +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: DATE/TIME BUFFER (IN) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSS +; 24 HOUR TIME FORMAT IS ASSUMED +; +DS5RTC_SETTIM: + ; COPY INCOMING TIME DATA TO OUR TIME BUFFER + LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK + LD (HB_SRCBNK),A ; SET IT + LD A,BID_BIOS ; COPY TO BIOS BANK + LD (HB_DSTBNK),A ; SET IT + LD DE,DS5RTC_TIMBUF ; DEST ADR + LD BC,6 ; LENGTH IS 6 BYTES +#IF (INTMODE == 1) + DI +#ENDIF + CALL HB_BNKCPY ; COPY THE CLOCK DATA +#IF (INTMODE == 1) + EI +#ENDIF +; + ; WRITE TO CLOCK + LD HL,DS5RTC_TIMBUF ; POINT TO TIME BUFFER + CALL DS5RTC_TIM2CLK ; CONVERT TO CLOCK FORMAT + LD HL,DS5RTC_BUF ; POINT TO CLOCK BUFFER + CALL DS5RTC_WRCLK ; WRITE TO THE CLOCK +; + ; CLEAN UP AND RETURN + XOR A ; SIGNAL SUCCESS + RET ; AND RETURN +; +; RTC GET NVRAM BYTE +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; C: INDEX (IN) +; E: VALUE (OUT) +; +DS5RTC_GETBYT: + LD A,C ; INDEX TO A + ADD A,$20 ; NVRAM STARTS AT REG $20 + LD C,A ; BACK TO REG C + CALL DS5RTC_GET ; DO IT + LD E,A ; MOVE RESULT TO E + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +; RTC SET NVRAM BYTE +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; C: INDEX (IN) +; E: VALUE (IN) +; +DS5RTC_SETBYT: + LD A,C ; INDEX TO A + ADD A,$20 ; NVRAM STARTS AT REG $20 + LD C,A ; BACK TO REG C + CALL DS5RTC_WPOFF ; DISABLE WRITE PROTECT + CALL DS5RTC_PUT ; DO IT + CALL DS5RTC_WPOFF ; ENABLE WRITE PROTECT + LD E,A ; MOVE RESULT TO E + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +; RTC GET BLOCK +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: BUFFER ADDRESS (IN) +; +DS5RTC_GETBLK: + SYSCHKERR(ERR_NOTIMPL) + RET +; +; RTC GET BLOCK +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: BUFFER ADDRESS (IN) +; +DS5RTC_SETBLK: + SYSCHKERR(ERR_NOTIMPL) + RET +; +; RTC GET ALARM +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERROR +; HL: DATE/TIME BUFFER ADDRESS (IN) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSS +; 24 HOUR TIME FORMAT IS ASSUMED +; +DS5RTC_GETALM: + SYSCHKERR(ERR_NOTIMPL) + RET +; +; RTC SET ALARM +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERROR +; HL: DATE/TIME BUFFER ADDRESS (IN) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSS +; 24 HOUR TIME FORMAT IS ASSUMED +; +DS5RTC_SETALM: + SYSCHKERR(ERR_NOTIMPL) + RET +; +;================================================================================================== +; INTERNAL PROCEDURES +;================================================================================================== +; +; TURN ON WRITE PROTECT +; +DS5RTC_WPON: + PUSH AF + PUSH BC + LD A,%01000000 ; CONTROL REGISTER W/P ON VALUE + LD C,DS5RTC_REG_CONTROL ; CONTROL REGISTER ADR + CALL DS5RTC_PUT ; SET CONTROL REGISTER + POP BC + POP AF + RET +; +; TURN OFF WRITE PROTECT +; +DS5RTC_WPOFF: + PUSH AF + PUSH BC + XOR A ; CONTROL REGISTER W/P OFF VALUE + LD C,DS5RTC_REG_CONTROL ; CONTROL REGISTER ADR + CALL DS5RTC_PUT ; SET CONTROL REGISTER + POP BC + POP AF + RET +; +; DETECT RTC HARDWARE PRESENCE +; +DS5RTC_DETECT: + CALL DS5RTC_WPOFF ; DISABLE WRITE PROTECT +; + ; TEST AN NVRAM BYTE (NON-DESTRUCTIVE) + LD C,$7F ; LAST NVRAM BYTE + CALL DS5RTC_GET ; GET CURRENT VALUE + LD B,A ; SAVE IN B + XOR $FF ; FLIP ALL BITS + CALL DS5RTC_PUT ; SAVE TO RTC NVRAM + CALL DS5RTC_GET ; GET UPDATED VALUE + XOR $FF ; FLIP ALL BITS + CP B ; COMPARE W/ ORIGINAL READ + PUSH AF ; SAVE FLAGS + CALL DS5RTC_PUT ; RESAVE ORIGINAL VALUE +; + CALL DS5RTC_WPON ; RESTORE WRITE PROTECT + POP AF ; RESTORE FLAGS + RET ; ZF INDICATES PRESENCE +; +; READ RTC DATE/TIME INTO INTERNAL BUFFER +; +DS5RTC_RDCLK: + LD B,7 ; 7 BYTE DATE/TIME BUFFER + LD C,DS5RTC_REG_SEC ; START W/ SECONDS REGISTER + LD HL,DS5RTC_BUF ; USE INTERNAL BUFFER + CALL DS5RTC_GETBUF ; FILL THE BUFFER + XOR A ; SIGNAL SUCCESS + RET ; RETURN +; +; WRITE RTC DATE/TIME FROM INTERNAL BUFFER +; +DS5RTC_WRCLK: + CALL DS5RTC_WPOFF ; DISABLE WRITE PROTECT + LD B,7 ; 7 BYTE DATE/TIME BUFFER + LD C,DS5RTC_REG_SEC ; START W/ SECONDS REGISTER + LD HL,DS5RTC_BUF ; USE INTERNAL BUFFER + CALL DS5RTC_PUTBUF ; FILL THE BUFFER + CALL DS5RTC_WPON ; RESTORE WRITE PROTECT + XOR A ; SIGNAL SUCCESS + RET ; RETURN +; +; CONVERT DATA IN CLOCK BUFFER TO TIME BUFFER AT HL +; +DS5RTC_CLK2TIM: + LD A,(DS5RTC_YR) + LD (HL),A + INC HL + LD A,(DS5RTC_MON) + LD (HL),A + INC HL + LD A,(DS5RTC_DT) + LD (HL),A + INC HL + LD A,(DS5RTC_HR) + LD (HL),A + INC HL + LD A,(DS5RTC_MIN) + LD (HL),A + INC HL + LD A,(DS5RTC_SEC) + LD (HL),A + RET +; +; CONVERT DATA IN TIME BUFFER AT HL TO CLOCK BUFFER +; +DS5RTC_TIM2CLK: + PUSH HL + LD A,(HL) + LD (DS5RTC_YR),A + INC HL + LD A,(HL) + LD (DS5RTC_MON),A + INC HL + LD A,(HL) + LD (DS5RTC_DT),A + INC HL + LD A,(HL) + LD (DS5RTC_HR),A + INC HL + LD A,(HL) + LD (DS5RTC_MIN),A + INC HL + LD A,(HL) + LD (DS5RTC_SEC),A + POP HL + CALL TIMDOW + INC A ; CONVERT FROM 0-6 TO 1-7 + LD (DS5RTC_DAY),A + RET +; +; READ A BUFFER OF BYTES FROM THE RTC +; START RTC ADR IN C, COUNT IN B, BUF PTR IN HL +; +DS5RTC_GETBUF: + LD A,1 + OUT (DS5RTC_SELECT),A ; SELECT RTC + LD A,C ; ADDRESS TO A + OUT (DS5RTC_DATA),A ; SEND TO INTERFACE + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO WRITE ADR + CALL DS5RTC_WAITBSY ; WAIT FOR COMPLETION +DS5RTC_GETBUF1: + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO READ DATA + CALL DS5RTC_WAITBSY ; WAIT FOR DATA + IN A,(DS5RTC_DATA) ; GET VALUE + LD (HL),A ; SAVE BYTE IN BUFFER + INC HL ; BUMP BUF PTR + DJNZ DS5RTC_GETBUF1 ; LOOP FOR REQUESTED BYTES + LD A,0 + OUT (DS5RTC_SELECT),A ; DESELECT DEVICE + RET +; +; WRITE A BUFFER OF BYTES TO THE RTC +; START RTC ADR IN C, COUNT IN B, BUF PTR IN HL +; +DS5RTC_PUTBUF: + LD A,1 + OUT (DS5RTC_SELECT),A ; SELECT RTC + LD A,C ; ADDRESS TO A + SET 7,A ; SET WRITE BIT + OUT (DS5RTC_DATA),A ; SEND TO INTERFACE + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO WRITE ADR + CALL DS5RTC_WAITBSY ; WAIT FOR COMPLETION +DS5RTC_PUTBUF1: + LD A,(HL) ; NEXT BYTE TO WRITE + INC HL ; BUMP BUF PTR + OUT (DS5RTC_DATA),A ; SEND TO INTERFACE + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO WRITE BYTE + CALL DS5RTC_WAITBSY ; WAIT FOR COMPLETION + DJNZ DS5RTC_PUTBUF1 ; LOOP FOR REQUESTED BYTES + LD A,0 + OUT (DS5RTC_SELECT),A ; DESELECT DEVICE + RET +; +; GET A BYTE FROM THE RTC +; ADDRESS IN C, RETURN VALLUE IN A +; +DS5RTC_GET: + LD A,1 + OUT (DS5RTC_SELECT),A ; SELECT RTC + LD A,C ; ADDRESS TO A + OUT (DS5RTC_DATA),A ; SEND TO INTERFACE + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO WRITE ADR + CALL DS5RTC_WAITBSY ; WAIT FOR COMPLETION + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO READ DATA + CALL DS5RTC_WAITBSY ; WAIT FOR DATA + IN A,(DS5RTC_DATA) ; GET VALUE + PUSH AF ; SAVE VALUE + LD A,0 + OUT (DS5RTC_SELECT),A ; DESELECT DEVICE + POP AF ; RESTORE VALUE + RET +; +; PUT A BYTE TO THE RTC +; ADDRESS IN C, VALUE IN A +; +DS5RTC_PUT: + PUSH AF ; SAVE VALUE TO PUT + LD A,1 + OUT (DS5RTC_SELECT),A ; SELECT RTC + LD A,C ; ADDRESS TO A + SET 7,A ; SET WRITE BIT + OUT (DS5RTC_DATA),A ; SEND TO INTERFACE + OUT (DS5RTC_RUN),A ; SPI TRANSACTION TO WRITE ADR + CALL DS5RTC_WAITBSY ; WAIT FOR COMPLETION + POP AF ; RECOVER VALUE TO PUT + OUT (DS5RTC_DATA),A ; VALUE TO OUTPUT + OUT (DS5RTC_RUN),A ; SPI TRANSACTOIN TO WRITE VALUE + CALL DS5RTC_WAITBSY ; WAIT FOR WRITE TO COMPLETE + LD A,0 + OUT (DS5RTC_SELECT),A ; DESELECT DEVICE + RET +; +; WAIT UNTIL SPI INTERFACE IS NO LONGER BUSY +; +DS5RTC_WAITBSY: + PUSH AF ; PRESERVE AF + PUSH BC ; PRESERVE BC +; + ; AFTER INITIATING A SPI TRANSACTION, IT MAY TAKE A WHILE + ; FOR THE BUSY STATUS TO BE REFLECTED. THE DELAYS BELOW + ; ENSURE ENOUGH TIME HAS ELAPSED. + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY +; + ; SINCE THIS ROUTINE MAY BE USED TO DETECT AN RTC THAT DOES + ; NOT EXIST, WE PROTECT THE WAIT WITH A TIMEOUT LOOP TO + ; PREVENT A SYSTEM STALL. + LD B,0 +DS5RTC_WAITBSY1: + IN A,(DS5RTC_STATUS) ; GET STATUS BYTE + OR A ; SET FLAGS + JR Z,DS5RTC_WAITBSY2 ; IF ZERO, WE ARE DONE + DJNZ DS5RTC_WAITBSY1 ; TRY TILL COUNTER EXHAUSTED +DS5RTC_WAITBSY2: + POP BC ; RECOVER BC + POP AF ; RECOVER AF + RET +; +; DS5RTC_BUF IS USED FOR BURST READ/WRITE OF CLOCK DATA TO DS1305 +; FIELDS BELOW MATCH ORDER OF DS1305 FIELDS (BCD) +; +DS5RTC_BUF: +DS5RTC_SEC .DB 0 ; SECOND +DS5RTC_MIN .DB 0 ; MINUTE +DS5RTC_HR .DB 0 ; HOUR +DS5RTC_DAY .DB 0 ; DAY OF WEEK +DS5RTC_DT .DB 0 ; DATE +DS5RTC_MON .DB 0 ; MONTH +DS5RTC_YR .DB 0 ; YEAR +; +; DS5RTC_TIMBUF IS TEMP BUF USED TO STORE TIME TEMPORARILY TO DISPLAY +; IT. +; +DS5RTC_TIMBUF .FILL 6,0 ; 6 BYTES FOR GETTIM +; +; DS5RTC_TIMDEF IS DEFAULT TIME VALUE TO INITIALIZE CLOCK IF IT IS +; NOT RUNNING. +; +DS5RTC_TIMDEF: ; DEFAULT TIME VALUE TO INIT CLOCK + .DB $00,$01,$01 ; 2000-01-01 + .DB $00,$00,$00 ; 00:00:00 diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index f7e89631..ecce36ee 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -165,14 +165,6 @@ DSRTC_BUFSIZ .EQU 7 ; 7 BYTE BUFFER (YYMMDDHHMMSSWW) ; RTC DEVICE PRE-INITIALIZATION ENTRY ; DSRTC_PREINIT: -; - ;; SET RELEVANT BITS IN RTC LATCH SHADOW REGISTER - ;; TO THEIR QUIESENT STATE - ;LD A,(DSRTC_OPRVAL) ; GET CURRENT SHADOW REG VAL - ;AND ~DSRTC_MASK ; CLEAR OUR BITS - ;OR DSRTC_IDLE ; SET OUR IDLE BITS - ;LD (DSRTC_OPRVAL),A ; SAVE IT -; XOR A ; ZERO LD (DSRTC_STAT),A ; CLEAR STATUS CALL DSRTC_DETECT ; HARDWARE DETECTION diff --git a/Source/HBIOS/esp.asm b/Source/HBIOS/esp.asm index 5a76ffb7..e8820e1d 100644 --- a/Source/HBIOS/esp.asm +++ b/Source/HBIOS/esp.asm @@ -364,7 +364,8 @@ ESPCON_INIT: PUSH IY ; COPY CONFIG ENTRY PTR POP DE ; ... TO DE CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; ; ANNOUNCE OURSLEVES ; diff --git a/Source/HBIOS/ez80cpudrv.asm b/Source/HBIOS/ez80cpudrv.asm new file mode 100644 index 00000000..494f717b --- /dev/null +++ b/Source/HBIOS/ez80cpudrv.asm @@ -0,0 +1,333 @@ +; +;================================================================================================== +; RCBUS EZ80 CPU DRIVER +;================================================================================================== +; +; Driver code designed for the RCBus eZ80 CPU Module. +; The driver expects the eZ80 firmware to manage the initial booting of the system. +; Details for the platform and the software for the on-chip firmware can be found at: +; https://github.com/dinoboards/ez80-for-rc +; +; Although the eZ80 firmware is booted before HBIOS, the eZ80 CPU driver is still required +; to communicate with the firmware to perform a number of initialisation tasks. +; See also the associated ez80 platform drivers (ez80rtc, ez80systmr, ez80uart). +; +; The driver 'exports' the following: +; 1. EZ80_PREINIT - This function is called by the HBIOS boot code to initialise the eZ80 firmware. +; 2. EZ80_RPT_TIMINGS - This function is called by the HBIOS boot code to report the platform timings. +; 3. DELAY - pause for approx 17us +; 4. VDELAY - pause for approx 17us * DE +; +; EZ80_PREINIT performs the following: +; 1. Exchange platform version numbers +; 2. Retrieve CPU Frequency +; 3. Set Memory and I/O Bus Timings +; 4. Set Timer Tick Frequency +; + +EZ80_PREINIT: + EZ80_TMR_INT_DISABLE() + + ; PROVIDE THE EZ80 FIRMWARE WITH PLATFORM CONFIGUATIONS + LD C, 1 ; RomWBW'S ASSIGNED CODE + LD D, RMJ + LD E, RMN + LD H, RUP + LD L, RTP + + EZ80_UTIL_VER_EXCH() + ; TODO: MAP THE FIRMWARE CPU TO HBIOS (eZ80 ONLY HAS ONE CPU TYPE AS OF NOW) + LD A, 5 + LD (HB_CPUTYPE),A + + ; DETECT IF USING ALT-FIRMWARE + LD A, C + AND $80 + LD (EZ80_ALT_FIRM), A + LD (EZ80_PLT_VERSION), HL + LD (EZ80_PLT_VERSION+2), DE + + EXX + LD A, C + LD (EZ80_BUILD_DATE), A ; DAY + LD A, D + LD (EZ80_BUILD_DATE+1), A ; MONTH + LD A, E + LD (EZ80_BUILD_DATE+2), A ; YEAR + + EZ80_UTIL_GET_CPU_FQ() + LD A, E + LD (CB_CPUMHZ), A + LD (CB_CPUKHZ), HL + LD (HB_CPUOSC), HL + +#IF (EZ80_FWSMD_TYP == EZ80WSMD_WAIT) + LD L, EZ80_FLSH_WS + EZ80_UTIL_FLSHWS_SET() + LD A, L + LD (EZ80_PLT_FLSHWS), A +#ENDIF + +#IF (EZ80_FWSMD_TYP == EZ80WSMD_CALC) + LD HL, EZ80_FLSH_MIN_NS + LD E, 0 + EZ80_CPY_EHL_TO_UHL + EZ80_UTIL_FLSHFQ_SET() + LD A, L + LD (EZ80_PLT_FLSHWS), A +#ENDIF + + +#IF (EZ80_WSMD_TYP == EZ80WSMD_CYCLES) + LD L, EZ80_MEM_CYCLES | $80 + EZ80_UTIL_MEMTM_SET() + LD A, L + LD (EZ80_PLT_MEMWS), A + + LD L, EZ80_IO_CYCLES | $80 + EZ80_UTIL_IOTM_SET() + LD A, L + LD (EZ80_PLT_IOWS), A + + RET +#ENDIF + +#IF (EZ80_WSMD_TYP == EZ80WSMD_CALC) + LD HL, EZ80_MEM_MIN_NS + LD E, 0 + EZ80_CPY_EHL_TO_UHL + LD E, EZ80_MEM_MIN_WS + EZ80_UTIL_MEMTMFQ_SET + LD A, L + LD (EZ80_PLT_MEMWS), A + + LD HL, EZ80_IO_MIN_NS + LD E, 0 + EZ80_CPY_EHL_TO_UHL + LD E, EZ80_IO_MIN_WS + EZ80_UTIL_IOTMFQ_SET + + LD A, L + LD (EZ80_PLT_IOWS), A +#ENDIF +#IF (EZ80_WSMD_TYP == EZ80WSMD_WAIT) + LD L, EZ80_MEM_WS + EZ80_UTIL_MEMTM_SET() + LD A, L + LD (EZ80_PLT_MEMWS), A + + LD L, EZ80_IO_WS + EZ80_UTIL_IOTM_SET() + LD A, L + LD (EZ80_PLT_IOWS), A +#ENDIF + + LD C, TICKFREQ + EZ80_TMR_SET_FREQTICK + + RET +; +; -------------------------------- +; eZ80 CPU DRIVER REPORT TIMINGS +; -------------------------------- +EZ80_RPT_TIMINGS: + LD A, (EZ80_PLT_MEMWS) + BIT 7, A + JR NZ, EZ80_RPT_MCYC + + CALL PRTDECB + CALL PRTSTRD + .TEXT " MEM W/S, $" + JR EZ80_RPT_IOTIMING + +EZ80_RPT_MCYC: + AND $7F + CALL PRTDECB + CALL PRTSTRD + .TEXT " MEM B/C, $" + +EZ80_RPT_IOTIMING: + LD A, (EZ80_PLT_IOWS) + BIT 7, A + JR NZ, EZ80_RPT_ICYC + + CALL PRTDECB + CALL PRTSTRD + .TEXT " I/O W/S, $" + JR EZ80_RPT_FSH_TIMINGS + +EZ80_RPT_ICYC: + AND $7F + CALL PRTDECB + CALL PRTSTRD + .TEXT " I/O B/C, $" + +EZ80_RPT_FSH_TIMINGS: + LD A, (EZ80_PLT_FLSHWS) + CALL PRTDECB + CALL PRTSTRD + .TEXT " FSH W/S$"; + +;-------------------------------------------------------------------------------------------------- +; DELAY LOOP TEST CALIBRATION +;-------------------------------------------------------------------------------------------------- +; +; IF ENABLED, THE GPIO PCBx PINS OF THE EZ80 WILL BE TOGGLED AT 'DELAY' RATE * 16 +; CAN BE USED TO VERIFY DELAY WORKS SUFFICIENT FOR DIFFERENT EZ80 CLOCK SPEEDS +; AND BUS CYCLES +; +#IF FALSE + +; 7.3728 MHZ -- 1 MEM W/S, 6 I/O W/S, 0 FSH W/S - 428 - 26.7us +; 18.4320 MHZ -- 2 MEM W/S, 6 I/O W/S, 1 FSH W/S - 284 - 17.8us +; 20.0000 MHZ -- 2 MEM W/S, 6 I/O W/S, 1 FSH W/S - 281 - 17.6us +; 25.0000 MHZ -- 2 MEM W/S, 3 I/O B/C, 1 FSH W/S - 271 - 16.9us +; 32.0000 MHZ -- 3 MEM W/S, 4 I/O B/C, 2 FSH W/S - 289 - 18.0us + + +PC_DR: .equ $009E +PC_DDR: .equ $009F + DI + + ; ENABLE PC5 GPIO AS OUTPUT + LD BC, PC_DDR + XOR A + OUT (C), A + PUSH AF + + LD BC, PC_DR +LOOP: + + POP AF + OUT (C), A + CPL + PUSH AF + + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + + CALL DELAY + CALL DELAY + CALL DELAY + CALL DELAY + + JR LOOP +#ENDIF + RET + +DELAY: + EZ80_DELAY + EZ80_DELAY + EZ80_DELAY + RET + +VDELAY: + EZ80_DELAY + EZ80_DELAY + EZ80_DELAY + DEC DE + LD A,D + OR E + JR NZ, VDELAY + RET + +EZ80_RPT_FIRMWARE: + CALL PRTSTRD + .TEXT "\r\neZ80 Firmware: $" + + LD A, (EZ80_PLT_VERSION+3) ; MAJOR VERSION NUMBER + CALL PRTDECB + CALL PC_PERIOD + LD A, (EZ80_PLT_VERSION+2) ; MINOR VERSION NUMBER + CALL PRTDECB + CALL PC_PERIOD + LD A, (EZ80_PLT_VERSION+1) ; REVISION NUMBER + CALL PRTDECB + CALL PC_PERIOD + LD A, (EZ80_PLT_VERSION) ; PATCH NUMBER + CALL PRTDECB + + CALL PRTSTRD + .TEXT " 20$" + LD A, (EZ80_BUILD_DATE+2) ; YEAR + CALL PRTDECB + CALL PC_DASH + LD A, (EZ80_BUILD_DATE+1) ; MONTH + CALL PC_LEADING_ZERO + CALL PRTDECB + CALL PC_DASH + LD A, (EZ80_BUILD_DATE) ; DAY + CALL PC_LEADING_ZERO + CALL PRTDECB + + LD A, (EZ80_ALT_FIRM) + OR A + RET Z + CALL PRTSTRD + .TEXT " (ALT)$" + RET + +PC_LEADING_ZERO: + CP 10 + RET NC + + PUSH AF + LD A, '0' + JP PC_PRTCHR + +PC_DASH: + PUSH AF + LD A, '-' + JP PC_PRTCHR + +EZ80_PLT_MEMWS: + .DB EZ80_MEM_WS +EZ80_PLT_IOWS: + .DB EZ80_IO_WS +EZ80_PLT_FLSHWS: + .DB EZ80_FLSH_WS + +EZ80_PLT_VERSION: + .DB 0, 0, 0, 0 + +EZ80_ALT_FIRM: + .DB 0 + +EZ80_BUILD_DATE: + .DB 0, 0, 0 ; DAY, MONTH, YEAR + +; ez80 helper functions/instructions + +_EZ80_CPY_EHL_TO_UHL: + PUSH IX + PUSH AF + .DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0 + .DB $49, $DD, $39 ; ADD.L IX, SP + .DB $49, $E5 ; PUSH.L HL + .DB $5B, $DD, $73, $FF ; LD.LIL (IX-1), E + .DB $49, $E1 ; POP.L HL + POP AF + POP IX + RET + +_EZ80_CPY_UHL_TO_EHL: + PUSH IX + .DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0 + .DB $49, $DD, $39 ; ADD.L IX, SP + .DB $49, $E5 ; PUSH.L HL + .DB $5B, $DD, $5E, $FF ; LD.LIL E, (IX-1) + .DB $49, $E1 ; POP.L HL + POP IX + RET diff --git a/Source/HBIOS/ez80instr.inc b/Source/HBIOS/ez80instr.inc new file mode 100644 index 00000000..5da3db4d --- /dev/null +++ b/Source/HBIOS/ez80instr.inc @@ -0,0 +1,141 @@ +; +;================================================================================================== +; HELPER MACROS FOR TARGETING EZ80 CPU INSTRUCTIONS +;================================================================================================== + +; +; EMIT PREFIX REQUIRED BY EZ80 TO ENSURE CORRECT 16 BIT IO OPERATION +; +#IF (CPUFAM == CPU_EZ80) + ; RST.L $08 + #DEFINE EZ80_IO .DB $49, $CF + ; RST.L $10 + #DEFINE EZ80_FN .DB $49, $D7 + ; RST.L $18 + #DEFINE EZ80_DELAY .DB $49, $DF + + #DEFINE EZ80_UTIL_VER_EXCH XOR A \ LD B, 0 \ EZ80_FN + #DEFINE EZ80_UTIL_DELAY XOR A \ LD B, 1 \ EZ80_FN + #DEFINE EZ80_UTIL_SET_BUSTM XOR A \ LD B, 3 \ EZ80_FN + #DEFINE EZ80_UTIL_SET_BUSFQ XOR A \ LD B, 4 \ EZ80_FN + #DEFINE EZ80_UTIL_GET_CPU_FQ XOR A \ LD B, 5 \ EZ80_FN + #DEFINE EZ80_UTIL_DEBUG XOR A \ LD B, 7 \ EZ80_FN + #DEFINE EZ80_UTIL_MEMTM_SET XOR A \ LD B, 8 \ EZ80_FN + #DEFINE EZ80_UTIL_IOTM_SET XOR A \ LD B, 9 \ EZ80_FN + #DEFINE EZ80_UTIL_MEMTM_GET XOR A \ LD B, 10 \ EZ80_FN + #DEFINE EZ80_UTIL_IOTM_GET XOR A \ LD B, 11 \ EZ80_FN + #DEFINE EZ80_UTIL_MEMTMFQ_SET XOR A \ LD B, 12 \ EZ80_FN + #DEFINE EZ80_UTIL_IOTMFQ_SET XOR A \ LD B, 13 \ EZ80_FN + #DEFINE EZ80_UTIL_FLSHWS_SET XOR A \ LD B, 14 \ EZ80_FN + #DEFINE EZ80_UTIL_FLSHWS_GET XOR A \ LD B, 15 \ EZ80_FN + #DEFINE EZ80_UTIL_FLSHFQ_SET XOR A \ LD B, 16 \ EZ80_FN + + #DEFINE EZ80_RTC_INIT LD A, 1 \ LD B, 0 \ EZ80_FN + #DEFINE EZ80_RTC_GET_TIME LD A, 1 \ LD B, 1 \ EZ80_FN + #DEFINE EZ80_RTC_SET_TIME LD A, 1 \ LD B, 2 \ EZ80_FN + + #DEFINE EZ80_TMR_GET_TICKS LD A, 2 \ LD B, 0 \ EZ80_FN + #DEFINE EZ80_TMR_GET_SECONDS LD A, 2 \ LD B, 1 \ EZ80_FN + #DEFINE EZ80_TMR_SET_TICKS LD A, 2 \ LD B, 2 \ EZ80_FN + #DEFINE EZ80_TMR_SET_SECONDS LD A, 2 \ LD B, 3 \ EZ80_FN + #DEFINE EZ80_TMR_GET_FREQTICK LD A, 2 \ LD B, 4 \ EZ80_FN + #DEFINE EZ80_TMR_SET_FREQTICK LD A, 2 \ LD B, 5 \ EZ80_FN + #DEFINE EZ80_TMR_THROTTLE_START LD A, 2 \ LD B, 6 \ EZ80_FN + #DEFINE EZ80_TMR_THROTTLE_WAIT LD A, 2 \ LD B, 7 \ EZ80_FN + #DEFINE EZ80_TMR_INT_DISABLE LD A, 2 \ LD B, 8 \ EZ80_FN + #DEFINE EZ80_TMR_INT_ENABLE LD A, 2 \ LD B, 9 \ EZ80_FN + #DEFINE EZ80_TMR_IS_TICK_ISR LD A, 2 \ LD B, 10 \ EZ80_FN + #DEFINE EZ80_TMR_DELAY LD A, 2 \ LD B, 11 \ EZ80_FN + + #DEFINE EZ80_THROTTLE_START(p,store) \ + #DEFCONT \ PUSH AF + #DEFCONT \ PUSH BC + #DEFCONT \ PUSH HL + #DEFCONT \ LD A, 2 + #DEFCONT \ LD BC, (6 * 256) + p + #DEFCONT \ EZ80_FN + #DEFCONT \ LD (store), HL + #DEFCONT \ POP HL + #DEFCONT \ POP BC + #DEFCONT \ POP AF + + #DEFINE EZ80_THROTTLE_WAIT(p,store) \ + #DEFCONT \ PUSH AF + #DEFCONT \ PUSH BC + #DEFCONT \ PUSH HL + #DEFCONT \ LD A, 2 + #DEFCONT \ LD BC, (7 * 256) + p + #DEFCONT \ LD HL, (store) + #DEFCONT \ EZ80_FN + #DEFCONT \ LD (store), HL + #DEFCONT \ POP HL + #DEFCONT \ POP BC + #DEFCONT \ POP AF + + #DEFINE EZ80_UART_IN LD A, 3 \ LD B, 0 \ EZ80_FN + #DEFINE EZ80_UART_OUT LD A, 3 \ LD B, 1 \ EZ80_FN + #DEFINE EZ80_UART_IN_STAT LD A, 3 \ LD B, 2 \ EZ80_FN + #DEFINE EZ80_UART_OUT_STAT LD A, 3 \ LD B, 3 \ EZ80_FN + #DEFINE EZ80_UART_CONFIG LD A, 3 \ LD B, 4 \ EZ80_FN + #DEFINE EZ80_UART_QUERY LD A, 3 \ LD B, 5 \ EZ80_FN + #DEFINE EZ80_UART_RESET LD A, 3 \ LD B, 6 \ EZ80_FN + + #DEFINE RET.L .DB $49 \ RET + + #DEFINE IN0_A(p) .DB $ED,$38,p + #DEFINE IN0_B(p) .DB $ED,$00,p + #DEFINE IN0_C(p) .DB $ED,$08,p + #DEFINE IN0_D(p) .DB $ED,$10,p + #DEFINE IN0_E(p) .DB $ED,$18,p + #DEFINE IN0_H(p) .DB $ED,$20,p + #DEFINE IN0_L(p) .DB $ED,$28,p + + #DEFINE OUT0_A(p) .DB $ED,$39,p + #DEFINE OUT0_B(p) .DB $ED,$01,p + #DEFINE OUT0_C(p) .DB $ED,$09,p + #DEFINE OUT0_D(p) .DB $ED,$11,p + #DEFINE OUT0_E(p) .DB $ED,$19,p + #DEFINE OUT0_H(p) .DB $ED,$21,p + #DEFINE OUT0_L(p) .DB $ED,$29,p + + #DEFINE LDHLMM.LIL(Mmn) \ + #defcont \ .DB $5B + #defcont \ LD HL, Mmn + #defcont \ .DB (Mmn >> 16) & $FF + + #DEFINE LDBCMM.LIL(Mmn) \ + #defcont \ .DB $5B + #defcont \ LD BC, Mmn & $FFFF + #defcont \ .DB (Mmn >> 16) & $FF + + #DEFINE SBCHLBC.LIL \ + #defcont \ .DB $49 + #defcont \ SBC HL, BC + +IO_SEGMENT .EQU $FF ; THE UPPER 8-BIT ADDRESS FOR I/O + + #DEFINE OUT_NN_A(addr) \ + #DEFCONT \ PUSH BC + #DEFCONT \ LD BC, IO_SEGMENT << 8 | addr + #DEFCONT \ OUT (C), A + #DEFCONT \ POP BC + + #DEFINE IN_A_NN(addr) \ + #DEFCONT \ LD A, IO_SEGMENT + #DEFCONT \ IN A, (addr) + +#define EZ80_CPY_EHL_TO_UHL CALL _EZ80_CPY_EHL_TO_UHL +#define EZ80_CPY_UHL_TO_EHL CALL _EZ80_CPY_UHL_TO_EHL + +#ELSE + #DEFINE EZ80_IO + + #DEFINE EZ80_THROTTLE_START(p,store) + #DEFINE EZ80_THROTTLE_WAIT(p,store) + +IO_SEGMENT .EQU $FF ; THE UPPER 8-BIT ADDRESS FOR I/O + + #DEFINE OUT_NN_A(addr) OUT (addr), A + #DEFINE IN_A_NN(addr) IN A, (addr) + +#ENDIF diff --git a/Source/HBIOS/ez80rtc.asm b/Source/HBIOS/ez80rtc.asm new file mode 100644 index 00000000..483739e1 --- /dev/null +++ b/Source/HBIOS/ez80rtc.asm @@ -0,0 +1,173 @@ +; +;================================================================================================== +; EZ80 ON-CHIP RTC DRIVER +;================================================================================================== +; +EZ80RTC_BUFSIZ .EQU 6 ; SIX BYTE BUFFER (YYMMDDHHMMSS) +; +; RTC DEVICE INITIALIZATION ENTRY + +EZ80RTC_INIT: + ; display driver install message + ; delegate init function to firmware + ; install dispatcher + ; dispatch local routine that delgates to firmware routines + + LD A, (RTC_DISPACT) ; RTC DISPATCHER ALREADY SET? + OR A ; SET FLAGS + RET NZ ; IF ALREADY ACTIVE, ABORT + + CALL NEWLINE ; FORMATTING + CALL PRTSTRD + .TEXT "EZ80 RTC: $" + + EZ80_RTC_INIT() + JR Z, RTC_POWERED + + PUSH AF + CALL PRTSTRD + .TEXT "NOT POWERED$" + POP AF + RET + +RTC_POWERED: + CALL PRTSTRD + .TEXT "POWERED $" + + ; DISPLAY CURRENT TIME + LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED + EZ80_RTC_GET_TIME() + + LD HL, EZ80RTC_BCDBUF ; POINT TO BCD BUF + CALL PRTDT ; DISPLAY THIS TIME +; + LD BC, EZ80RTC_DISPATCH + CALL RTC_SETDISP +; + XOR A ; SIGNAL SUCCESS + RET + +; +; RTC DEVICE FUNCTION DISPATCH ENTRY +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; B: FUNCTION (IN) +; +EZ80RTC_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,EZ80RTC_GETTIM ; GET TIME + DEC A + JP Z,EZ80RTC_SETTIM ; SET TIME + DEC A + JP Z,EZ80RTC_GETBYT ; GET NVRAM BYTE VALUE + DEC A + JP Z,EZ80RTC_SETBYT ; SET NVRAM BYTE VALUE + DEC A + JP Z,EZ80RTC_GETBLK ; GET NVRAM DATA BLOCK VALUES + DEC A + JP Z,EZ80RTC_SETBLK ; SET NVRAM DATA BLOCK VALUES + DEC A + JP Z,EZ80RTC_GETALM ; GET ALARM + DEC A + JP Z,EZ80RTC_SETALM ; SET ALARM + DEC A + JP Z,EZ80RTC_DEVICE ; REPORT RTC DEVICE INFO + SYSCHKERR(ERR_NOFUNC) + RET +; +; RTC GET TIME +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: DATE/TIME BUFFER (OUT) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSS +; 24 HOUR TIME FORMAT IS ASSUMED +; +EZ80RTC_GETTIM: + PUSH HL + LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED + EZ80_RTC_GET_TIME() ; (HL) <- TIME + + LD A, BID_BIOS ; COPY FROM BIOS BANK + LD (HB_SRCBNK), A ; SET IT + LD A, (HB_INVBNK) ; COPY TO CURRENT USER BANK + LD (HB_DSTBNK), A ; SET IT + LD HL, EZ80RTC_BCDBUF ; SOURCE ADR + POP DE ; DEST ADR + LD BC, EZ80RTC_BUFSIZ ; LENGTH + CALL HB_BNKCPY ; COPY THE CLOCK DATA + + XOR A ; SIGNAL SUCCESS + RET +; +; +; RTC SET TIME +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; HL: DATE/TIME BUFFER (IN) +; BUFFER FORMAT IS BCD: YYMMDDHHMMSSWW +; 24 HOUR TIME FORMAT IS ASSUMED +; +EZ80RTC_SETTIM: + ; COPY TO BCD BUF + LD A,(HB_INVBNK) ; COPY FROM CURRENT USER BANK + LD (HB_SRCBNK),A ; SET IT + LD A,BID_BIOS ; COPY TO BIOS BANK + LD (HB_DSTBNK),A ; SET IT + LD DE,EZ80RTC_BCDBUF ; DEST ADR + LD BC,EZ80RTC_BUFSIZ ; LENGTH + CALL HB_BNKCPY ; COPY THE RPC DATA + + LD HL, EZ80RTC_BCDBUF_EXT ; POINT TO BCD BUF EXTENDED + LD (HL), $20 ; CENTURY NOT SUPPORT BY HBIOS + EZ80_RTC_SET_TIME() ; (HL) -> SYSTEM TIME + + XOR A ; SIGNAL SUCCESS + RET +; +; RTC GET NVRAM BYTE +; C: INDEX +; E: VALUE (OUTPUT) +; A:0 IF OK, ERR_RANGE IF OUT OF RANGE +; +EZ80RTC_GETBYT: + SYSCHKERR(ERR_NOTIMPL) + ; XOR A ; SIGNAL SUCCESS + RET ; AND RETURN + + +; RTC SET NVRAM BYTE +; C: INDEX +; E: VALUE +; A:0 IF OK, ERR_RANGE IF OUT OF RANGE +; +EZ80RTC_SETBYT: + SYSCHKERR(ERR_NOTIMPL) + ; XOR A ; SIGNAL SUCCESS + RET + +EZ80RTC_GETBLK: +EZ80RTC_SETBLK: +EZ80RTC_GETALM: +EZ80RTC_SETALM: + SYSCHKERR(ERR_NOTIMPL) + RET +; +; REPORT RTC DEVICE INFO +; +EZ80RTC_DEVICE: + LD D, RTCDEV_EZ80 ; D := DEVICE TYPE + LD E, 0 ; E := PHYSICAL DEVICE NUMBER + LD HL, 00 ; H := 0, DRIVER HAS NO MODES, L := 0, NO I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET + + +; REGISTER EXTRACTED VALUES +; +EZ80RTC_BCDBUF_EXT: +EZ80RTC_CN .DB 20 ; CENTURY +EZ80RTC_BCDBUF: +EZ80RTC_YR .DB 24 +EZ80RTC_MO .DB 01 +EZ80RTC_DT .DB 01 +EZ80RTC_HH .DB 00 +EZ80RTC_MM .DB 00 +EZ80RTC_SS .DB 00 diff --git a/Source/HBIOS/ez80systmr.asm b/Source/HBIOS/ez80systmr.asm new file mode 100644 index 00000000..7663a13d --- /dev/null +++ b/Source/HBIOS/ez80systmr.asm @@ -0,0 +1,88 @@ +; +;================================================================================================== +; EZ80 50/60HZ TIMER TICK DRIVER +;================================================================================================== +; +; Configuration options: +; EZ80TIMER: +; 0 -> No timer tick interrupts MARSHALLED to HBIOS. +; HBIOS System calls SYS_GETTIMER, SYS_GETSECS, SYS_SETTIMER, SYS_SETSECS are implemented here and DELEGATED to eZ80 firmware functions +; 1 -> Timer tick interrupts MARSHALLED to HBIOS. +; HBIOS System calls SYS_GETTIMER, SYS_GETSECS, SYS_SETTIMER, SYS_SETSECS are implemented within HBIOS +; + +#IF (EZ80TIMER == EZ80TMR_INT) +EZ80_TMR_INIT: + CALL NEWLINE ; FORMATTING + CALL PRTSTRD + .TEXT "EZ80 TIMER: INTERRUPTS ENABLED$" + + LD HL,EZ80_TMR_INT ; GET INT VECTOR + CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST + + EZ80_TMR_INT_ENABLE() ; INSTALL TIMER HOOK + RET + +EZ80_TMR_INT: + EZ80_TMR_IS_TICK_ISR() + RET Z ; NOT A EZ80 TIMER TICK + + CALL HB_TIMINT ; RETURN NZ - HANDLED + OR $FF + RET +#ENDIF +#IF (EZ80TIMER == EZ80TMR_FIRM) + +EZ80_TMR_INIT: + CALL NEWLINE ; FORMATTING + CALL PRTSTRD + .TEXT "EZ80 TIMER: FIRMWARE$" + RET +; ----------------------------------------------- +; Implementation of HBIOS SYS TIMER functions to +; delegate to eZ80 firmware functions + +; GET TIMER +; RETURNS: +; DE:HL: TIMER VALUE (32 BIT) +; +SYS_GETTIMER: + EZ80_TMR_GET_TICKS() + RET +; +; GET SECONDS +; RETURNS: +; DE:HL: SECONDS VALUE (32 BIT) +; C: NUM TICKS WITHIN CURRENT SECOND +; +SYS_GETSECS: + EZ80_TMR_GET_SECONDS() + + EZ80_CPY_UHL_TO_EHL ; E:HL{15:0} <- HL{23:0} + LD D, 0 + RET +; +; SET TIMER +; ON ENTRY: +; DE:HL: TIMER VALUE (32 BIT) +; +SYS_SETTIMER: + EZ80_CPY_EHL_TO_UHL ; HL{23:0} <- E:HL{15:0} + EZ80_TMR_SET_TICKS() + RET +; +; SET SECS +; ON ENTRY: +; DE:HL: SECONDS VALUE (32 BIT) +; +SYS_SETSECS: + EZ80_CPY_EHL_TO_UHL ; HL{23:0} <- E:HL{15:0} + + EZ80_TMR_SET_SECONDS() + RET + +#ENDIF +#IF (EZ80TIMER == EZ80TMR_NONE) +EZ80_TMR_INIT: + RET +#ENDIF diff --git a/Source/HBIOS/ez80uart.asm b/Source/HBIOS/ez80uart.asm new file mode 100644 index 00000000..2bc68322 --- /dev/null +++ b/Source/HBIOS/ez80uart.asm @@ -0,0 +1,324 @@ +; +;================================================================================================== +; eZ80 UART DRIVER (SERIAL PORT) +;================================================================================================== +; +; +; Supported Line Characteristics are encoded as follows in the DE register pair: +; +; | **Bits** | **Characteristic** | +; |---------:|----------------------------------------| +; | 15-14 | Reserved (set to 0) | +; | 13 | RTS (Not implemented) | +; | 12-8 | Baud Rate* (see below) | +; | 7 | DTR (Not implemented) | +; | 6 | XON/XOFF Flow Control (not implemented)| +; | 5 | Stick Parity (not implemented) | +; | 4 | Even Parity (set for true) | +; | 3 | Parity Enable (set for true) | +; | 2 | Stop Bits (0-> 1 BIT, 1-> 2 BITS) | +; | 1-0 | Data Bits (5-8 encoded as 0-3) | +; +; * The 5-bit Baud Rate value (V) is encoded as V = 75 * 2^X * 3^Y. The +; bits are defined as YXXXX. +; +; STICK & EVEN & PARITY -> MARK PARITY -> NOT SUPPORTED +; STICK & !EVEN & PARITY -> SPACE PARITY -> NOT SUPPORTED +; THEREFORE, MARK PARITY WILL BE INTERPRETED AS EVEN PARITY +; AND SPACE PARITY WILL BE INTERPRETED AS ODD PARITY + +UART0_LSR .EQU $C5 +UART0_THR .EQU $C0 +UART0_RBR .EQU $C0 + +LSR_THRE .EQU $20 +LSR_DR .EQU $01 + +EZUART_PREINIT: + LD BC, EZUART_FNTBL + LD DE, EZUART_CFG + CALL CIO_ADDENT + LD (EZUART_ID), A + + XOR A + RET + +EZUART_INIT: + CALL NEWLINE ; FORMATTING + CALL PRTSTRD + .TEXT "EZ80 UART: UART0$" + + XOR A + RET +; +; ### Function 0x00 -- Character Input (CIOIN) +; +; Read and return a Character (E). If no character(s) are available in the +; input buffer, this function will wait indefinitely. The returned Status +; (A) is a standard HBIOS result code. +; +; Outputs: +; E: Character +; A: Status (0-OK, else error) +; +EZUART_IN: + EZ80_UART_IN() ; CHAR RETURNED IN E + RET +; +; ### Function 0x01 -- Character Output (CIOOUT) +; +; Send the Character (E). If there is no space available in the unit's output +; buffer, the function will wait indefinitely. The returned Status (A) is a +; standard HBIOS result code. +; +; Inputs: +; E: Character +; +; Outputs: +; A: Status (0-OK, else error) +; +EZUART_OUT: + EZ80_UART_OUT() + RET +; +; ### Function 0x02 -- Character Input Status (CIOIST) +; +; Return the count of Characters Pending (A) in the input buffer. +; +; The value returned in register A is used as both a Status (A) code and +; the return value. Negative values (bit 7 set) indicate a standard HBIOS +; result (error) code. Otherwise, the return value represents the number +; of characters in the input buffer. +; +; Outputs: +; A: Status / Characters Pending +; +EZUART_IST: + EZ80_UART_IN_STAT() + RET +; +; ### Function 0x03 -- Character Output Status (CIOOST) +; +; Return the status of the output FIFO. 0 means the output FIFO is full and +; no more characters can be sent. 1 means the output FIFO is not full and at +; least one character can be sent. Negative values (bit 7 set) indicate a +; standard HBIOS result (error) code. +; +; Outputs +; A: Status (0 -> Full, 1 -> OK to send, < 0 -> HBIOS error code) +; +EZUART_OST: + EZ80_UART_OUT_STAT() + RET + +BAUD_RATE .EQU 115200 +; +; ### Function 0x04 -- Character I/O Initialization (CIOINIT) +; +; Apply the requested line Characteristics in (DE). The definition of the +; line characteristics value is described above. If DE contains -1 (0xFFFF), +; then the input and output buffers will be flushed and reset. +; The Status (A) is a standard HBIOS result code. +; +; Inputs: +; DE: Line Characteristics +; +; Outputs: +; A: Status (0-OK, else error) +; +EZUART_INITDEV: + LD A, D + CP E + JR NZ, NOT_RESET + CP $FF + JR NZ, NOT_RESET + + EZ80_UART_RESET() + RET + +NOT_RESET: + PUSH DE ; SAVE LINE CHARACTERISTICS + LD A, D + AND $1F ; ISOLATE ENCODED BAUD RATE + LD L, A ; PUT IN L + LD H, 0 ; H IS ALWAYS ZERO + LD DE, 75 ; BAUD RATE DECODE CONSTANT + CALL DECODE ; DE:HL := BAUD RATE + + EZ80_CPY_EHL_TO_UHL ; HL{23:0} <- E:HL{15:0} + + POP DE ; RESTORE REQUESTED LINE CHARACTERISTICS + LD A, E + AND 3 ; MASK FOR DATA BITS + RLCA + RLCA + RLCA ; SHIFT TO BITS 4:3 + LD D, A ; SAVE INTO D + + BIT 2, E ; STOP BITS (1 OR 2) + JR Z, ISKIP1 + SET 2, D ; APPLY TO D +ISKIP1: + + BIT 3, E ; PARITY ENABLE + JR Z, ISKIP2 + SET 1, D ; APPLY TO D +ISKIP2: + + BIT 4, E ; EVEN PARITY + JR Z, ISKIP3 + SET 0, D ; APPLY TO D +ISKIP3: + + ; D NOW CONTAINS THE LINE CONTROL BITS AS PER EZ80 FUNCTION + + EZ80_UART_CONFIG() + RET + +#DEFINE TRANSLATE(nnn,rrr) \ +#defcont \ LDBCMM.LIL(nnn) +#defcont \ SBCHLBC.LIL +#defcont \ JR NC, $+7 +#defcont \ LD D, rrr +#defcont \ JP uart_query_end +; +; ### Function 0x05 -- Character I/O Query (CIOQUERY) +; +; Returns the current Line Characteristics (DE). The definition of the line +; characteristics value is described above. The returned status (A) is a +; standard HBIOS result code. +; +; As the eZ80 UART driver supports more than the defined HBIOS baud rates, the +; returned baud rate may be an approximation of the actual baud rate. +; +; Outputs: +; DE: Line Characteristics +; A: Status (0-OK, else error) +; +EZUART_QUERY: + EZ80_UART_QUERY() + ; HL{23:0} := BAUD RATE + ; D = LINE CONTROL BITS + PUSH DE ; SAVE D + + OR A + ; HL24 bit has the baud rate, we need to convert to the 5 bit representation? + TRANSLATE(112, 00000b) ; BAUDRATE=75 (BETWEEN 0 AND 112) + TRANSLATE(187-112, 00001b) ; BAUDRATE=150 (BETWEEN 113 AND 187) + TRANSLATE(262-187, 10000b) ; BAUDRATE=225 (BETWEEN 188 AND 262) + TRANSLATE(375-262, 00010b) ; BAUDRATE=300 (BETWEEN 263 AND 375) + TRANSLATE(525-375, 10001b) ; BAUDRATE=450 (BETWEEN 376 AND 525) + TRANSLATE(750-525, 00011b) ; BAUDRATE=600 (BETWEEN 526 AND 750) + TRANSLATE(1050-750, 10010b) ; BAUDRATE=900 (BETWEEN 751 AND 1050) + TRANSLATE(1500-1050, 00100b) ; BAUDRATE=1200 (BETWEEN 1051 AND 1500) + TRANSLATE(2100-1500, 10011b) ; BAUDRATE=1800 (BETWEEN 1501 AND 2100) + TRANSLATE(3000-2100, 00101b) ; BAUDRATE=2400 (BETWEEN 2101 AND 3000) + TRANSLATE(4200-3000, 10100b) ; BAUDRATE=3600 (BETWEEN 3001 AND 4200) + TRANSLATE(6000-4200, 00110b) ; BAUDRATE=4800 (BETWEEN 4201 AND 6000) + TRANSLATE(8400-6000, 10101b) ; BAUDRATE=7200 (BETWEEN 6001 AND 8400) + TRANSLATE(12000-8400, 00111b) ; BAUDRATE=9600 (BETWEEN 8401 AND 12000) + TRANSLATE(16800-12000, 10110b) ; BAUDRATE=14400 (BETWEEN 12001 AND 16800) + TRANSLATE(24000-16800, 01000b) ; BAUDRATE=19200 (BETWEEN 16801 AND 24000) + TRANSLATE(33600-24000, 10111b) ; BAUDRATE=28800 (BETWEEN 24001 AND 33600) + TRANSLATE(48000-33600, 01001b) ; BAUDRATE=38400 (BETWEEN 33601 AND 48000) + TRANSLATE(67200-48000, 11000b) ; BAUDRATE=57600 (BETWEEN 48001 AND 67200) + TRANSLATE(96000-67200, 01010b) ; BAUDRATE=76800 (BETWEEN 67201 AND 96000) + TRANSLATE(134400-96000, 11001b) ; BAUDRATE=115200 (BETWEEN 96001 AND 134400) + TRANSLATE(192000-134400, 01011b) ; BAUDRATE=153600 (BETWEEN 134401 AND 192000) + TRANSLATE(268800-192000, 11010b) ; BAUDRATE=230400 (BETWEEN 192001 AND 268800) + TRANSLATE(384000-268800, 01100b) ; BAUDRATE=307200 (BETWEEN 268801 AND 384000) + TRANSLATE(537600-384000, 11011b) ; BAUDRATE=460800 (BETWEEN 384001 AND 537600) + TRANSLATE(768000-537600, 01101b) ; BAUDRATE=614400 (BETWEEN 537601 AND 768000) + TRANSLATE(1075200-768000, 11100b) ; BAUDRATE=921600 (BETWEEN 768001 AND 1075200) + TRANSLATE(1536000-1075200, 01110b) ; BAUDRATE=1228800 (BETWEEN 1075201 AND 1536000) + TRANSLATE(2150400-1536000, 11101b) ; BAUDRATE=1843200 (BETWEEN 1536001 AND 2150400) + TRANSLATE(3072000-2150400, 01111b) ; BAUDRATE=2457600 (BETWEEN 2150401 AND 3072000) + TRANSLATE(5529600-3072000, 11110b) ; BAUDRATE=3686400 (BETWEEN 3072001 AND 5529600) + + LD D, 11111b ; BAUDRATE=7372800 (>=5529601) +uart_query_end: + + POP BC ; B = LINE CONTROL BITS + +; Convert from line control settings from: +; +; B{0:1} = Parity (00 -> NONE, 01 -> NONE, 10 -> ODD, 11 -> EVEN) +; B{2} = Stop Bits (0 -> 1, 1 -> 2) +; B{3:4} = Data Bits (00 -> 5, 01 -> 6, 10 -> 7, 11 -> 8) +; B{5:5} = Hardware Flow Control CTS (0 -> OFF, 1 -> ON) +; +; to +; +; E{7} = TODO: DTR +; E{6} = NOT IMPLEMENTED: XON/XOFF Flow Control +; E{5} = NOT SUPPORTED: Stick Parity (set for true) +; E{4} = Even Parity (set for true) +; E{3} = Parity Enable (set for true) +; E{2} = Stop Bits (set for true) +; E{1:0} = Data Bits (5-8 encoded as 0-3) + + XOR A + OR 3 << 3 ; ISOLATE DATA BITS + AND B ; MASK IN DATA BITS + + RRCA ; SHIFT TO BITS 1:0 + RRCA + RRCA + LD H, A ; H{1:0} DATA BITS + + BIT 2, B ; STOP BITS + JR Z, SKIP1 + SET 2, H ; APPLY TO H + +SKIP1: + BIT 1, B ; PARITY ENABLE + JR Z, SKIP2 + SET 3, H ; APPLY TO H + +SKIP2: + BIT 0, B ; EVEN PARITY + JR Z, SKIP3 + SET 4, H ; APPLY TO H + +SKIP3: + LD E, H + XOR A + RET +; +; ### Function 0x06 -- Character I/O Device (CIODEVICE) +; +; Returns device information. The status (A) is a standard HBIOS result +; code. +; +; Outputs +; A: Status (0 - OK) +; C: Device Attribute (0 - RS/232) +; D: Device Type (CIODEV_EZ80UART) +; E: Physical Device Number +; H: Device Mode (0) +; L: Device I/O Base Address - Not Supported (0) +; +EZUART_DEVICE: + LD D, CIODEV_EZ80UART ; D := DEVICE TYPE + LD E, (IY) ; E := PHYSICAL UNIT + LD C, 0 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD HL, 0 ; H := MODE, L := BASE I/O ADDRESS + + XOR A ; SIGNAL SUCCESS + RET + +EZUART_CFG: +EZUART_ID: .DB 0 + + +EZUART_FNTBL: + .DW EZUART_IN + .DW EZUART_OUT + .DW EZUART_IST + .DW EZUART_OST + .DW EZUART_INITDEV + .DW EZUART_QUERY + .DW EZUART_DEVICE +#IF (($ - EZUART_FNTBL) != (CIO_FNCNT * 2)) + .ECHO "*** INVALID EZUART FUNCTION TABLE ***\n" +#ENDIF diff --git a/Source/HBIOS/fd.asm b/Source/HBIOS/fd.asm index 5888f4a1..5edc02d1 100644 --- a/Source/HBIOS/fd.asm +++ b/Source/HBIOS/fd.asm @@ -883,30 +883,43 @@ FD_DETECT: LD (FST_DOR),A ; AND PUT IN SHADOW REGISTER CALL FC_RESETFDC ; RESET FDC - IN A,(FDC_MSR) ; READ MSR + IN_A_NN(FDC_MSR) ; READ MSR ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* CP $D0 ; SPECIAL CASE: DATA PENDING? JR NZ,FD_DETECT1 ; NOPE, MOVE ALONG - IN A,(FDC_DATA) ; SWALLOW THE PENDING DATA + IN_A_NN(FDC_DATA) ; SWALLOW THE PENDING DATA CALL DLY32 ; SETTLE - IN A,(FDC_MSR) ; ... AND REREAD THE STATUS + IN_A_NN(FDC_MSR) ; ... AND REREAD THE STATUS ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* - +; FD_DETECT1: CP $80 ; WE EXPECT $80 - RET Z ; IF SO, ALL DONE - + JR Z,FD_DETECT2 ; IF SO, CONTINUE CHECKING +; ; WE HAVE SEEN AN FDC THAT NEEDS A SECOND READ TO GET ; DESIRED VALUE, SO TRY ONE MORE TIME CALL DLY32 ; WAIT A BIT - IN A,(FDC_MSR) ; ... AND REREAD THE STATUS + IN_A_NN(FDC_MSR) ; ... AND REREAD THE STATUS ;CALL PC_SPACE ; *DEBUG* ;CALL PRTHEXBYTE ; *DEBUG* CP $80 ; CHECK FOR CORRECT VALUE - RET ; RETURN WITH ZF ACCORDING TO RESULT + RET NZ ; RETURN IF FAILED WITH ZF RESET +; +FD_DETECT2: + ; AS A FINAL TEST, WE REREAD THE MSR USING A DIFFERENT + ; OPCODE. THIS SHOULD ELIMINATE ANY FALSE POSITIVES FROM + ; A FLOATING BUS. + CALL DLY32 ; WAIT A BIT + LD C,FDC_MSR ; POINT TO MSR PORT + EZ80_IO + IN A,(C) ; READ USING (C) FORM OF INPUT + ;CALL PC_SPACE ; *DEBUG* + ;CALL PRTHEXBYTE ; *DEBUG* + CP $80 ; CHECK FOR CORRECT VALUE + RET ; RETURN WITH ZF SET CORRECTLY ; ; UNIT INITIALIZATION ; @@ -1212,13 +1225,13 @@ FD_RETRY1: ; FD_START: ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;;#IF (DSKYDSKACT) LD A,4 CALL LDHLIYA CALL HB_DSKACTCHS ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;;#ENDIF +;;;#ENDIF ; LD A,(FCD_FDCRDY) CP TRUE @@ -1452,7 +1465,7 @@ FC_SETUPSPECIFY: ; FC_SETDOR: LD (FST_DOR),A - OUT (FDC_DOR),A + OUT_NN_A(FDC_DOR) #IF (FDTRACE >= 3) CALL NEWLINE LD DE,FDSTR_DOR @@ -1471,7 +1484,7 @@ FC_SETDOR: ; FC_SETDCR LD (FST_DCR),A - OUT (FDC_DCR),A + OUT_NN_A(FDC_DCR) #IF (FDTRACE >= 3) CALL NEWLINE LD DE,FDSTR_DCR @@ -1644,11 +1657,11 @@ FOP: LD B,0 ; B IS LOOP COUNTER FOP_CLR1: CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR - IN A,(FDC_MSR) ; GET STATUS + IN_A_NN(FDC_MSR) ; GET STATUS AND 0C0H ; ISOLATE HIGH NIBBLE, RQM/DIO/NDM/CB CP 0C0H ; LOOKING FOR RQM=1, DIO=1, BYTES PENDING JR NZ,FOP_CMD1 ; NO BYTES PENDING, GO TO NEXT PHASE - IN A,(FDC_DATA) ; GET THE PENDING BYTE AND DISCARD + IN_A_NN(FDC_DATA) ; GET THE PENDING BYTE AND DISCARD DJNZ FOP_CLR1 JP FOP_TOFDCRDY ; OTHERWISE, TIMEOUT ; @@ -1664,7 +1677,7 @@ FOP_CMD2: ; START OF LOOP TO SEND NEXT BYTE FOP_CMD4: ; START OF STATUS LOOP, WAIT FOR FDC TO BE READY FOR BYTE CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR - IN A,(FDC_MSR) ; READ MAIN STATUS REGISTER + IN_A_NN(FDC_MSR) ; READ MAIN STATUS REGISTER AND 0C0H ; ISOLATE RQM/DIO CP 080H ; LOOKING FOR RQM=1, DIO=0 (FDC READY FOR A BYTE) JR Z,FOP_CMD6 ; GOOD, GO TO SEND BYTE @@ -1675,7 +1688,7 @@ FOP_CMD4: ; START OF STATUS LOOP, WAIT FOR FDC TO BE READY FOR BYTE FOP_CMD6: ; SEND NEXT BYTE LD A,(HL) ; POINT TO NEXT BYTE TO SEND - OUT (FDC_DATA),A ; PUSH IT TO FDC + OUT_NN_A(FDC_DATA) ; PUSH IT TO FDC INC HL ; INCREMENT POINTER FOR NEXT TIME DEC D ; DECREMENT NUM BYTES LEFT TO SEND JR NZ,FOP_CMD2 ; DO NEXT BYTE @@ -1706,7 +1719,7 @@ FXR_NULL: LD BC,$7000 ; LOOP COUNTER, $7000 * 16us = ~485ms FXR_NULL1: CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR - IN A,(FDC_MSR) ; GET MSR + IN_A_NN(FDC_MSR) ; GET MSR AND 0E0H ; ISOLATE RQM/DIO/NDM CP 0C0H ; WE WANT RQM=1,DIO=1,NDM=0 (READY TO READ A BYTE W/ EXEC INACTIVE) JP Z,FOP_RES ; EXEC DONE, EXIT CLEAN W/O PULSING TC @@ -1737,13 +1750,13 @@ FXR_READ: LD (FCD_TO),A ; INIT TIMEOUT COUNTER FXRR1 LD C,0 ; OUTER LOOP TIMEOUT COUNTER FXRR2: LD B,0 ; SETUP FOR 256 ITERATIONS -FXRR3: IN A,(FDC_MSR) ; GET MSR +FXRR3: IN_A_NN(FDC_MSR) ; GET MSR CP 0F0H ; WE WANT RQM=1,DIO=1,NDM=1,BUSY=1 (READY TO RECEIVE A BYTE W/ EXEC ACTIVE) JR Z,FXRR4 ; GOT IT, DO BYTE READ DJNZ FXRR3 ; NOT READY, LOOP IF COUNTER NOT ZERO JR FXRR5 ; COUNTER ZERO, GO TO OUTER LOOP LOGIC -FXRR4: IN A,(FDC_DATA) ; GET PENDING BYTE +FXRR4: IN_A_NN(FDC_DATA) ; GET PENDING BYTE LD (HL),A ; STORE IT IN BUFFER INC HL ; INCREMENT THE BUFFER POINTER DEC DE ; DECREMENT BYTE COUNT @@ -1780,13 +1793,13 @@ FXR_WRITE: LD (FCD_TO),A FXRW1 LD C,0 ; OUTER LOOP TIMEOUT COUNTER FXRW2: LD B,0 ; SETUP FOR 256 ITERATIONS -FXRW3: IN A,(FDC_MSR) ; GET MSR +FXRW3: IN_A_NN(FDC_MSR) ; GET MSR CP 0B0H ; WE WANT RQM=1,DIO=0,NDM=1,BUSY=1 (READY TO SEND A BYTE W/ EXEC ACTIVE) JR Z,FXRW4 ; GOT IT, DO BYTE WRITE DJNZ FXRW3 ; NOT READY, LOOP IF COUNTER NOT ZERO JR FXRW5 ; COUNTER ZERO, GO TO OUTER LOOP LOGIC FXRW4: LD A,(HL) ; GET NEXT BYTE TO WRITE - OUT (FDC_DATA),A ; WRITE IT + OUT_NN_A(FDC_DATA) ; WRITE IT INC HL ; INCREMENT THE BUFFER POINTER DEC DE ; DECREMENT LOOP COUNTER LD A,D @@ -1830,7 +1843,7 @@ FOP_RES0: FOP_RES1: CALL DELAY ; FDC MAY TAKE UP TO 12us TO UPDATE MSR - IN A,(FDC_MSR) ; READ MAIN STATUS REGISTER + IN_A_NN(FDC_MSR) ; READ MAIN STATUS REGISTER AND 0F0H ; ISOLATE RQM/DIO/EXEC/BUSY CP 0D0H ; LOOKING FOR RQM/DIO/BUSY JR Z,FOP_RES2 ; GOOD, GO TO RECEIVE BYTE @@ -1848,7 +1861,7 @@ FOP_RES2: ; PROCESS NEXT PENDING BYTE LD A,FRB_SIZ ; GET BUF SIZE CP D ; REACHED MAX? JR Z,FOP_BUFMAX ; HANDLE BUF MAX/EXIT - IN A,(FDC_DATA) ; GET THE BYTE + IN_A_NN(FDC_DATA) ; GET THE BYTE LD (HL),A ; SAVE VALUE INC HL ; INCREMENT BUF POS INC D ; INCREMENT BYTES RECEIVED @@ -2225,4 +2238,4 @@ FCD_FDCRDY .DB 0 ; FALSE MEANS FDC RESET NEEDED FD_DSKBUF .DW 0 FD_CURGEOM .EQU $ ; TWO BYTES BELOW FD_CURSPT .DB 0 ; CURRENT SECTORS PER TRACK -FD_CURHDS .DB 0 ; CURRENT HEADS \ No newline at end of file +FD_CURHDS .DB 0 ; CURRENT HEADS diff --git a/Source/HBIOS/fv.asm b/Source/HBIOS/fv.asm new file mode 100644 index 00000000..57041386 --- /dev/null +++ b/Source/HBIOS/fv.asm @@ -0,0 +1,497 @@ +;====================================================================== +; VIDEO DRIVER FOR FPGA VGA +; http://s100computers.com/My%20System%20Pages/FPGA%20Z80%20SBC/FPGA%20Z80%20SBC.htm +; +; WRITTEN BY: WAYNE WARTHEN -- 9/2/2024 +;====================================================================== +; +; FPGA VGA EXPOSES A FRAME BUFFER STARTING AT $E000. +; PORT $08 CONTROLS ACCESS TO THE FRAME BUFFER. +; - WHEN $01, FRAME BUFFER APPEARS AT $E000 IN CPU ADDRESS SPACE +; - WHEN $00, FRAME BUFFER IS INACCESSIBLE BY CPU +; PORT $C0: SET/GET CURSOR COL +; PORT $C1: SET/GET CURSOR ROW +; PORT $C2: CONTROLS VGA OUTPUT +; BIT 0: BLUE +; BIT 1: GREEN +; BIT 2: RED +; BIT 3: UNUSED? +; BIT 4: CURSOR MODE +; BIT 5: CURSOR BLINK +; BIT 6: CURSOR ENABLE +; BIT 7: VGA SIGNAL OUTPUT ENABLE +; PORT $08: BUFFER SELECT, 1=SELECTED +; +; TODO: +; +;====================================================================== +; FPGA VGA DRIVER - CONSTANTS +;====================================================================== +; +FV_FBUF .EQU $E000 ; ADDRESS OF FRAME BUFFER +FV_BASE .EQU $C0 ; BASE I/O ADDRESS +FV_CCOL .EQU FV_BASE+0 ; CUR COL PORT +FV_CROW .EQU FV_BASE+1 ; CUR ROW PORT +FV_CTL .EQU FV_BASE+2 ; VGA CONTROL PORT +; +FV_BUFCTL .EQU $08 +; +FV_KBDDATA .EQU $03 +FV_KBDST .EQU $02 +; +FV_ROWS .EQU 40 +FV_COLS .EQU 80 +; +TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER +;;;KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT +; + DEVECHO "FV: IO=" + DEVECHO FV_BASE + DEVECHO ", KBD MODE=FV" + DEVECHO ", KBD IO=" + DEVECHO FV_KBDDATA + DEVECHO "\n" +; +;====================================================================== +; FPGA VGA DRIVER - INITIALIZATION +;====================================================================== +; +FV_INIT: + LD IY,FV_IDAT ; POINTER TO INSTANCE DATA +; + CALL NEWLINE ; FORMATTING + PRTS("FV: IO=0x$") + LD A,FV_BASE + CALL PRTHEXBYTE + CALL FV_PROBE ; CHECK FOR HW PRESENCE + JR Z,FV_INIT1 ; CONTINUE IF HW PRESENT +; + ; HARDWARE NOT PRESENT + PRTS(" NOT PRESENT$") + OR $FF ; SIGNAL FAILURE + RET +; +FV_INIT1: + ; RECORD DRIVER ACTIVE + OR $FF + LD (FV_ACTIVE),A + ; DISPLAY CONSOLE DIMENSIONS + LD A,FV_COLS + CALL PC_SPACE + CALL PRTDECB + LD A,'X' + CALL COUT + LD A,FV_ROWS + CALL PRTDECB + PRTS(" TEXT$") + + ; HARDWARE INITIALIZATION + CALL FV_CRTINIT ; SETUP THE FPGA VGA CHIP REGISTERS + CALL FV_VDAINI ; INITIALIZE + ;CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER + + ; ADD OURSELVES TO VDA DISPATCH TABLE + LD BC,FV_FNTBL ; BC := FUNCTION TABLE ADDRESS + LD DE,FV_IDAT ; DE := FPGA VGA INSTANCE DATA PTR + CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED + + ; INITIALIZE EMULATION + LD C,A ; C := ASSIGNED VIDEO DEVICE NUM + LD DE,FV_FNTBL ; DE := FUNCTION TABLE ADDRESS + LD HL,FV_IDAT ; HL := FPGA VGA INSTANCE DATA PTR + CALL TERM_ATTACH ; DO IT + + XOR A ; SIGNAL SUCCESS + RET +; +;====================================================================== +; FPGA VGA DRIVER - VIDEO DISPLAY ADAPTER (VDA) FUNCTIONS +;====================================================================== +; +FV_FNTBL: + .DW FV_VDAINI + .DW FV_VDAQRY + .DW FV_VDARES + .DW FV_VDADEV + .DW FV_VDASCS + .DW FV_VDASCP + .DW FV_VDASAT + .DW FV_VDASCO + .DW FV_VDAWRC + .DW FV_VDAFIL + .DW FV_VDACPY + .DW FV_VDASCR + .DW FV_STAT + .DW FV_FLUSH + .DW FV_READ + .DW FV_VDARDC +#IF (($ - FV_FNTBL) != (VDA_FNCNT * 2)) + .ECHO "*** INVALID FV FUNCTION TABLE ***\n" + !!!!! +#ENDIF + +FV_VDAINI: + ; RESET VDA + CALL FV_VDARES ; RESET VDA + LD HL,0 ; ZERO + LD (FV_POS),HL ; ... TO POSITION + LD A,' ' ; BLANK THE SCREEN + LD DE,FV_ROWS*FV_COLS ; FILL ENTIRE BUFFER + CALL FV_FILL ; DO IT + LD DE,0 ; ROW = 0, COL = 0 + CALL FV_XY ; SEND CURSOR TO TOP LEFT + CALL FV_SHOWCUR ; NOW SHOW THE CURSOR + XOR A ; SIGNAL SUCCESS + RET + +FV_VDAQRY: + LD C,$00 ; MODE ZERO IS ALL WE KNOW + LD D,FV_ROWS ; ROWS + LD E,FV_COLS ; COLS + LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED + XOR A ; SIGNAL SUCCESS + RET + +FV_VDARES: + CALL FV_CRTINIT + XOR A ; SIGNAL SUCCESS + RET + +FV_VDADEV: + LD D,VDADEV_FV ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,FV_BASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET + +FV_VDASCS: + SYSCHKERR(ERR_NOTIMPL) ; NOT IMPLEMENTED (YET) + RET + +FV_VDASCP: + CALL FV_XY ; SET CURSOR POSITION + XOR A ; SIGNAL SUCCESS + RET + +FV_VDASAT: + ; ATTRIBUTES NOT SUPPORTED BY HARDWARE + XOR A + RET + +FV_VDASCO: + ; CHARACTER COLOR NOT SUPPORT BY HARDWARE + XOR A ; SIGNAL SUCCESS + RET ; DONE + +FV_VDAWRC: + LD A,E ; CHARACTER TO WRITE GOES IN A + CALL FV_PUTCHAR ; PUT IT ON THE SCREEN + XOR A ; SIGNAL SUCCESS + RET + +FV_VDAFIL: + LD A,E ; FILL CHARACTER GOES IN A + EX DE,HL ; FILL LENGTH GOES IN DE + CALL FV_FILL ; DO THE FILL + XOR A ; SIGNAL SUCCESS + RET + +FV_VDACPY: + ; LENGTH IN HL, SOURCE ROW/COL IN DE, DEST IS FV_POS + ; BLKCPY USES: HL=SOURCE, DE=DEST, BC=COUNT + PUSH HL ; SAVE LENGTH + CALL FV_XY2IDX ; ROW/COL IN DE -> SOURCE ADR IN HL + POP BC ; RECOVER LENGTH IN BC + LD DE,(FV_POS) ; PUT DEST IN DE + JP FV_BLKCPY ; DO A BLOCK COPY + +FV_VDASCR: + LD A,E ; LOAD E INTO A + OR A ; SET FLAGS + RET Z ; IF ZERO, WE ARE DONE + PUSH DE ; SAVE E + JP M,FV_VDASCR1 ; E IS NEGATIVE, REVERSE SCROLL + CALL FV_SCROLL ; SCROLL FORWARD ONE LINE + POP DE ; RECOVER E + DEC E ; DECREMENT IT + JR FV_VDASCR ; LOOP +FV_VDASCR1: + CALL FV_RSCROLL ; SCROLL REVERSE ONE LINE + POP DE ; RECOVER E + INC E ; INCREMENT IT + JR FV_VDASCR ; LOOP + +FV_STAT: + IN A,(FV_KBDST) ; GET STATUS + AND $01 ; ISOLATE DATA WAITING BIT + JP Z,CIO_IDLE ; NO DATA, EXIT VIA IDLE PROCESS + RET + +FV_FLUSH: + XOR A ; SIGNAL SUCCESS + RET + +FV_READ: + CALL FV_STAT ; GET STATUS + JR Z,FV_READ ; LOOP TILL DATA READY + IN A,(FV_KBDDATA) ; GET BYTE + LD E,A ; PUT IN E FOR RETURN + XOR A ; SIGNAL SUCCESS + RET ; DONE + +;---------------------------------------------------------------------- +; READ VALUE AT CURRENT VDU BUFFER POSITION +; RETURN E = CHARACTER, B = COLOUR, C = ATTRIBUTES +;---------------------------------------------------------------------- + +FV_VDARDC: + CALL FV_GETCHAR ; GET THE CHARACTER AT CUR CUR POS + LD E,A ; PUT IN E + LD BC,0 ; COLOR AND ATTR NOT SUPPORTED + XOR A ; SIGNAL SUCCESS + RET +; +;====================================================================== +; FPGA VGA DRIVER - PRIVATE DRIVER FUNCTIONS +;====================================================================== +; +; +;---------------------------------------------------------------------- +; PROBE FOR FPGA VGA HARDWARE +;---------------------------------------------------------------------- +; +; ON RETURN, ZF SET INDICATES HARDWARE FOUND +; +FV_PROBE: + XOR A ; ASSUME H/W EXISTS + RET +; +;---------------------------------------------------------------------- +; CRTC DISPLAY CONTROLLER CHIP INITIALIZATION +;---------------------------------------------------------------------- +; +FV_CRTINIT: + LD A,%11001111 ; WHITE ON BLACK, CURSOR ON, ENABLE OUTPUT + OUT (FV_CTL),A ; WRITE TO CONTROL PORT + XOR A ; ZERO ACCUM + RET ; DONE +; +;---------------------------------------------------------------------- +; SET CURSOR POSITION TO ROW IN D AND COLUMN IN E +;---------------------------------------------------------------------- +; +FV_XY: + CALL FV_HIDECUR ; HIDE THE CURSOR + PUSH DE ; SAVE NEW POSITION FOR NOW + CALL FV_XY2IDX ; CONVERT ROW/COL TO BUF IDX + LD (FV_POS),HL ; SAVE THE RESULT (DISPLAY POSITION) + POP DE ; RECOVER INCOMING ROW/COL + LD A,D ; GET ROW + OUT (FV_CROW),A ; SET ROW REGISTER + LD A,E ; GET COL + INC A ; 1..79,0 (WHY???) + CP 80 ; COL 80? + JR NZ, FV_XY1 ; SKIP IF NOT + XOR A ; ELSE MAKE IT ZERO! +FV_XY1: + OUT (FV_CCOL),A ; SET COL REGISTER + JP FV_SHOWCUR ; SHOW THE CURSOR AND EXIT +; +;---------------------------------------------------------------------- +; CONVERT XY COORDINATES IN DE INTO LINEAR INDEX IN HL +; D=ROW, E=COL +;---------------------------------------------------------------------- +; +FV_XY2IDX: + LD A,E ; SAVE COLUMN NUMBER IN A + LD H,D ; SET H TO ROW NUMBER + LD E,FV_COLS ; SET E TO ROW LENGTH + CALL MULT8 ; MULTIPLY TO GET ROW OFFSET, H * E = HL, E=0, B=0 + LD E,A ; GET COLUMN BACK + ADD HL,DE ; ADD IT IN + RET ; RETURN +; +;---------------------------------------------------------------------- +; SHOW OR HIDE CURSOR +;---------------------------------------------------------------------- +; +FV_SHOWCUR: + LD A,%11001111 ; CONTROL PORT VALUE + ;;;LD A,%11111111 ; CONTROL PORT VALUE + OUT (FV_CTL),A ; SET REGISTER + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +FV_HIDECUR: + LD A,%11001111 ; CONTROL PORT VALUE + ;;;LD A,%11111111 ; CONTROL PORT VALUE + OUT (FV_CTL),A ; SET REGISTER + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +;---------------------------------------------------------------------- +; (DE)SELECT FRAME BUFFER +;---------------------------------------------------------------------- +; +FV_BUFSEL: + PUSH AF + LD A,$01 + OUT (FV_BUFCTL),A + POP AF + RET +; +FV_BUFDESEL: + PUSH AF + XOR A + OUT (FV_BUFCTL),A + POP AF + RET +; +;---------------------------------------------------------------------- +; WRITE VALUE IN A TO CURRENT VDU BUFFER POSITION, ADVANCE CURSOR +;---------------------------------------------------------------------- +; +FV_PUTCHAR: + ; WRITE CHAR AT CURRENT CURSOR POSITION. + PUSH AF ; SAVE INCOMING CHAR + CALL FV_HIDECUR ; HIDE CURSOR + CALL FV_BUFSEL ; SELECT FRAME BUFFER + POP AF + LD HL,(FV_POS) ; GET CUR BUF POSITION + LD DE,FV_FBUF ; START OF FRAME BUF + ADD HL,DE ; ADD IT IN + LD (HL),A ; PUT THE CHAR +; + ; SET NEW POSITION + LD HL,(FV_POS) ; GET POSITION + INC HL ; BUMP POSITION + LD (FV_POS),HL ; SAVE NEW POSITION +; + ; PUT CUROR IN PLACE + LD DE,FV_COLS ; COLS PER LINE + CALL DIV16 ; BC=ROW, HL=COL + LD D,C + LD E,L + CALL FV_XY + CALL FV_BUFDESEL ; DESELECT FRAME BUFFER + JP FV_SHOWCUR ; SHOW IT AND RETURN +; +;---------------------------------------------------------------------- +; GET CHAR VALUE TO A FROM CURRENT VDU BUFFER POSITION +;---------------------------------------------------------------------- +; +FV_GETCHAR: + XOR A + RET +; +;---------------------------------------------------------------------- +; FILL AREA IN BUFFER WITH SPECIFIED CHARACTER AND CURRENT COLOR/ATTRIBUTE +; STARTING AT THE CURRENT FRAME BUFFER POSITION +; A: FILL CHARACTER +; DE: NUMBER OF CHARACTERS TO FILL +;---------------------------------------------------------------------- +; +FV_FILL: + PUSH AF ; SAVE INCOMING FILL CHAR + CALL FV_HIDECUR ; HIDE CURSOR + CALL FV_BUFSEL ; SELECT BUFFER + LD HL,(FV_POS) ; CUR POS TO HL + LD BC,FV_FBUF ; ADR OF FRAME + ADD HL,BC ; ADD IT IN + POP AF + LD C,A ; FILL CHAR TO C +FV_FILL1: + LD A,D ; CHECK FILL + OR E ; ... COUNTER + JR Z,FV_FILL2 ; DONE IF ZERO + LD (HL),C ; FILL ONE CHAR + INC HL ; BUMP BUF PTR + DEC DE ; DEC FILL COUNTER + JR FV_FILL1 ; LOOP +; +FV_FILL2: + CALL FV_BUFDESEL ; DESELECT BUFFER + JP FV_SHOWCUR ; EXIT VIA SHOW CURSOR +; +;---------------------------------------------------------------------- +; SCROLL ENTIRE SCREEN FORWARD BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +FV_SCROLL: + CALL FV_BUFSEL ; SELECT FRAME BUFFER +; + ; COPY "UP" ONE LINE + LD HL,FV_FBUF + FV_COLS ; FROM SECOND LINE + LD DE,FV_FBUF ; TO FIRST LINE + LD BC,+(FV_ROWS - 1) * FV_COLS ; ALL BUT ONE LINE + LDIR ; DO IT +; + ; FILL LAST LINE OF SCREEN + LD HL,FV_FBUF + ((FV_ROWS - 1) * FV_COLS) ; LAST LINE + LD A,' ' ; FILL CHAR + LD (HL),A ; COPY 1 CHAR + LD DE,FV_FBUF + ((FV_ROWS - 1) * FV_COLS) + 1 ; SECOND POS IN LAST LINE + LD BC,FV_COLS - 1 ; COLS PER LINE - 1 + LDIR ; FILL IT +; + CALL FV_BUFDESEL ; DESELECT FRAME BUFFER + RET ; DONE +; +;---------------------------------------------------------------------- +; REVERSE SCROLL ENTIRE SCREEN BY ONE LINE (CURSOR POSITION UNCHANGED) +;---------------------------------------------------------------------- +; +FV_RSCROLL: + CALL FV_BUFSEL ; SELECT FRAME BUFFER +; + ; COPY "DOWN" ONE LINE + LD HL,FV_FBUF + (FV_COLS * (FV_ROWS - 1)) - 1 ; FROM END OF SECOND TO LAST LINE + LD DE,FV_FBUF + (FV_COLS * FV_ROWS) - 1 ; TO END OF LAST LINE + LD BC,+(FV_ROWS - 1) * FV_COLS ; ALL BUT ONE LINE + LDDR ; DO IT IN REVERSE +; + ; FILL FIRST LINE OF SCREEN + LD HL,FV_FBUF ; FIRST LINE + LD A,' ' ; FILL CHAR + LD (HL),A ; COPY 1 CHAR + LD DE,FV_FBUF + 1 ; SECOND POS IN FIRST LINE + LD BC,FV_COLS - 1 ; COLS PER LINE - 1 + LDIR ; FILL IT +; + CALL FV_BUFDESEL ; DESELECT FRAME BUFFER + RET ; DONE +; +;---------------------------------------------------------------------- +; BLOCK COPY BC BYTES FROM HL TO DE +;---------------------------------------------------------------------- +; +FV_BLKCPY: + + CALL FV_BUFSEL ; SELECT FRAME BUFFER + PUSH BC ; SAVE LENGTH + LD BC,FV_FBUF ; FRAME BUFFER ADR + ADD HL,BC ; ADD TO SOURCE + EX DE,HL ; EXCHANGE + ADD HL,BC ; ADD TO DEST + EX DE,HL ; EXCHANGE + POP BC ; RECOVER LENGTH + LDIR ; LDIR DOES THE COPY + CALL FV_BUFDESEL ; DESELECT FRAME BUFFER + RET ; DONE +; +;================================================================================================== +; FPGA VGA DRIVER - DATA +;================================================================================================== +; +FV_POS .DW 0 ; CURRENT DISPLAY POSITION +FV_ACTIVE .DB FALSE ; FLAG FOR DRIVER ACTIVE +; +;================================================================================================== +; VGA DRIVER - INSTANCE DATA +;================================================================================================== +; +FV_IDAT: + .DB KBDMODE_FV ; FPGA VGA KEYBOARD CONTROLLER + .DB FV_KBDST + .DB FV_KBDDATA diff --git a/Source/HBIOS/gm7303.asm b/Source/HBIOS/gm7303.asm new file mode 100644 index 00000000..732926c0 --- /dev/null +++ b/Source/HBIOS/gm7303.asm @@ -0,0 +1,641 @@ +; +;================================================================================================== +; HARDWARE SUPPORT FOR GENESS MODULES 7303 STD BUS KEYBOARD/GM7303 +; - INCORPORATES HITACHI HD44780 AS 2 X 16 DISPLAY AND 24 KEY HEX KEYPAD +;================================================================================================== +; +; Heavily derived from the lcd.asm driver, but forked because the 7303 card has keyboard +; functionality as well. Eventually will be used as a Z80/180 monitor tool +; +; The GM7303 supports an LCD display while the original has 2 DL1416 starburst displays. +;================================================================================================== +; +; CARD FUNCTIONS: (BASE_IO = 0x30) +; +; 20X2 LCD 0X30 OUTPUT (D0-D7) +; 0X31 OUTPUT (D0 - LCD E) +; (D1 - LCD R/W*) +; (D2 - LCD RS) +; S1 & S2 INPUT 0x30 INPUT (BIT 6,7) +; 8 OUTPUT LEDS 0x30 OUTPUT +; KEYBOARD 0X30 OUTPUT (COLUMN BIT 0-3) +; 0X30 INPUT (ROW BIT 0-5) +; +; GM7303 SCAN CODES ARE ONE BYTE: CCRRRRRR +; BITS 7-6 IDENTFY THE COLUMN OF THE KEY PRESSED +; BITS 5-0 ARE A BITMAP, WITH A BIT OFF TO INDICATE ROW KEY PRESSED +; ROW INPUTS ARE HELD lOW (NOTING I/P OF ROW BUFFER IS INVERTING) +; +; ___Col0_______Col1______Col2_______Col3____ +; Row5| $20 [14] $60 [15] $A0 [16] $E0 [17] +; Row4| $10 [10] $50 [11] $90 [12] $D0 [13] +; Row3| $08 [C] $48 [D] $88 [E] $C8 [F] +; Row2| $04 [8] $44 [9] $84 [A] $C4 [B] +; Row1| $02 [4] $42 [5] $82 [6] $C2 [7] +; Row0| $01 [0] $41 [1] $81 [2] $C1 [3] +; +;=================================================================================================== +; +; Date Change +; 05Sep2024 Initial development - basic init functions +; 06Sep2024 Working - Cleaned out functions that wont be used - TODO - Implement keyboard +; +; +GM7303_DATA .EQU GM7303BASE + 0 ; WRITE +GM7303_CTRL .EQU GM7303BASE + 1 ; WRITE +GM7303_KYBD .EQU GM7303BASE + 0 ; READ/WRITE +; +GM7303_FUNC_CLEAR .EQU $01 ; CLEAR DISPLAY +GM7303_FUNC_HOME .EQU $02 ; HOME CURSOR & REMOVE ALL SHIFTING +GM7303_FUNC_ENTRY .EQU $04 ; SET CUR DIR AND DISPLAY SHIFT +GM7303_FUNC_DISP .EQU $08 ; DISP, CUR, BLINK ON/OFF +GM7303_FUNC_SHIFT .EQU $10 ; MOVE CUR / SHIFT DISP +GM7303_FUNC_SET .EQU $20 ; SET INTERFACE PARAMS +GM7303_FUNC_CGADR .EQU $40 ; SET CGRAM ADRESS +GM7303_FUNC_DDADR .EQU $80 ; SET DDRAM ADDRESS +; + DEVECHO "GM7303: IO=" + DEVECHO GM7303BASE + DEVECHO "\n" +; +; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION +; +GM7303_PREINIT: + +; TEST FOR PRESENCE... + CALL GM7303_DETECT ; PROBE FOR HARDWARE + LD A,(GM7303_PRESENT) ; GET PRESENCE FLAG + OR A ; SET FLAGS + RET Z ; BAIL OUT IF NOT PRESENT + + ; REGISTER DRIVER WITH HBIOS + LD BC,GM7303_DISPATCH + CALL DSKY_SETDISP +; +; INITIALISE LCD + CALL GM7303_RESETLCD ; RESET THE LCD + PUSH HL + LD HL,GM7303_INIT_TBL + LD D,04H ; 4 BYTES TO SEND +NEXT_INIT: + LD A,(HL) ; GET COMMAND + OUT (GM7303_DATA),A ; WRITE TO TO DISPLAY + CALL CMD_STROBE ; COMMAND STROBE + PUSH DE + LD DE,5000/16 ; WAIT >4MS, WE USE 5MS + CALL VDELAY ; DO IT + POP DE + INC HL + DEC D ; (D)=00 -> COMMAND + JR NZ,NEXT_INIT ; NO - DO NEXT INIT COMMAND + POP HL +; +; PUT SOMETHING ON THE DISPLAY + LD DE,GM7303_STR_BAN ; DISPLAY BANNER + CALL GM7303_OUTDS + +; SECOND LINE + LD HL,$0100 ; ROW 2, COL 0 + CALL GM7303_GOTORC + LD DE,GM7303_STR_CFG ; DISPLAY CONFIG + CALL GM7303_OUTDS + + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +; POST CONSOLE INITIALIZATION +; +GM7303_INIT: + CALL NEWLINE ; FORMATTING + PRTS("GM7303: IO=$") + LD A,GM7303BASE + CALL PRTHEXBYTE +; + LD A,(GM7303_PRESENT) ; GET PRESENCE FLAG + OR A ; SET FLAGS + JR Z,GM7303_INIT1 ; HANDLE NOT PRESENT + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +GM7303_INIT1: + PRTS(" NOT PRESENT$") + OR $FF + RET + + +GM7303_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,GM7303_RESET ; RESET DSKY HARDWARE + DEC A + JP Z,GM7303_STAT ; GET KEYPAD STATUS + DEC A + JP Z,GM7303_GETKEY ; READ A KEY FROM THE KEYPAD + DEC A + JP Z,GM7303_SHOWHEX ; DISPLAY A 32-BIT BINARY VALUE IN HEX + DEC A + ;;;JP Z,GM7303_SHOWASCII ; DISPLAY ASCII TEXT + JP Z,GM7303_SHOWSEG ; DISPLAY SEGMENT MAPPED TEXT + DEC A + JP Z,GM7303_KEYLEDS ; SET KEYPAD LEDS + DEC A + JP Z,GM7303_STATLED ; SET STATUS LED + DEC A + JP Z,GM7303_BEEP ; BEEP DSKY SPEAKER + DEC A + JP Z,GM7303_DEVICE ; DEVICE INFO + DEC A + JP Z,GM7303_MESSAGE ; HANDLE MESSAGE + DEC A + JP Z,GM7303_EVENT ; HANDLE EVENT + SYSCHKERR(ERR_NOFUNC) + RET + +; +; RESET 7303 -- CLEAR AND HOME LCD +; +GM7303_RESET: +GM7303_CLEAR: + LD A,GM7303_FUNC_CLEAR ; CLEAR SCREEN COMMAND + CALL GM7303_COMMAND ; SEND IT + JP GM7303_CLEARDELAY ; LONG DELAY FOR CLEAR - RETURN HAPPENS IN STROBE ROUTINE +; +; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS +; +GM7303_STAT: + LD A,(GM7303_KEYBUF) ; GET CURRENT BUF VAL + CP $FF ; $FF MEANS WE ARE WAITING FOR PREV KEY TO BE RELEASED + JR Z,GM7303_STAT1 ; CHECK FOR PREV KEY RELEASE + OR A ; DO WE HAVE A SCAN CODE BUFFERED ALREADY? + RET NZ ; IF SO, WE ARE DONE + JR GM7303_STAT2 ; OTHERWISE, DO KEY CHECK + +GM7303_STAT1: + ; WAITING FOR PREVIOUS KEY RELEASE + CALL GM7303_KEY ; SCAN + JR Z,GM7303_STAT2 ; IF ZERO, PREV KEY RELEASED, CONTINUE + XOR A ; SIGNAL NO KEY PRESSED + RET ; AND DONE + +GM7303_STAT2: + CALL GM7303_KEY ; SCAN + LD (GM7303_KEYBUF),A ; SAVE RESULT + RET ; RETURN WITH ZF SET APPROPRIATELY +; +; +; WAIT FOR A GM7303 KEYPRESS AND RETURN +; +GM7303_GETKEY: + CALL GM7303_STAT ; CHECK STATUS + JR Z,GM7303_GETKEY ; LOOP IF NOTHING READY + LD A,(GM7303_KEYBUF) + LD B,24 ; SIZE OF DECODE TABLE + LD C,0 ; INDEX + LD HL,GM7303_KEYMAP ; POINT TO BEGINNING OF TABLE +GM7303_GETKEY1: + CP (HL) ; MATCH? + JR Z,GM7303_GETKEY2 ; FOUND, DONE + INC HL + INC C ; BUMP INDEX + DJNZ GM7303_GETKEY1 ; LOOP UNTIL EOT +GM7303_GETKEY1A: + LD A,$FF ; NOT FOUND ERR, RETURN $FF + RET +GM7303_GETKEY2: + LD A,$FF ; SET KEY BUF TO $FF + LD (GM7303_KEYBUF),A ; DO IT + ; RETURN THE INDEX POSITION WHERE THE SCAN CODE WAS FOUND + LD E,C ; RETURN INDEX VALUE + XOR A ; SIGNAL SUCCESS + RET +; +; DISPLAY HEX VALUE FROM DE:HL +; To be written <--- DRJ + +GM7303_SHOWHEX: + RET + + +GM7303_DISP_2N_HEX: ; DISPLAY N 2HEX VALUES FROM + CALL GM7303_DISP_2HEX ; MEMORY ON 2N DISPLAYS + DEC C + JP NZ,GM7303_DISP_2N_HEX + RET + +GM7303_DISP_2HEX: ; DISPLAY 2 HEX CHARACTERS IN MEMORY LOCATIONS + LD D,(HL) ; (HL), IN DISPLAY POSITIONS (E),(E)+1 + CALL GM7303_DISP_HEX + INC E + LD A,(HL) + RRC A + RRC A + RRC A + RRC A + LD D,A + CALL GM7303_DISP_HEX + INC E + INC HL ; (E)EXIT=(E)+2 (WAS INX H) + RET ; (HL)EXIT=(HL)+1 + +GM7303_DISP_HEX: + LD A,D ; DISPLAY LEAST SIGNIFICANT HEX DIGIT IN REGISTER D + CALL GM7303_HEX_ASC + LD D,A + JP GM7303_OUTD + +GM7303_HEX_ASC: + AND $0F ; CONVERT LSD IN REG A TO ASCII + CP $0A ; IS A>9 + JP C,GM7303_NUM_TEST + ADD A,$B7 ; YES - CONVERT TO C1-C6 + RET ; EXIT +GM7303_NUM_TEST: + ADD A,$B0 ; NO, CONVERT TO B0-B9 + RET ; EXIT + +GM7303_SHOWSEG: + ; CONVERT FROM SEG ALPHABET TO DISPLAY CODES + LD B,8 ; DO FOR ALL CHARS + LD DE,GM7303_BUF ; DESTINATION BUFFER +GM7303_SHOWSEG1: + LD A,(HL) ; GET SOURCE VALUE + INC HL ; BUMP FOR NEXT TIME + AND $7F ; REMOVE HI BIT (DP) + PUSH HL ; SAVE IT + LD HL,GM7303_SEGMAP ; POINT TO XLAT MAP + CALL ADDHLA ; OFFSET BY VALUE + LD A,(HL) ; GET NEW VALUE + LD (DE),A ; SAVE IT + INC DE ; BUMP PTR + POP HL ; RESTORE SOURCE PTR + DJNZ GM7303_SHOWSEG1 ; LOOP TILL DONE +; + ; DISPLAY CONVERTED BUFFER + LD HL,GM7303_BUF ; BUFFER + ; FALL THRU + + +GM7303_SHOWASCII: ; DISPLAY AN ASCII STRING ON THE GM7303 DISPLAY + ; ENTER WITH HL- DATA TO PRINT (NULL TERMINATED) + PUSH HL ; SAVE THE POINTER TO THE STRING + CALL GM7303_CLEAR ; CLEAR THE DISPLAY + POP DE ; OUTDS EXPECTS STRING POINTER IN DE + CALL GM7303_OUTDS + XOR A ; RETURN SUCCESS + RET +; +; +; +GM7303_KEYLEDS: +GM7303_STATLED: +GM7303_BEEP: + XOR A ; UNSUPPORTED ROUTINES - PRETEND SUCCESS + RET +; +; DEVICE INFORMATION +; +GM7303_DEVICE: + LD D,DSKYDEV_GM7303 ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL DEVICE NUMBER + LD H,0 ; H := MODE + LD L,GM7303BASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET +; +; MESSAGE HANDLER +; +GM7303_MESSAGE: + LD A,C ; GET MESSAGE ID + ADD A,A ; WORD OFFSET + LD HL,GM7303_MSGTBL ; START OF MESSAGE TABLE + CALL ADDHLA ; ADD OFFSET + LD A,(HL) ; SAVE LSB + INC HL ; BUMP TO MSB + LD H,(HL) ; GET MSB + LD L,A ; GET LSB + JR GM7303_SHOWASCII ; SHOW MESSAGE AND RETURN +; +; EVENT HANDLER +; +GM7303_EVENT: + LD A,C ; EVENT ID + OR A ; 0=CPUSPD + JR Z,GM7303_EVT_CPUSPD ; HANDLE CPU SPD CHANGE + DEC A ; 1=DSKACT + JR Z,GM7303_EVT_DSKACT ; HANDLE DISK ACTIVITY + XOR A + RET +; +; CPU SPEED CHANGE +; +GM7303_EVT_CPUSPD: + XOR A + RET +; +; DISK ACTIVITY +; +; CALLED FROM HBIOS RIGHT BEFORE A DISK ACCESS +; +; FORMAT: "Dsk99 R:12345678" +; 0123456789012345 +; +GM7303_EVT_DSKACT: +; + PUSH HL + LD HL,$0100 ; ROW 1, COL 0 + CALL GM7303_GOTORC ; SET DISPLAY ADDRESS + POP HL +; + LD DE,GM7303_STR_IO ; PREFIX + CALL GM7303_OUTDS ; SEND TO DISPLAY (COLS 0-5) + + LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM + CALL GM7303_DSKACT_BYTE ; SEND TO DISPLAY (COLS 6-7) HEX??? +; + LD A,' ' ; SEPARATOR + CALL GM7303_OUTD ; SEND TO DISPLAY (COL 8) +; + LD A,(HB_DSKFUNC) ; ACTIVE DISK FUNCTION + CP BF_DIOWRITE ; WRITE? + LD A,'W' ; ASSUME WRITE + JR Z,GM7303_DSKACT0 ; GO AHEAD + LD A,'R' ; OTHERWISE READ +GM7303_DSKACT0: + CALL GM7303_OUTD ; SEND CHAR (COL 10) + + LD A,':' ; SEPARATOR + CALL GM7303_OUTD ; SEND TO DISPLAY (COL 11) +; + LD HL,HB_DSKADR+3 ; INPUT POINTER + LD B,4 ; DO 4 BYTES +; +GM7303_DSKACT1: + LD A,(HL) ; GET BYTE + CALL GM7303_DSKACT_BYTE ; SEND TO DISPLAY (COLS 12-19) + DEC HL ; DEC PTR + DJNZ GM7303_DSKACT1 ; DO ALL 4 BYTES +; +GM7303_DSKACT_Z: + RET +;; +GM7303_DSKACT_BYTE: + PUSH AF ; SAVE BYTE + RRCA ; DO TOP NIBBLE FIRST + RRCA + RRCA + RRCA + CALL HEXCONV ; CONVERT NIBBLE TO ASCII + CALL GM7303_OUTD ; SEND TO DISPLAY + POP AF ; RECOVER CURRENT BYTE + CALL HEXCONV ; CONVERT NIBBLE TO ASCII + CALL GM7303_OUTD ; SEND TO DISPLAY + RET ; DONE + +; +;__GM7303_KEY___________________________________________________________________________________________ +; +; CHECK FOR KEY PRESS W/ DEBOUNCE +;____________________________________________________________________________________________________ +; +GM7303_KEY: + CALL GM7303_SCAN ; INITIAL KEY PRESS SCAN + LD E,A ; SAVE INITIAL SCAN VALUE +GM7303_KEY1: + ; MAX BOUNCE TIME FOR OMRON B3F IS 3MS + PUSH DE ; SAVE DE + LD DE,300 ; ~3MS DELAY + CALL VDELAY ; DO IT + CALL GM7303_SCAN ; REPEAT SCAN + POP DE ; RESTORE DE + RET Z ; IF NOTHING PRESSED, DONE + CP E ; SAME? + JR GM7303_KEY2 ; YES, READY TO RETURN + LD E,A ; OTHERWISE, SAVE NEW SCAN VAL + JR GM7303_KEY1 ; AND LOOP UNTIL STABLE VALUE +GM7303_KEY2: + OR A ; SET FLAGS BASED ON VALUE + RET ; AND DONE +; +;__GM7303_SCAN__________________________________________________________________________________________ +; +; SCAN KEYPAD AND RETURN RAW SCAN CODE (RETURNS ZERO IF NO KEY PRESSED) +;____________________________________________________________________________________________________ +; +GM7303_SCAN: + LD B,4 ; 4 COLUMNS + LD C,$01 ; FIRST COLUMN + LD E,0 ; INITIAL COL ID +GM7303_SCAN1: + LD A,C ; COL TO A + AND $0F ; DON'T CHANGE THE LCD CONTROL BITS + OUT (GM7303_KYBD),A ; ACTIVATE COL + IN A,(GM7303_KYBD) ; READ ROW BITS + AND $3F ; MASK, WE ONLY HAVE 6 ROWS, + ; OTHERS USED FOR STATUS SWITCHES + JR NZ,GM7303_SCAN2 ; IF NOT ZERO, GOT SOMETHING + RLC C ; NEXT COL + INC E ; BUMP COL ID + DJNZ GM7303_SCAN1 ; LOOP THROUGH ALL COLS + XOR A ; NOTHING FOUND, RETURN ZERO + RET +GM7303_SCAN2: + RRC E ; MOVE COL ID + RRC E ; ... TO HIGH BITS 6 & 7 + OR E ; COMBINE WITH ROW + RET + +; +;_ _TABLE_____________________________________________________________________________________________________________ +; +GM7303_KEYMAP: + ; POS $00 $01 $02 $03 $04 $05 $06 $07 + ; KEY [0] [1] [2] [3] [4] [5] [6] [7] + .DB $01, $41, $81, $C1, $02, $42, $82, $C2 +; + ; POS $08 $09 $0A $0B $0C $0D $0E $0F + ; KEY [8] [9] [A] [B] [C] [D] [E] [F] + .DB $04, $44, $84, $C4, $08, $48, $88, $C8 +; + ; POS $10 $11 $12 $13 $14 $15 $16 $17 + ; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO] + .DB $10, $50, $90, $D0, $20, $60, $A0, $E0 + + + +; DETECT PRESENCE OF GM7303 CONTROLLER +; WE CAN'T USE CONTROLLER RAM AS THE GM7303 DOES NOT SUPPORT LCD READS +; SIMPLY TEST FOR THE EXISTANCE OF BUS PULLDOWN AT THE SWITCH PORT +; +GM7303_DETECT: + IN A,(GM7303_DATA) ; GET VALUE OF DATA INPUTS + CP 00 ; GM7303 PULLS DATA TO GROUND + JR Z,GM7303_AVAILABLE +GM7303_MISSING: + LD A,00 + LD (GM7303_PRESENT),A + RET +GM7303_AVAILABLE: + LD A,$FF + LD (GM7303_PRESENT),A + RET +; +; DELAY ROUTINE - SHORT +; +GM7303_DELAY: + PUSH AF + PUSH DE + LD DE,3 ; WAIT PERIOD + CALL VDELAY ; DO IT + POP DE + POP AF + RET +; +; CLEAR DELAY ROUTINE - LONG +; +GM7303_CLEARDELAY: + PUSH AF + PUSH DE + LD DE,140 ; WAIT PERIOD + CALL VDELAY ; DO IT + POP DE + POP AF + RET + + +CMD_STROBE: ; Send a command to the LCD + LD A,01H ; (A) = (X,X,X,X,X,RS,R/W*, E) + ; SET R/W* LINE low (BIT 1=0) + ; SET RS line LOW FOR COMMAND (BIT 2=0) + ; SET ENABLE LINE HIGH (BIT 0=1) + ; CARRY ON THROUGH THE STROBE ROUTINE +STROBE: + OR 01H ; SET ENABLE LINE HIGH (BIT 0=1) + OUT (GM7303_CTRL),A + CALL GM7303_DELAY + + XOR 01H ; SET ENABLE LINE LOW (BIT 0=0) + OUT (GM7303_CTRL),A + CALL GM7303_DELAY + RET ; EXIT + +GM7303_OUTD: ; OUTPUT ASCII CHARACTER TO LCD DISPLAY + ; CHAR IN A + AND 07FH + OUT (GM7303_DATA),A ; OUTPUT TO THE DATA PORT + ; AND STROBE IT IN +DATA_STROBE: + LD A,04H ; SET R/W* LINE low (BIT 1=0) + ; SET RS line HIGH FOR DATA (BIT 2=1) + ; (A) = (X,X,X,X,X,RS,R/W*, E) + JP STROBE ; DO THE STROBE + ; RETURN THROUGH THE STROBE ROUTINE + +GM7303_COMMAND: ; OUTPUT COMMAND TO 7303 MODULE LCD + OUT (GM7303_DATA),A ; WRITE TO TO DISPLAY + JP CMD_STROBE ; COMMAND STROBE (STROBE ROUTING LETS US RETURN) + +; SEND DATA STRING +; DE=STRING ADDRESS, NULL TERMINATED +; +GM7303_OUTDS: + LD A,(DE) ; NEXT BYTE TO SEND + OR A ; SET FLAGS + RET Z ; DONE WHEN NULL REACHED + INC DE ; BUMP POINTER + CALL GM7303_OUTD ; SEND IT + JR GM7303_OUTDS ; LOOP AS NEEDED +; +; GOTO ROW(H),COL(L) +; +GM7303_GOTORC: + PUSH HL ; SAVE INCOMING + LD A,H ; ROW # TO A + LD HL,GM7303_ROWS ; POINT TO ROWS TABLE + CALL ADDHLA ; INDEX TO ROW ENTRY + LD A,(HL) ; GET ROW START + POP HL ; RECOVER INCOMING + ADD A,L ; ADD COLUMN + ADD A,GM7303_FUNC_DDADR ; ADD SET DDRAM COMMAND + JR GM7303_COMMAND ; AND SEND IT +; + +; LCD CONTROLLER MANUAL RESET METHOD +; +GM7303_RESETLCD: + LD A,GM7303_FUNC_SET | %11000 ; 8 BIT INTERFACE, COMMAND MODE, 2 LINES + OUT (GM7303_DATA),A + LD A,01 ; SET ENABLE LINE HIGH (BIT 0=1) + OUT (GM7303_CTRL),A + LD DE,5000/16 ; WAIT >40MS, WE USE 50MS + CALL VDELAY ; DO IT + LD A,00 ; SET ENABLE LINE LOW (BIT 0=0) + OUT (GM7303_CTRL),A + + LD A,01 ; SET ENABLE LINE HIGH (BIT 0=1) + OUT (GM7303_CTRL),A + LD DE,500/16 ; WAIT >4MS, WE USE 5MS + CALL VDELAY ; DO IT + LD A,00 ; SET ENABLE LINE LOW (BIT 0=0) + OUT (GM7303_CTRL),A + + LD A,01 ; SET ENABLE LINE HIGH (BIT 0=1) + OUT (GM7303_CTRL),A + LD DE,500/16 ; WAIT >4MS, WE USE 5MS + CALL VDELAY ; DO IT + LD A,00 ; SET ENABLE LINE LOW (BIT 0=0) + OUT (GM7303_CTRL),A + RET + +; +; DATA STORAGE +; +GM7303_PRESENT .DB 0 ; NON-ZERO WHEN HARDWARE DETECTED +; +GM7303_BUF .FILL 8 ; USED BY SHOWSEG + .DB 0 ; NULL TERMINATOR FOR ABOVE +; +; KBD WORKING STORAGE +; +GM7303_KEYBUF .DB 0 +; +; +GM7303_ROWS .DB $00,$40 ; ROW START INDEX FOR 2 LINE DISPLAY +; +GM7303_INIT_TBL: ; TABLE OF INITIALISATION COMMANDS FOR THE LCD + .DB 38H ; 8 BIT OPERATION, 2 LINE DISPLAY, 8X5 FONT + .DB 0EH ; TURN ON DISPLAY, CURSOR AND BLINK + .DB 06H ; SET CURSOR MOVE FROM LEFT TO RIGHT + .DB 01H ; CLEAR DISPLAY +; +GM7303_STR_BAN .DB "RomWBW ", BIOSVER, 0 +GM7303_STR_CFG .DB "Build:", CONFIG, 0 +GM7303_STR_IO .DB "Dsk", 0 +; +GM7303_SEGMAP: +; + ; POS $00 $01 $02 $03 $04 $05 $06 $07 + ; GLYPH '0' '1' '2' '3' '4' '5' '6' '7' + .DB "01234567" +; + ; POS $08 $09 $0A $0B $0C $0D $0E $0F + ; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' + .DB "89ABCDEF" +; + ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A + ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' + .DB " -.PortAdrG" +; +GM7303_MSGTBL: + .DW GM7303_MSG_LDR_SEL + .DW GM7303_MSG_LDR_BOOT + .DW GM7303_MSG_LDR_LOAD + .DW GM7303_MSG_LDR_GO + .DW GM7303_MSG_MON_RDY + .DW GM7303_MSG_MON_BOOT +; +GM7303_MSG_LDR_SEL .DB "Ready",0 +GM7303_MSG_LDR_BOOT .DB "Boot...",0 +GM7303_MSG_LDR_LOAD .DB "Load...",0 +GM7303_MSG_LDR_GO .DB "Go...",0 +GM7303_MSG_MON_RDY .DB "-CPU UP-",0 +GM7303_MSG_MON_BOOT .DB "Boot!",0 diff --git a/Source/HBIOS/h8p.asm b/Source/HBIOS/h8p.asm index 234283f5..0996b5b3 100644 --- a/Source/HBIOS/h8p.asm +++ b/Source/HBIOS/h8p.asm @@ -12,8 +12,31 @@ ; +--10--+ 80 ; ; - DEVECHO "H8P: IO=??" - ;DEVECHO 0 +H8PKEYNONE .EQU $FF ; NONE +H8PKEY0 .EQU $FE +H8PKEY1 .EQU $FC +H8PKEY2 .EQU $FA +H8PKEY3 .EQU $F8 +H8PKEY4 .EQU $F6 +H8PKEY5 .EQU $F4 +H8PKEY6 .EQU $F2 +H8PKEY7 .EQU $F0 +H8PKEY8 .EQU $EF +H8PKEY9 .EQU $CF +H8PKEYPLUS .EQU $AF ; PLUS +H8PKEYMINUS .EQU $8F ; MINUS +H8PKEYMUL .EQU $6F ; MULTIPLY +H8PKEYDIV .EQU $4F ; DIVIDE +H8PKEYNUM .EQU $2F ; NUMBER +H8PKEYDOT .EQU $0F ; DOT +; +H8P_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B FOR HEATH COMPATIBILITY +H8P_SPEED .EQU $FFEC ; SPEED CONTROL VALUE IS STORED HERE +H8P_SPDIO .EQU $30 +H8FPIO .EQU $F0 +; + DEVECHO "H8P: IO=" + DEVECHO H8FPIO DEVECHO "\n" ; ;__H8P_PREINIT_______________________________________________________________________________________ @@ -24,144 +47,928 @@ ; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION ; H8P_PREINIT: - LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET? - OR A ; SET FLAGS - RET NZ ; IF ALREADY ACTIVE, ABORT -; - ; REGISTER DRIVER WITH HBIOS - LD BC,H8P_DISPATCH - CALL DSKY_SETDISP + ; HEATH H8 PLATFORM IMPLEMENTS A CPU SPEED DIVISOR AS SET BY THE + ; 2 LS BITS OF PORT H8PSPDIO. THE OSCILLATOR IS NORMALLY 16MHZ. + ; 0=FULL (16MHZ), 1=1/2 (8MHZ), 2=1/4 (4 MHZ), 3=1/8 (2 MHZ) + ; FOR BOOT, WE SET THE DIVISOR TO HALF (8MHZ)WHICH IS THE FASTEST + ; SPEED WE CAN USE THAT STILL ENSURES ALL HARDWARE CAN BE DETECTED. + ; E.G., MSX BOARD MAXES OUT AT 8MHZ. + LD A,$01 ; 8 MHZ OPERATION + OUT (H8P_SPDIO),A ; IMPLEMENT IT + LD (H8P_SPEED),A ; UPDATE FP SHADOW +; + ; HOOK INTERRUTPS FOR FRONT PANEL OPERATION + LD HL,H8P_INTR + CALL HB_ADDIM1 ; RET ; ;__H8P_INIT__________________________________________________________________________________________ ; -; DISPLAY DSKY INFO ON ROMWBW CONSOLE +; DISPLAY H8 FRONT PANEL INFO ON ROMWBW CONSOLE ;____________________________________________________________________________________________________ ; H8P_INIT: CALL NEWLINE ; FORMATTING - PRTS("H8P:$") ; DRIVER TAG + PRTS("H8FP:$") ; FORMATTING +; + PRTS(" IO=0x$") ; FORMATTING + LD A,H8FPIO ; GET BASE PORT + CALL PRTHEXBYTE ; PRINT BASE PORT ; RET ; DONE ; -; DSKY DEVICE FUNCTION DISPATCH ENTRY -; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR -; B: FUNCTION (IN) -; -H8P_DISPATCH: - LD A,B ; GET REQUESTED FUNCTION - AND $0F ; ISOLATE SUB-FUNCTION - JP Z,H8P_RESET ; RESET DSKY HARDWARE - DEC A - JP Z,H8P_STAT ; GET KEYPAD STATUS - DEC A - JP Z,H8P_GETKEY ; READ A KEY FROM THE KEYPAD - DEC A - JP Z,H8P_SHOWHEX ; DISPLAY A 32-BIT BINARY VALUE IN HEX - DEC A - JP Z,H8P_SHOWSEG ; DISPLAY SEGMENTS - DEC A - JP Z,H8P_KEYLEDS ; SET KEYPAD LEDS - DEC A - JP Z,H8P_STATLED ; SET STATUS LED - DEC A - JP Z,H8P_BEEP ; BEEP DSKY SPEAKER - DEC A - JP Z,H8P_DEVICE ; DEVICE INFO - SYSCHKERR(ERR_NOFUNC) - RET -; -; RESET DSKY -- CLEAR DISPLAY AND KEYPAD FIFO -; -H8P_RESET: - XOR A ; SIGNAL SUCCESS +; H8 FRONT PANEL INTERRUPT +; +H8P_INTR: + LD (H8P_BCVAL),BC + LD (H8P_DEVAL),DE + LD (H8P_HLVAL),HL + LD HL,(H8P_TICCNT) ; 2MS TIC COUNTER + INC HL + LD (H8P_TICCNT),HL + CALL H8P_TIMER ; UP TIMER + CALL H8P_STAT ; CHECK KEYPAD PRESS + CALL H8P_GETSEGIDX ; SEGMENT INDEX IN (C) + CALL H8P_HORN + OR C + OUT (H8FPIO),A ; CLEAR INTERRUPT AND SET LED IDX + LD C,A + LD A,(H8P_FPENA) + OR A + LD A,$FF + CALL NZ,H8P_GETSEGPAT + OUT (H8FPIO+1),A ; SET LED PATTERN +; + CALL H8P_KEYPAD + LD A,(H8P_STTIMER) + INC A + AND $1F ; UPDATE LEDS EVERY 32 TICKS + LD (H8P_STTIMER),A + CALL Z,H8P_HDLSTATE + LD A,(H8P_HBTICK) ; ROMWBW TIMER + INC A + LD (H8P_HBTICK),A + CP 10 + RET NZ + CALL HB_TICK + XOR A + LD (H8P_HBTICK),A + INC A ; INTERRUPT HANDLED + RET +; +; HANDLE FRONT PANEL SPEAKER SOUNDS +; +H8P_HORN: + LD HL,(H8P_HORNDUR) + LD A,H + OR L + LD A,$D0 ; HORN OFF + RET Z + DEC HL + LD (H8P_HORNDUR),HL + LD A,$50 ; HORN ON + RET +; +; HANDLE UP-TIME TIMER +; +H8P_TIMER: + LD HL,(H8P_ONESEC) + DEC HL + LD (H8P_ONESEC),HL + LD A,H + OR L + RET NZ + LD HL,(H8P_UPTIME) + INC HL + LD (H8P_UPTIME),HL + LD HL,500 + LD (H8P_ONESEC),HL + CALL H8P_TIMER1 + LD A,(H8P_STATE) + OR A + CALL Z,H8P_TIMER2 + RET +; ADVANCE DIGITS +H8P_TIMER1: + LD C,9 + LD HL,H8P_UPTDIG+8 + CALL H8P_ADVDIG + RET +; SHOW DIGITS +H8P_TIMER2: + LD DE,H8P_UPTDIG+8 + LD HL,H8P_SEGBUF+8 + LD C,9 +H8P_TIMER3: + PUSH BC + PUSH HL + LD A,C + CP 7 + JR Z,H8P_TIMER4 + CP 4 + JR Z,H8P_TIMER4 + JR H8P_TIMER5 +H8P_TIMER4: + LD A,$80 + JR H8P_TIMER6 +H8P_TIMER5: + LD HL,H8P_DIGMAP + LD A,(DE) + LD C,A + LD B,0 + ADD HL,BC + LD A,(HL) +H8P_TIMER6: + POP HL + LD (HL),A + DEC HL + DEC DE + POP BC + DEC C + JR NZ,H8P_TIMER3 + RET +H8P_ADVDIG: + LD A,(HL) ; 000.000.00X + INC A + LD (HL),A + CP 10 ; 0-9 + RET NZ + LD (HL),0 + DEC HL + LD A,(HL) ; 000.000.0X0 + INC A + LD (HL),A + CP 6 ; 0-5 + RET NZ + LD (HL),0 + DEC HL + DEC HL + LD A,(HL) ; 000.00X.000 + INC A + LD (HL),A + CP 10 ; 0-9 + RET NZ + LD (HL),0 + DEC HL + LD A,(HL) ; 000.0X0.000 + INC A + LD (HL),A + CP 6 ; 0-5 + RET NZ + LD (HL),0 + DEC HL + DEC HL + LD A,(HL) ; 00X.000.000 + INC A + LD (HL),A + CP 10 ; 0-9 + RET NZ + LD (HL),0 + DEC HL + LD A,(HL) ; 0X0.000.000 + INC A + LD (HL),A + CP 10 ; 0-9 + RET NZ + LD (HL),0 + DEC HL + LD A,(HL) ; X00.000.000 + INC A + LD (HL),A + CP 10 ; 0-9 + RET NZ + LD (HL),0 RET ; -; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS +; CHECK FOR KEY PRESS, SAVE RAW VALUE ; H8P_STAT: - XOR A ; ZERO KEYS PENDING (FOR NOW) + IN A,(H8FPIO) + LD (H8P_KEYBUF),A RET ; -; WAIT FOR A DSKY KEYPRESS AND RETURN +; GET KEY AND RESET KEYBUF ; H8P_GETKEY: - ; PUT KEY VALUE IN REGISTER E - XOR A ; SIGNAL SUCCESS + LD A,(H8P_KEYBUF) RET ; -; DISPLAY HEX VALUE FROM DE:HL +H8P_KEYPAD: + CALL H8P_GETKEY + LD C,A + LD A,(H8P_LSTKEY) + CP C + RET Z + LD A,C + LD (H8P_LSTKEY),A + CP H8PKEYNONE + RET Z + LD HL,$04 + LD (H8P_HORNDUR),HL + CP H8PKEYDIV ; / KEY (ALTER) + JP Z,H8P_KEYPADALT + CP H8PKEYMUL ; * KEY (CANCEL) + JP Z,H8P_KEYPADCAN + CP H8PKEYNUM ; MEM KEY + JP Z,H8P_KEYPADMEM + CP H8PKEYDOT ; REG KEY + JP Z,H8P_KEYPADREG + CP H8PKEY9 + JP Z,H8P_KEYPAD9 + CP H8PKEY8 + JP Z,H8P_KEYPAD8 + CP H8PKEY7 + JP Z,H8P_KEYPAD7 + CP H8PKEY6 + JP Z,H8P_KEYPAD6 + CP H8PKEY5 + JP Z,H8P_KEYPAD5 + CP H8PKEY4 + JP Z,H8P_KEYPAD4 + CP H8PKEY3 + JP Z,H8P_KEYPAD3 + CP H8PKEY2 + JP Z,H8P_KEYPAD2 + CP H8PKEY1 + JP Z,H8P_KEYPAD1 + CP H8PKEY0 + JP Z,H8P_KEYPAD0 + CP H8PKEYPLUS + JP Z,H8P_KEYPADPLUS + CP H8PKEYMINUS + JP Z,H8P_KEYPADMINUS + RET +; RESET TIMER +H8P_KEYPADALT: + LD A,(H8P_FPENA) + OR A + RET Z + LD A,(H8P_STATE) + OR A + RET NZ + XOR A + LD C,9 + LD HL,H8P_UPTDIG +H8P_KEYPADALTL: + LD (HL),A + INC HL + DEC C + JR NZ,H8P_KEYPADALTL + RET +; ENABLE FRONT PANEL DISPLAY +H8P_KEYPADCAN: + LD A,(H8P_FPENA) + CPL + LD (H8P_FPENA),A + RET +; SET MEM STATE +H8P_KEYPADMEM: + LD A,2 + LD (H8P_STATE),A + LD (H8P_MEMENTER),A + XOR A + LD (H8P_MEMADRIDX),A + CALL H8P_UPDMEMLOC + RET +; SET REG STATE +H8P_KEYPADREG: + LD A,1 + LD (H8P_STATE),A + XOR A + LD (H8P_MEMENTER),A + RET +; NOTHING +H8P_KEYPAD9: +; RET +; TIMER +H8P_KEYPAD8: + LD A,(H8P_STATE) + CP 2 + RET Z + LD A,0 + LD (H8P_STATE),A + RET +; SPEED CONTROL +H8P_KEYPAD7: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,7 + JP Z,H8P_KEYPADDIG + LD A,3 + LD (H8P_STATE),A + RET +; PC (OUT) +H8P_KEYPAD6: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,6 + JP Z,H8P_KEYPADDIG + LD A,5 + LD (H8P_REGNUM),A + RET +; HL (IN) +H8P_KEYPAD5: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,5 + JP Z,H8P_KEYPADDIG + LD A,3 + LD (H8P_REGNUM),A + RET +; DE +H8P_KEYPAD4: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,4 + JP Z,H8P_KEYPADDIG + LD A,2 + LD (H8P_REGNUM),A + RET +; BC +H8P_KEYPAD3: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,3 + JP Z,H8P_KEYPADDIG + LD A,1 + LD (H8P_REGNUM),A + RET +; AF +H8P_KEYPAD2: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,2 + JP Z,H8P_KEYPADDIG + LD A,0 + LD (H8P_REGNUM),A + RET +; SP +H8P_KEYPAD1: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + LD A,1 + JP Z,H8P_KEYPADDIG + LD A,4 + LD (H8P_REGNUM),A + RET +; NOTHING +H8P_KEYPAD0: + LD A,(H8P_STATE) + CP 2 ; MEM MODE + JP NZ,H8P_KEYPAD8 + LD A,0 +; +H8P_KEYPADDIG: + LD C,A + LD A,(H8P_MEMENTER) + OR A + JR Z,H8P_KEYPADDIG1 + LD A,(H8P_MEMADRIDX) + OR A + CALL Z,H8P_SETDIG0 + DEC A + CALL Z,H8P_SETDIG1 + DEC A + CALL Z,H8P_SETDIG2 + DEC A + CALL Z,H8P_SETDIG3 + DEC A + CALL Z,H8P_SETDIG4 + DEC A + CALL Z,H8P_SETDIG5 + CALL H8P_UPDMEMLOC +; NEXT MEMORY ADR INDEX + LD A,(H8P_MEMADRIDX) + INC A + LD (H8P_MEMADRIDX),A + CP 6 + RET NZ + XOR A + LD (H8P_MEMADRIDX),A + RET +; CHECK FOR IN/OUT TO PORT +H8P_KEYPADDIG1: + LD A,C + CP 5 ; IN PORT + JR Z,H8P_KEYPADINP + CP 6 ; OUT PORT + JR Z,H8P_KEYPADOUT + RET +H8P_KEYPADINP: + LD BC,(H8P_MEMLOC) + IN A,(C) + LD B,A + LD (H8P_MEMLOC),BC + JP H8P_UPDMEMLOC +H8P_KEYPADOUT: + LD BC,(H8P_MEMLOC) + LD A,B + OUT (C),A + RET +H8P_UPDMEMLOC: + LD BC,H8P_MEMLOC + LD HL,H8P_SEGBUF + CALL H8P_FILLOCT + RET +; C=VAL +H8P_SETDIG0: + LD HL,(H8P_MEMLOC) + LD B,H + CALL H8P_SETOCTH + LD H,A + LD (H8P_MEMLOC),HL + LD A,$FF + RET +H8P_SETDIG1: + LD HL,(H8P_MEMLOC) + LD B,H + CALL H8P_SETOCTM + LD H,A + LD (H8P_MEMLOC),HL + LD A,$FF + RET +H8P_SETDIG2: + LD HL,(H8P_MEMLOC) + LD B,H + CALL H8P_SETOCTL + LD H,A + LD (H8P_MEMLOC),HL + LD A,$FF + RET +H8P_SETDIG3: + LD HL,(H8P_MEMLOC) + LD B,L + CALL H8P_SETOCTH + LD L,A + LD (H8P_MEMLOC),HL + LD A,$FF + RET +H8P_SETDIG4: + LD HL,(H8P_MEMLOC) + LD B,L + CALL H8P_SETOCTM + LD L,A + LD (H8P_MEMLOC),HL + LD A,$FF + RET +H8P_SETDIG5: + LD HL,(H8P_MEMLOC) + LD B,L + CALL H8P_SETOCTL + LD L,A + LD (H8P_MEMLOC),HL + XOR A + LD (H8P_MEMENTER),A + LD A,$FF + RET +H8P_SETDIGD: + LD A,(H8P_MEMVAL) + PUSH AF + CALL H8P_GETOCTH + LD (H8P_SEGBUF+6),A + POP AF + PUSH AF + CALL H8P_GETOCTM + LD (H8P_SEGBUF+7),A + POP AF + CALL H8P_GETOCTL + LD (H8P_SEGBUF+8),A + RET +; MEM/SPEED INCREASE +H8P_KEYPADPLUS: + LD A,(H8P_STATE) + CP 3 + JR Z,H8P_KEYPADPLUS3 + CP 2 + RET NZ + LD HL,(H8P_MEMLOC) + INC HL + LD (H8P_MEMLOC),HL + JP H8P_UPDMEMLOC +H8P_KEYPADPLUS3: + LD A,(H8P_SPEED) + OR A + RET Z + DEC A + ;;;LD (H8P_SPEED),A + ;;;OUT (H8P_SPDIO),A + ;;;RET + ; EXIT VIA HBIOS SPEED CHANGE, W/ L=NEW SPEED + JP H8P_SETSPD ; SEE HBIOS.ASM +; MEM/SPEED DECREASE +H8P_KEYPADMINUS: + LD A,(H8P_STATE) + CP 3 + JR Z,H8P_KEYPADMINUS3 + CP 2 + RET NZ + LD HL,(H8P_MEMLOC) + DEC HL + LD (H8P_MEMLOC),HL + JP H8P_UPDMEMLOC +H8P_KEYPADMINUS3: + LD A,(H8P_SPEED) + CP 3 + RET Z + INC A + ;;;LD (H8P_SPEED),A + ;;;OUT (H8P_SPDIO),A + ;;;RET + ; EXIT VIA HBIOS H8P SPEED CHANGE, W/ A=NEW SPEED + JP H8P_SETSPD ; SEE HBIOS.ASM +; +; HANDLE FRONT PANEL STATE +; +H8P_HDLSTATE: + LD A,(H8P_STATE) + OR A + RET Z ; UP-TIME TIMER + DEC A + JP Z,H8P_HDLREG ; SHOWING REGISTER VALUES + DEC A + JP Z,H8P_HDLMEM ; SHOWING MEMORY LOCATION VALUE + DEC A + JP Z,H8P_HDLSPD ; MODIFYING SPEED + RET ; -H8P_SHOWHEX: - LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER - CALL ST32 ; STORE 32-BIT BINARY THERE - LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL) - LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE) - CALL DSKY_BIN2SEG ; CONVERT - LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER - ; AND FALL THRU TO DISPLAY IT +H8P_HDLREG: + LD A,(H8P_REGNUM) + LD HL,H8P_REGAF + OR A + JP Z,H8P_HDLREGAF + DEC A + LD HL,H8P_REGBC + JP Z,H8P_HDLREGBC + DEC A + LD HL,H8P_REGDE + JP Z,H8P_HDLREGDE + DEC A + LD HL,H8P_REGHL + JP Z,H8P_HDLREGHL + DEC A + LD HL,H8P_REGSP + JP Z,H8P_HDLREGSP + DEC A + LD HL,H8P_REGPC + JP Z,H8P_HDLREGPC + RET +H8P_HDLREGAF: + CALL H8P_UPDLEDS + LD HL,HBX_INTSTK + DEC HL + LD A,(HL) ; (HL)=AF LOW + LD (H8P_AFVAL),A + DEC HL + LD A,(HL) ; (HL)=AF HIGH + LD (H8P_AFVAL+1),A + LD BC,H8P_AFVAL + LD HL,H8P_SEGBUF + JP H8P_FILLOCT +H8P_HDLREGBC: + LD BC,H8P_BCVAL + CALL H8P_FILLOCT + JP H8P_UPDLEDS +H8P_HDLREGDE: + LD BC,H8P_DEVAL + CALL H8P_FILLOCT + JP H8P_UPDLEDS +H8P_HDLREGHL: + CALL H8P_UPDLEDS +; + ;;;LD HL,(HBX_INT_SP) + ;;;LD A,(HL) + ;;;LD (H8P_HLVAL),A + ;;;INC HL + ;;;LD A,(HL) + ;;;LD (H8P_HLVAL+1),A +; + LD A,(HB_CURBNK) ; GET PRE-INT BANK + LD D,A ; PUT IN D +; + ; HORRIBLE HACK TO MAKE PEEK RETURN TO OUR BANK!!! + PUSH AF ; SAVE ORIG HB_CURBNK + LD A,BID_BIOS ; MAKE IT OUR BANK + LD (HB_CURBNK),A ; OVERRIDE FOR PEEK +; + ; FOLLOW STACK TO GET PC, USE PEEK IN CASE STACK IN ALT BANK + LD HL,(HBX_INT_SP) ; PRE-INT SP HAS HL AT TOS + CALL HBX_PEEK ; GET LSB TO E + LD C,E ; PUT IN C + INC HL ; POINT TO MSB + CALL HBX_PEEK ; GET MSB TO E + LD B,E ; PUT IN B + LD (H8P_HLVAL),BC ; SAVE FOR DISPLAY +; + ; UNDO HACK!!! + POP AF ; RECOVER HB_CURBNK + LD (HB_CURBNK),A ; SAVE RESTORE IT +; + LD BC,H8P_HLVAL + LD HL,H8P_SEGBUF + JP H8P_FILLOCT +H8P_HDLREGSP: + CALL H8P_UPDLEDS + LD HL,(HBX_INT_SP) ; GET INT SAVED SP + INC HL ; BUMP TO VAL + INC HL ; ... OF SP + INC HL ; ... AT TIME + INC HL ; ... OF INTERRUPT + LD (H8P_SPVAL),HL ; SAVE FOR DISPLAY + LD BC,H8P_SPVAL + LD HL,H8P_SEGBUF + JP H8P_FILLOCT +H8P_HDLREGPC: + CALL H8P_UPDLEDS +; + ;;;LD HL,(HBX_INT_SP) ; (HL)=HL LOW + ;;;INC HL ; (HL)=HL HIGH + ;;;INC HL ; (HL)=PC LOW + ;;;LD A,(HL) + ;;;LD (H8P_PCVAL),A + ;;;INC HL ; (HL)=PC HIGH + ;;;LD A,(HL) + ;;;LD (H8P_PCVAL+1),A +; + LD A,(HB_CURBNK) ; GET PRE-INT BANK + LD D,A ; PUT IN D +; + ; HORRIBLE HACK TO MAKE PEEK RETURN TO OUR BANK!!! + PUSH AF ; SAVE ORIG HB_CURBNK + LD A,BID_BIOS ; MAKE IT OUR BANK + LD (HB_CURBNK),A ; OVERRIDE FOR PEEK +; + ; FOLLOW STACK TO GET PC, USE PEEK IN CASE STACK IN ALT BANK + LD HL,(HBX_INT_SP) ; PRE-INT SP + INC HL ; REMOVE 1 LEVEL TO + INC HL ; ... POINT TO PRE-INT PC + CALL HBX_PEEK ; GET LSB TO E + LD C,E ; PUT IN C + INC HL ; POINT TO MSB + CALL HBX_PEEK ; GET MSB TO E + LD B,E ; PUT IN B + LD (H8P_PCVAL),BC ; SAVE FOR DISPLAY +; + ; UNDO HACK!!! + POP AF ; RECOVER HB_CURBNK + LD (HB_CURBNK),A ; SAVE RESTORE IT +; + LD BC,H8P_PCVAL + LD HL,H8P_SEGBUF + JP H8P_FILLOCT +H8P_HDLMEM: + CALL H8P_SETDIGD + RET +H8P_HDLSPD: + LD HL,H8P_SPD16 + LD A,(H8P_SPEED) + OR A + JR Z,H8P_UPDLEDS + LD HL,H8P_SPD08 + DEC A + JR Z,H8P_UPDLEDS + LD HL,H8P_SPD04 + DEC A + JR Z,H8P_UPDLEDS + LD HL,H8P_SPD02 +H8P_UPDLEDS: + LD C,9 + LD DE,H8P_SEGBUF +H8P_UPDLEDS1: + LD A,(HL) + INC HL + LD (DE),A + INC DE + DEC C + JR NZ,H8P_UPDLEDS1 + RET ; -; DISPLAY BYTE VALUES POINTED TO BY DE. THE INCOMING BYTES ARE IN -; THE STANDARD ROMWBW SEGMENT ENCODING AND MUST BE TRANSLATED TO THE -; HEATH ENCODING (SEE ICM.ASM FOR EXAMPLE): +H8P_GETSEGIDX: + LD A,(H8P_SEGIDX) + DEC A + LD (H8P_SEGIDX),A + LD C,A + RET NZ + LD A,9 + LD (H8P_SEGIDX),A + LD C,A + RET ; +; A = SEG IDX ; -; From: To: -; +--01--+ +--02--+ -; 20 02 40 04 -; +--40--+ +--01--+ -; 10 04 20 08 -; +--08--+ 80 +--10--+ 80 +; +--02--+ +; 40 04 +; +--01--+ +; 20 08 +; +--10--+ 80 ; -H8P_SHOWSEG: - XOR A ; SIGNAL SUCCESS +H8P_GETSEGPAT: + LD A,C + AND $0F ; IDX=1 THRU 9 + DEC A + LD C,A + LD B,0 + LD HL,H8P_SEGBUF + ADD HL,BC + LD E,(HL) + LD A,(H8P_MEMENTER) + OR A + JR Z,H8P_GETSEGPATX + LD A,(H8P_MEMADRIDX) + CP C + JR NZ,H8P_GETSEGPATX + LD A,$80 + OR E + LD E,A +H8P_GETSEGPATX: + LD A,E + CPL RET -; -; UPDATE KEY LEDS (H8 HAS NONE) -; -H8P_KEYLEDS: - XOR A ; SIGNAL SUCCESS +; BC=MEMLOC, HL=LED BUFFER +H8P_FILLOCT: + PUSH HL + INC BC ; POINT TO HIGH BYTE + LD A,(BC) + CALL H8P_GETOCTH + LD (HL),A + INC HL + LD A,(BC) + CALL H8P_GETOCTM + LD (HL),A + INC HL + LD A,(BC) + CALL H8P_GETOCTL + LD (HL),A + INC HL + DEC BC ; POINT TO LOW BYTE + LD A,(BC) + CALL H8P_GETOCTH + LD (HL),A + INC HL + LD A,(BC) + CALL H8P_GETOCTM + LD (HL),A + INC HL + LD A,(BC) + CALL H8P_GETOCTL + LD (HL),A + POP HL RET -; -; SET STATUS LEDS BASED ON BITS IN E -; -H8P_STATLED: - XOR A ; SIGNAL SUCCESS +; HIGH OCTAL BITS +H8P_GETOCTH: + AND $C0 + RRA + RRA + RRA + RRA + RRA + RRA + JR H8P_GETOCTX +; MEDIUM OCTAL BITS +H8P_GETOCTM: + AND $38 + RRA + RRA + RRA + JR H8P_GETOCTX +; LOW OCTAL BITS +H8P_GETOCTL: + AND $07 +H8P_GETOCTX: + PUSH HL + LD E,A + LD D,0 + LD HL,H8P_DIGMAP + ADD HL,DE + LD A,(HL) ; VALUE CONVERTED TO LED SEGMENT PATTERN + POP HL + RET +; B=CURVAL, C=NEWVAL +H8P_SETOCTH: + LD A,C + AND $03 + RLA + RLA + RLA + RLA + RLA + RLA + LD C,A + LD A,B + AND $3F + OR C + RET +H8P_SETOCTM: + LD A,C + AND $07 + RLA + RLA + RLA + LD C,A + LD A,B + AND $C7 + OR C + RET +H8P_SETOCTL: + LD A,C + AND $07 + LD C,A + LD A,B + AND $F8 + OR C + CALL H8P_BEEP RET -; -; BEEP THE SPEAKER ON THE H8P ; H8P_BEEP: - POP BC - XOR A ; SIGNAL SUCCESS + PUSH HL + LD HL,16 + LD (H8P_HORNDUR),HL + POP HL RET ; ; DEVICE INFORMATION ; H8P_DEVICE: - LD D,DSKYDEV_H8P ; D := DEVICE TYPE +; LD D,DSKYDEV_H8P ; D := DEVICE TYPE LD E,0 ; E := PHYSICAL DEVICE NUMBER LD H,0 ; H := MODE - LD L,0 ; L := BASE I/O ADDRESS + LD L,H8FPIO ; L := BASE I/O ADDRESS XOR A ; SIGNAL SUCCESS RET ; -;_KEYMAP_TABLE_____________________________________________________________________________________________________________ -; -H8P_KEYMAP: ; *** NEEDS TO BE UPDATED *** - ; POS $00 $01 $02 $03 $04 $05 $06 $07 - ; KEY [0] [1] [2] [3] [4] [5] [6] [7] - .DB $0D, $04, $0C, $14, $03, $0B, $13, $02 -; - ; POS $08 $09 $0A $0B $0C $0D $0E $0F - ; KEY [8] [9] [A] [B] [C] [D] [E] [F] - .DB $0A, $12, $01, $09, $11, $00, $08, $10 +; DIGITS TO LED PATTERNS +; +--02--+ +; 40 04 +; +--01--+ +; 20 08 +; +--10--+ 80 ; - ; POS $10 $11 $12 $13 $14 $15 $16 $17 - ; KEY [FW] [BK] [CL] [EN] [DE] [EX] [GO] [BO] - .DB $05, $15, $1D, $1C, $1B, $1A, $19, $18 - - ; POS $18 $19 $1A $1B - ; KEY [F4] [F3] [F2] [F1] - .DB $23, $22, $21, $20 +H8P_DIGMAP: + ; 0 1 2 3 4 5 6 7 + .DB $7E, $0C, $37, $1F, $4D, $5B, $7B, $0E + ; 8 9 A B C D E F + .DB $7F, $5F, $6F, $79, $72, $3D, $73, $63 +; +H8P_REGNUM: + .DB 0 +H8P_REGAF: + .DB $00, $00, $00, $00, $00, $00, $00, $6F, $63 +H8P_REGBC: + .DB $00, $00, $00, $00, $00, $00, $00, $79, $72 +H8P_REGDE: + .DB $00, $00, $00, $00, $00, $00, $00, $3D, $73 +H8P_REGHL: + .DB $00, $00, $00, $00, $00, $00, $00, $6D, $70 +H8P_REGSP: + .DB $00, $00, $00, $00, $00, $00, $00, $5B, $67 +H8P_REGPC: + .DB $00, $00, $00, $00, $00, $00, $00, $67, $72 +H8P_SPD16: + .DB $00, $00, $00, $00, $0C, $7B, $5B, $67, $3D +H8P_SPD08: + .DB $00, $00, $00, $00, $00, $7F, $5B, $67, $3D +H8P_SPD04: + .DB $00, $00, $00, $00, $00, $4D, $5B, $67, $3D +H8P_SPD02: + .DB $00, $00, $00, $00, $00, $37, $5B, $67, $3D +H8P_MEMADRIDX: + .DB 0 +H8P_MEMENTER: + .DB 0 +H8P_SPVAL: + .DW 0 +H8P_AFVAL: + .DW 0 +H8P_BCVAL: + .DW 0 +H8P_DEVAL: + .DW 0 +H8P_HLVAL: + .DW 0 +H8P_PCVAL: + .DW 0 +; +H8P_STATE: + .DB 00 +H8P_STTIMER: + .DB 00 +H8P_FPENA: + .DB $FF +H8P_SEGIDX: + .DB 09 +H8P_HBTICK: + .DB 00 +H8P_KEYBUF: + .DB 00 +H8P_LSTKEY: + .DB 00 +H8P_SEGBUF: + .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF +H8P_HORNDUR: + .DW $0080 +H8P_ONESEC: + .DW 500 +H8P_UPTIME: + .DW 0 +H8P_UPTDIG: + .DB 0,0,0,0,0,0,0,0,0 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 8f340c68..eaa43d09 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -32,40 +32,43 @@ ; HBIOS APPLICATION BINARY. THE APPENDED OS IMAGES ARE COPIED TO THE AUX RAM ; BANK AND LAUNCHED AFTER HBIOS HAS INSTALLED ITSELF. ; -;;;; - IMGBOOT: BOOT FROM AN IMAGE FILE THAT HAS BEEN PLACED IN THE USER BANK -;;;; -;;;; WHEN IMGBOOT IS DEFINED, THE FILE IS ASSEMBLED SUCH THAT IT CAN BE PRELOADED -;;;; INTO THE RAM USER BANK BY AN EXTERNAL PROCESS THAT SUBSEQUENTLY LAUNCHES -;;;; THE CODE AT ADDRESS 0. THE MOST COMMON EXAMPLE OF THIS IS THE UNA FSFAT -;;;; TOOL WHICH CAN LOAD AN IMAGE FROM A DOS FAT FILESYSTEM PROVIDING A SIMPLE -;;;; WAY TO LOAD A TEST COPY OF HBIOS. AS IS THE CASE WITH APPBOOT, IT IS ASSUMED -;;;; THAT AN OS IMAGES FILE IS APPENDED TO THE END OF THE IMAGE AND IS LAUNCHED -;;;; AFTER HBIOS IS INSTALLED. +; - IMGBOOT: BOOT FROM AN IMAGE FILE THAT HAS BEEN PLACED IN THE USER BANK +; +; NOTE: THIS BOOT MODE IS DEPRECATED. +; +; WHEN IMGBOOT IS DEFINED, THE FILE IS ASSEMBLED SUCH THAT IT CAN BE PRELOADED +; INTO THE RAM USER BANK BY AN EXTERNAL PROCESS THAT SUBSEQUENTLY LAUNCHES +; THE CODE AT ADDRESS 0. THE MOST COMMON EXAMPLE OF THIS IS THE UNA FSFAT +; TOOL WHICH CAN LOAD AN IMAGE FROM A DOS FAT FILESYSTEM PROVIDING A SIMPLE +; WAY TO LOAD A TEST COPY OF HBIOS. AS IS THE CASE WITH APPBOOT, IT IS ASSUMED +; THAT AN OS IMAGES FILE IS APPENDED TO THE END OF THE IMAGE AND IS LAUNCHED +; AFTER HBIOS IS INSTALLED. ; ; INCLUDE FILE NESTING: ; -; hbios.asm -; - std.asm -; - ver.inc -; - hbios.inc -; - build.inc -; - config/_.asm -; - cfg_.asm -; - [z180.inc|z280.inc] -; - [eipc.inc] -; - .asm -; - .asm -; - util.asm -; - time.asm -; - bcd.asm -; - decode.asm -; - encode.asm -; - [xio|mio].asm -; - unlzsa2s.asm +; - std.asm +; - ../ver.inc +; - build.inc +; - Config/_std.asm +; - cfg_.asm +; - cfg_MASTER.asm +; - hbios.inc +; - [z180.inc] +; - [z280.inc] +; - [eipc.inc] +; - util.asm +; - time.asm +; - bcd.asm +; - decode.asm +; - encode.asm +; - [xio.asm] +; - [mio.asm] +; - [unlzsa2s.asm] +; - .asm +; - .asm ; ; MEMORY LAYOUT: ; -; ; DESCRIPTION START LENGTH ; ----------------------------- ------- ------- ; Page Zero 0x0000 0x0100 @@ -75,8 +78,8 @@ ; Interrupt Vector Table 0x0500 Varies ; System Initialization Varies Varies ; Function Dispatching Varies Varies -; System API Varies Varies ; Z280 Int Vector Table Varies Varies +; System API Varies Varies ; Internal Functions Varies Varies ; Utility Functions Varies Varies ; Print Summary Function Varies Varies @@ -95,31 +98,46 @@ ; D4 ~PSG_RES ~PSG_RES ~PSG_RES ROM_A19 ~PSG_RES ; D3 STATUS_LED STATUS_LED VDP_LED PSG_LED ROM_A18 PSG_LED ; D2 VDP_A14 VDP_A14 ROM_A17 VDP_LED -; D1 ~VDP_SYN ~VDP_SYN ROM_A16 +; D1 ~VDP_SYN ~VDP_SYN ROM_A16 ; D0 ~VDP_RES ~VDP_RES VDP_RES ROM_A15 VDP_RES ; ; PORT SCG:0x9C 0x94 VDP:0x92 PSG:0xA2 0x80 MEDIA:0xA6 ; #DEFINE HBIOS ; -; MAKE SURE EXACTLY ONE OF ROMBOOT, APPBOOT, IMGBOOT IS DEFINED. +; IF BUILDING FULL BOOT ROM, INCLUDE INFO MACROS ; -MODCNT .EQU 0 #IFDEF ROMBOOT -MODCNT .SET MODCNT + 1 -; #DEFINE BNKINFO #DEFINE MEMINFO #DEFINE DEVINFO #DEFINE SYSINFO +#ENDIF +; +; INCLUDE GENERIC STUFF +; +#INCLUDE "std.asm" +; +; MAKE SURE EXACTLY ONE OF ROMBOOT, APPBOOT, IMGBOOT IS DEFINED. +; +MODCNT .EQU 0 +BOOTMODE .EQU 0 ; +#IFDEF ROMBOOT +BOOTMODE .SET BM_ROMBOOT +MODCNT .SET MODCNT + 1 #ENDIF +; #IFDEF APPBOOT -MODCNT .SET MODCNT + 1 +BOOTMODE .SET BM_APPBOOT +MODCNT .SET MODCNT + 1 #ENDIF -#IFDEF IMGBOOT -MODCNT .SET MODCNT + 1 +; +#IFDEF IMGBOOT ; *** DEPRECATED *** +BOOTMODE .SET BM_IMGBOOT +MODCNT .SET MODCNT + 1 #ENDIF +; #IF (MODCNT != 1) .ECHO "*** ERROR: PLEASE DEFINE ONE AND ONLY ONE OF ROMBOOT, APPBOOT, IMGBOOT!!!\n" !!! ; FORCE AN ASSEMBLY ERROR @@ -141,10 +159,6 @@ MODCNT .SET MODCNT + 1 #DEFINE MEMECHO \; #ENDIF ; -; INCLUDE GENERIC STUFF -; -#INCLUDE "std.asm" -; SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT ; ; HELPER MACROS @@ -154,7 +168,11 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT #IF (FPLED_ENABLE) #DEFINE FPLEDS(N) PUSH AF #DEFCONT \ LD A,N - #DEFCONT \ CALL FP_SETLEDS + #IF (FPLED_INV) + #DEFCONT \ XOR $FF ; INVERT BITS IF NEEDED + #ENDIF + #DEFCONT \ EZ80_IO + #DEFCONT \ OUT (FPLED_IO),A #DEFCONT \ POP AF #ELSE #DEFINE FPLEDS(N) \; @@ -163,14 +181,14 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT ; SET DIAGNOSTIC LEDS ; ; SCxxx: LED Port=0x0E, bit 2, inverted, dedicated port (LEDMODE_SC) -; SC7xx: LED Port=0x0E, bit 0, inverted, dedicated port (LEDMODE_STD) +; SC7xx/SC5xx: LED Port=0x0E, bit 0, inverted, dedicated port (LEDMODE_STD) ; TinyZ80: LED Port=0x6E, bit 0, inverted, dedicated port (LEDMODE_STD) ; Z80-512K: LED Port=0x6E, bit 0, inverted, dedicated port (LEDMODE_STD) ; MBC: LED Port=0x70, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) ; DUO: LED Port=0x94, bits 1-0, normal, shared w/ RTC port (LEDMODE_RTC) ; S100: LED Port = $0E, bit 2, inverted, dedicated port (LEDMODE_SC) ; NABU: LED Port = $00, bits 5-3, normal, shared w/ control port (LEDMODE_NABU) -; +; #IF (LEDENABLE) #IF (LEDMODE == LEDMODE_STD) #DEFINE DIAG(N) PUSH AF @@ -195,7 +213,8 @@ SUPCTS .EQU FALSE ; SUPPRESS CTS DURING HBIOS BOOT #ENDIF #IF (LEDMODE == LEDMODE_NABU) #DEFINE DIAG(N) PUSH AF - #DEFCONT \ LD A,+((N << 3) & %00011000) + ;#DEFCONT \ LD A,+((N << 3) & %00011000) + #DEFCONT \ LD A,+((N << 3) & %00111000) #DEFCONT \ OUT (LEDPORT),A #DEFCONT \ POP AF #ENDIF @@ -339,6 +358,9 @@ RTCDEF .SET RTCDEF | %00001000 ; INITIAL SPEED LOW #ENDIF DEVECHO "\n" #ENDIF + +#INCLUDE "ez80instr.inc" + ; ;================================================================================================== ; Z80 PAGE ZERO, VECTORS, ETC. @@ -427,6 +449,7 @@ CB_CRTDEV .DB $FF ; PRIMARY CRT UNIT, $FF UNTIL AFTER HBIOS INIT CB_CONDEV .DB $FF ; CONSOLE UNIT, $FF UNTIL AFTER HBIOS INIT ; CB_DIAGLVL .DB DIAGLVL ; ROMWBW HBIOS DIAGNOSTIC LEVEL +CB_BOOTMODE .DB BOOTMODE ; HBIOS BOOTMODE ; ; MEMORY MANAGEMENT VARIABLES START AT $20 ; @@ -435,6 +458,33 @@ CB_DIAGLVL .DB DIAGLVL ; ROMWBW HBIOS DIAGNOSTIC LEVEL CB_HEAP .DW 0 CB_HEAPTOP .DW 0 ; +; SWITCHES SHADOW COPY (FROM RTC/NVR) START AT $30 +; + .FILL (HCB + $30 - $),0 +; +; First byte (header) of NVRAM = "W" if fully initialised, or a ststus byte +; = 0 if no NVRAM detected, or = 1 If NVR exists, but not configured +CB_SWITCHES .DB 0 ; this byte is set during init +; +; Byte 0: (L) +; Bit 7-0 DISK BOOT SLice Number to Boot -> default = 0 +; Bit 7-0 ROM BOOT (alpha character) Application to boot -> default = "H" +; Byte 1: (H) +; Bit 7 - ROM/DISK - Rom or Disk Boot -> Default=ROM=1 (BOOT_DEFAULT is Numeric/Alpha) +; Bit 6-0 - DISK BOOT Disk Unit to Boot (0-127) -> default = 0 +CB_SWDEFBOOT .DB 'H' ; (WORD) DEFAULT BOOT NVR OPTIONS. USED By ROMLDR + .DB DBOOT_ROM ; Default Boot - ROM Application +; +; Byte 0: (L) +; Bit 7-6 - Reserved +; Bit 5 - AUTO BOOT Auto boot, default=false (BOOT_TIMEOUT != -1) +; Bit 4 - Reserved +; Bit 3-0 - BOOT_TIMEOUT in seconds (0-15) 0=immediate -> default=3 +CB_SWAUTOB .DB 0 ; AUTO BOOT NVR OPTIONS. USED By ROMLDR +; +; CHECKSUM +CB_SWITCHCK .DB 0 ; CHECKSUM (XOR=0), INCLUDES HEADER and CB_VERSION +; ; STANDARD BANK ID'S START AT $D8. DEFAULT VALUES FOR 512KB SYSTEM WITH NO RESERVED BANKS ; .FILL (HCB + $D8 - $),0 @@ -497,6 +547,13 @@ HBX_IDENT: ; HBX_INVOKE: ; +#IF (INTMODE == 0) + ; IF SOMETHING IN USERLAND ENABLES INTERRUPTS AND WE ARE NOT + ; CONFIGURED TO USE THEM, THEN SHUT THEM BACK OFF AGAIN FOR + ; SAFETY. + DI +#ENDIF +; #IF (HBIOS_MUTEX == TRUE) PUSH HL ; SAVE HL LD HL,HB_LOCK ; POINT TO LOCK @@ -593,25 +650,44 @@ HBX_ROM: #ENDIF ; #IF (MEMMGR == MM_Z2) + +#IF (CPUFAM == CPU_EZ80) + BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE + JR Z,HBX_ROM ; NOT SET, SELECT ROM PAGE + RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT + ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K +; +HBX_ROM: + RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K + OUT_NN_A(MPGSEL_0) ; BANK_0: 0K - 16K + INC A ; + OUT_NN_A(MPGSEL_1) ; BANK_1: 16K - 32K + RET ; DONE + +#ELSE + BIT 7,A ; BIT 7 SET REQUESTS RAM PAGE JR Z,HBX_ROM ; NOT SET, SELECT ROM PAGE RES 7,A ; RAM PAGE REQUESTED: CLEAR ROM BIT #IF (PLATFORM == PLT_DUO) ADD A,64 ; ADD 64 x 32K - RAM STARTS FROM 2048K #ELSE - ADD A,16 ; ADD 16 x 32K - RAM STARTS FROM 512K + ADD A,ROMSIZE / 32 ; STARTING RAM BANK NUMBER OFFSET #ENDIF ; HBX_ROM: RLCA ; TIMES 2 - GET 16K PAGE INSTEAD OF 32K + EZ80_IO() OUT (MPGSEL_0),A ; BANK_0: 0K - 16K INC A ; + EZ80_IO() OUT (MPGSEL_1),A ; BANK_1: 16K - 32K #IF (CPUFAM == CPU_Z280) PCACHE #ENDIF RET ; DONE #ENDIF +#ENDIF ; #IF (MEMMGR == MM_N8) BIT 7,A ; TEST BIT 7 FOR RAM VS. ROM @@ -991,7 +1067,8 @@ HBX_BNKCALL_ADR: ; HBX_PEEK: LD (HBX_PPSP),SP ; SAVE ORIGINAL STACK FRAME - LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK + ;;;LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK + LD SP,HBX_BUF_END - $20 ; BORROW HBX_BUF FOR TEMP STACK LD A,(HB_CURBNK) PUSH AF LD A,D @@ -1001,7 +1078,8 @@ HBX_PEEK: ; HBX_POKE: LD (HBX_PPSP),SP ; SAVE ORIGINAL STACK FRAME - LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK + ;;;LD SP,HBX_BUF_END ; BORROW HBX_BUF FOR TEMP STACK + LD SP,HBX_BUF_END - $20 ; BORROW HBX_BUF FOR TEMP STACK LD A,(HB_CURBNK) PUSH AF LD A,D @@ -1023,6 +1101,22 @@ HBX_PPSP .EQU $ - 2 ; #IF (MEMMGR != MM_Z280) ; +; HEATH FRONT PANEL WORK SPACE (4 BYTES) +; + #IF (H8PENABLE) +H8P_MEMLOC: + .DW 0 +H8P_MEMVAL: + .DB 0 +H8P_MEMCPY: + LD HL,(H8P_TICCNT) + LD ($000B),HL + LD HL,(H8P_MEMLOC) + LD A,(HL) + LD (H8P_MEMVAL),A + RET + #ENDIF +; HBX_INTSTKSIZ .EQU $FF00 - $ MEMECHO "HBIOS INT STACK space: " MEMECHO HBX_INTSTKSIZ @@ -1037,26 +1131,26 @@ HBX_INTSTK .EQU $ ; #ENDIF ; -; HBIOS INTERRUPT SLOT ASSIGNMENTS -; -; # Z80 Z180 -; --- -------------- -------------- -; 0 CTC0A INT1 -+ -; 1 CTC0B INT2 | -; 2 CTC0C TIM0 | -; 3 CTC0D TIM1 | -; 4 UART0 DMA0 +- Z180 INTERNAL -; 5 UART1 DMA1 | -; 6 CSIO | -; 7 SIO0 SER0 | -; 8 SIO1 SER1 -+ -; 9 PIO0A PIO0A -; 10 PIO0B PIO0B -; 11 PIO1A PIO1A -; 12 PIO1B PIO1B -; 13 SIO0 -; 14 SIO1 -; 15 +; HBIOS INTERRUPT MODE 2 SLOT ASSIGNMENTS (SEE STD.ASM) +; +; # Z80/Z280 Z180 MBC DUO NABU +; --- -------------- -------------- -------------- -------------- -------------- +; 0 CTC0A INT1 -+ -+ -+ HCCARCV -+ +; 1 CTC0B INT2 | | | HCCASND | +; 2 CTC0C TIM0 | | IM2 | IM2 NABUKB | IM2 +; 3 CTC0D TIM1 | | INT | INT VDP | INT +; 4 UART0 DMA0 | Z180 UART0 | VEC UART0 | VEC OPTCRD0 | VEC +; 5 UART1 DMA1 | CPU UART1 | GEN UART1 | GEN OPTCRD1 | GEN +; 6 CSIO | | | OPTCRD2 | +; 7 SIO0 SER0 | -+ -+ OPTCRD3 -+ +; 8 SIO1 SER1 -+ SIO0 SIO0 +; 9 PIO0A PIO0A SIO1 SIO1 +; 10 PIO0B PIO0B PIO0A PIO0A +; 11 PIO1A PIO1A PIO0B PIO0B +; 12 PIO1B PIO1B CTC0A CTC0A +; 13 SIO0 CTC0B CTC0B +; 14 SIO1 CTC0C CTC0C +; 15 CTC0D CTC0D ; ; IVT MUST START AT PAGE BOUNDARY ALIGN($100) @@ -1155,13 +1249,6 @@ HBX_RETI: PUSH BC ; SAVE BC PUSH DE ; SAVE DE PUSH IY ; SAVE IY -; -#IF (PLATFORM == PLT_NABU) - PUSH HL - LD HL,($FFEA) ; TICCNT COPIED TO... - LD ($000B),HL ; ...LOW MEMORY FOR CP/M - POP HL -#ENDIF ; LD A,BID_BIOS ; HBIOS BANK CALL HBX_BNKSEL_INT ; SELECT IT @@ -1173,6 +1260,10 @@ HBX_RETI: ; LD A,(HB_CURBNK) ; GET PRE-INT BANK CALL HBX_BNKSEL ; SELECT IT +; + #IF (H8PENABLE) + CALL H8P_MEMCPY + #ENDIF ; ; RESTORE STATE POP IY ; RESTORE IY @@ -1185,8 +1276,15 @@ HBX_INT_SP .EQU $ - 2 ; POP HL ; RESTORE HL ; + +#IF (CPUFAM == CPU_EZ80) + RET.L ; INTERRUPTS WILL BE ENABLED BY BY EZ80 FIRMWARE + ; CAN THEY BE ENABLED HERE - DOES THAT RISK RE-ENTRANT OF THE HANDLER? +#ELSE HB_EI ; ENABLE INTERRUPTS RETI ; AND RETURN +#ENDIF + ; #ENDIF ; @@ -1341,12 +1439,27 @@ HB_START: CALL HB_APPBOOT ; PREPARE APP BOOT RET NZ ; RETURN ON ERROR ; -HB_APPBOOT_Z: -; #ENDIF +; +HB_RESTART: ; DI ; NO INTERRUPTS +#IF (CPUFAM != CPU_EZ80) IM 1 ; INTERRUPT MODE 1 +#ENDIF +; +#IFDEF APPBOOT +; + ; IF THIS IS AN APPLICATION BOOT, WE CAPTURE THE CURRENT BANK ID + ; AND UPDATE THE PROXY IMAGE. LATER, WHEN THE PROXY IMAGE IS COPIED + ; TO IT'S RUNNING LOCATION AT TOP OF RAM, THE CORRECT HB_CURBNK + ; VALUE WILL BE INSTALLED. NOTE: THE ADDRESSES IN THE PROXY + ; IMAGE ARE FOR IT'S RUNNING LOCATION, SO WE NEED TO USE *MATH* + ; TO DERIVE THE LOCATION OF HB_CURBNK IN THE IMAGE. + LD A,(HB_CURBNK) + LD (HB_CURBNK - HBX_LOC + HBX_IMG),A +; +#ENDIF ; #IF ((PLATFORM == PLT_DUO) & TRUE) ; THIS ARBITRARY DELAY SEEMS TO HELP DUODYNE CPU V1.0 SYSTEMS @@ -1372,6 +1485,7 @@ BOOTWAIT: ; ;LD A,(RTCDEFVAL) ; GET DEFAULT VALUE LD A,RTCDEF ; DEFAULT VALUE + EZ80_IO() OUT (RTCIO),A ; SET IT ; #IF (PLATFORM == PLT_N8) @@ -1383,6 +1497,7 @@ BOOTWAIT: LD A,RPH_DEFACR ; ENSURE RPH ACR OUT0 (RPH_ACR),A ; ... REGISTER IS INITIALIZED #ENDIF + ; ; INITIALIZE DIAGNOSTIC AND/OR FRONT PANEL LED(S) TO INDICATE THE ; SYSTEM IS ALIVE. WE HAVE NO RAM AT THIS TIME, SO WE CANNOT USE @@ -1396,9 +1511,12 @@ BOOTWAIT: LD A,DIAG_01 #ENDIF ; + EZ80_IO() OUT (FPLED_IO),A + #ENDIF ; + #IF (LEDENABLE) #IF ((LEDMODE == LEDMODE_STD) | (LEDMODE == LEDMODE_SC)) XOR A ; LED IS INVERTED, TURN IT ON @@ -1429,7 +1547,7 @@ BOOTWAIT: LD C,Z280_MSR ; MASTER STATUS REGISTER LD HL,$0000 ; SYS MODE, NO INTERRUPTS LDCTL (C),HL ; DO IT -; +; ; SET MAXIMUM I/O WAIT STATES FOR NOW LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER LD HL,$0033 ; 3 I/O WAIT STATES ADDED @@ -1460,11 +1578,11 @@ BOOTWAIT: ; LEFT ALONE. ; ; INITIALIZE ALL OF THE USER PAGE DESCRIPTORS WITH BLOCK MOVE -#IFDEF APPBOOT + #IFDEF APPBOOT LD A,$08 ; FIRST USER PDR IN HI MEM -#ELSE + #ELSE LD A,$00 ; FIRST USER PDR -#ENDIF + #ENDIF OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER LD HL,Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT @@ -1472,11 +1590,11 @@ BOOTWAIT: OTIRW ; OTIRW PROGS PDRS SEQUENTIALLY ; ; INITIALIZE ALL OF THE SYSTEM PAGE DESCRIPTORS WITH BLOCK MOVE -#IFDEF APPBOOT + #IFDEF APPBOOT LD A,$18 ; FIRST SYSTEM PDR IN HI MEM -#ELSE + #ELSE LD A,$10 ; FIRST SYSTEM PDR -#ENDIF + #ENDIF OUT (Z280_MMUPDRPTR),A ; SET THE PDR POINTER LD HL,Z280_BOOTPDRTBL ; START OF PDR VALUES TABLE LD C,Z280_MMUBLKMOV ; PDR BLOCK MOVE PORT @@ -1493,7 +1611,7 @@ BOOTWAIT: ALIGN(2) ; WORD ALIGN THE PDR TABLE ; Z280_BOOTPDRTBL: -#IFNDEF APPBOOT + #IFNDEF APPBOOT ; LOWER 32 K (BANKED) .DW ((Z2_BANK(BID_BOOT) + 0) << 4) | $A .DW ((Z2_BANK(BID_BOOT) + 1) << 4) | $A @@ -1503,7 +1621,7 @@ Z280_BOOTPDRTBL: .DW ((Z2_BANK(BID_BOOT) + 5) << 4) | $A .DW ((Z2_BANK(BID_BOOT) + 6) << 4) | $A .DW ((Z2_BANK(BID_BOOT) + 7) << 4) | $A -#ENDIF + #ENDIF ; UPPER 32 K (COMMON) .DW ((Z2_BANK(BID_COM) + 0) << 4) | $A .DW ((Z2_BANK(BID_COM) + 1) << 4) | $A @@ -1670,9 +1788,12 @@ ROMRESUME: ; REDUNDANT BECAUSE WE ARE ALREADY RUNNING IN THIS AREA. THE ; MAPPING OF THE SECOND 16K IS CRITICAL BECAUSE ALL ZETA 2 ; MMU REGISTERS WILL BE 0 AT RESET! + XOR A + EZ80_IO() OUT (MPGSEL_0),A ; PROG FIRST 16K MMU REGISTER INC A + EZ80_IO() OUT (MPGSEL_1),A ; PROG SECOND 16K MMU REGISTER #ENDIF ; @@ -1683,16 +1804,27 @@ ROMRESUME: #ELSE ; NORMAL ZETA 2 SYSTEM HAS FIXED 512K OF RAM. SETUP COMMON ; FOR TOP 32K OF THIS. - LD A,64 - 2 + ;LD A,64 - 2 + LD A,((ROMSIZE + RAMSIZE) / 16) - 2 #ENDIF ; + EZ80_IO() OUT (MPGSEL_2),A ; PROG THIRD 16K MMU REGISTER INC A + EZ80_IO() OUT (MPGSEL_3),A ; PROG FOURTH 16K MMU REGISTER ; ENABLE PAGING LD A,1 + EZ80_IO() OUT (MPGENA),A ; ENABLE MMU NOW +; + #IF (PLATFORM == PLT_FZ80) + ; REMOVE FPGA ROM MONITOR FROM THE CPU ADDRESS SPACE + LD A,%00000010 + OUT ($07),A + #ENDIF #ENDIF + ; ;-------------------------------------------------------------------------------------------------- ; PROXY INSTALLATION @@ -1703,7 +1835,7 @@ ROMRESUME: ; ; WE USE THE TWO BYTES IMMEDIATELY BELOW THE PROXY TO STORE A COUPLE ; VALUES TEMPORARILY BECAUSE WE MAY BE OPERATING IN ROM AT THIS POINT. -; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = APPBANK +; (HBX_LOC - 1) = BATCOND, (HBX_LOC - 2) = LOADBANK ; THERE IS NOTHING ON THE STACK AT THIS POINT SO, HERE, WE JUST RESET ; THE STACK TO HBX_LOC - 2. ; @@ -1725,7 +1857,7 @@ ROMRESUME: XOR A ; ZERO MEANS LOW BAT LD (HL),A ; FIRST RAM ACCESS INC A ; 1 MEANS BAT OK - LD (HL),A ; SECOND RAM ACCESS (BLOLCKED IF BATTERY ISSUE) + LD (HL),A ; SECOND RAM ACCESS (BLOCKED IF BATTERY ISSUE) ; ; INSTALL PROXY IN UPPER MEMORY ; @@ -1783,8 +1915,10 @@ S100MON_SKIP: ; SEE COMMENTS ABOVE REGARDING THE FUNKY WAY THAT THE RTCDEFVAL IS ; CREATED. ; + LD A,(RTCDEFVAL) LD (HB_RTCVAL),A + EZ80_IO() OUT (RTCIO),A ; SET IT DIAG(1) ; REAPPLY CURRENT DIAG LED SETUP ; @@ -1825,23 +1959,23 @@ S100MON_SKIP: ; MBC BANK SELECT MASK SETUP ;-------------------------------------------------------------------------------------------------- ; -; THE MBC RAM BOARD CAN CONTAIN 1 OR 2 RAM CHIPS. THE COMMON RAM BANK IS +; THE MBC RAM BOARD CAN CONTAIN 1 OR 2 RAM CHIPS. THE COMMON RAM BANK IS ; FIXED BY HARDWARE TO BE THE TOP 32K OF THE *FIRST* RAM CHIP. WHEN THERE -; ARE 2 RAM CHIPS INSTALLED, THE HARDWARE WILL THUS PLACE THE COMMON RAM IN -; THE MIDDLE OF PHYSICAL RAM. HBIOS REQUIRES THAT THE COMMON RAM BANK BE -; MAPPED TO THE VERY LAST 32K OF PHYSICAL RAM. THIS IS REQUIRED SO THAT -; THE RAM DISK BANKS CAN BE SEQUENTIAL. TO WORK AROUND THIS, WE USE AN -; XOR MASK THAT IS APPLIED DURING BANK SELECT. THIS MASK WILL FLIP THE -; HIGH ORDER BANK SELECT BIT (WHEN 2 RAM CHIPS ARE USED) SO THAT THE TWO -; RAM CHIPS WIND UP "REVERSED" AND THE FIXED COMMON BANK WINDS UP AT THE +; ARE 2 RAM CHIPS INSTALLED, THE HARDWARE WILL THUS PLACE THE COMMON RAM IN +; THE MIDDLE OF PHYSICAL RAM. HBIOS REQUIRES THAT THE COMMON RAM BANK BE +; MAPPED TO THE VERY LAST 32K OF PHYSICAL RAM. THIS IS REQUIRED SO THAT +; THE RAM DISK BANKS CAN BE SEQUENTIAL. TO WORK AROUND THIS, WE USE AN +; XOR MASK THAT IS APPLIED DURING BANK SELECT. THIS MASK WILL FLIP THE +; HIGH ORDER BANK SELECT BIT (WHEN 2 RAM CHIPS ARE USED) SO THAT THE TWO +; RAM CHIPS WIND UP "REVERSED" AND THE FIXED COMMON BANK WINDS UP AT THE ; END OF THE RAM BANKS. THE MASK IS SETUP HERE BASED ON THE NUMBER OF RAM ; CHIPS AND THEIR SIZE. NOTE THAT THE NUMBER OF RAM CHIPS IS INFERRED BY ; THE TOTAL RAM SIZE. A SINGLE CHIP WILL BE EITHER 128K OR 512K. IF THE ; TOTAL RAM SIZE OF THE SYSTEM IS 256K OR 1M, THEN THERE MUST BE TWO CH -; IPS. THE RESULTING BANK SELECT MASK IS INSERTED INTO THE MBC BANK +; IPS. THE RESULTING BANK SELECT MASK IS INSERTED INTO THE MBC BANK ; SELECT ROUTINE. -; -#IF (MEMMGR == MM_MBC) +; +#IF (MEMMGR == MM_MBC) ; ; ALTHOUGH DYNAMIC SYSTEM RAM SIZING IS NOT POSSIBLE FOR MBC ; (SEE COMMENTS ABOVE), WE ARE STILL DOING THE MASK SETUP @@ -1875,6 +2009,7 @@ MBC_SINGLE: ; COPY OURSELVES TO HBIOS BANK IN RAM ; LD A,(HB_CURBNK) ; GET CURRENT BANK ID + LD (HBX_LOC - 2),A ; SAVE THE LOAD BANK ; ; CHECK TO SEE IF WE ARE ALREADY RUNNING IN THE HBIOS RAM ; BANK AND SKIP THE COPY IF SO (DON'T COPY OVER OURSELVES). @@ -1882,7 +2017,7 @@ MBC_SINGLE: ; FULL RESTART OF A SYSTEM USING THE EXISTING HBIOS COPY. ; NOTE THAT THIS TEST WORKS BECAUSE BID_BIOS == BID_BOOT ; IN THESE SCENARIOS. - CP BID_BIOS ; SAVE AS BIOS BANK? + CP BID_BIOS ; SAME AS BIOS BANK? JR Z,HB_START1 ; IF SO, SKIP ; LD (HB_SRCBNK),A ; CURRENT BANK IS SOURCE @@ -1939,11 +2074,96 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK LD A,H ; GET FIRST BYTE PUSHED LD (HB_BATCOND),A ; ... AND SAVE AS BAT COND ; -; IF APPBOOT, WE NEED TO FIX UP A FEW THINGS IN PAGE ZERO -; ;;; SHOULD THIS BE DONE FOR AN HBIOS RESTART IN PLACE??? +#IF FALSE +; +; POPULATE THE CRITICAL RAM BANK NUMBERS. +; +; ASSUME THAT CB_RAMBANKS IS THE NUMBER OF 32K RAM BANKS THAT HAS BEEN SET EITHER +; AT ASSEMBLY TIME OR BY PROBING THE ACTUAL AVAILABLE MEMORY (NOT IMPLEMENTED YET). +; + LD A,(CB_RAMBANKS) ; CALCULATE TOP RAMBANK + ADD A,BID_RAM0 ; AS FIRST RAMBANK + + DEC A ; #RAMBANKS - 1 +; + LD HL,CB_BIDCOM + LD B,4 +CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM + INC HL ; POPULATE CB_BIDUSR + DEC A ; POPULATE CB_BIDBIOS + DJNZ CB_IDS ; POPULATE CB_BIDAUX +; + LD A,(CB_BIDUSR) + LD (HB_SRCBNK),A ; POPULATE HB_SRCBNK + LD (HB_DSTBNK),A ; POPULATE HB_DSTBNK +; + LD A,BID_RAM0 ; POPULATE CB_BIDRAMD0 ; START RAMBANK + LD (HL),A + INC HL +; + LD A,(CB_RAMBANKS) ; POPULATE CB_BIDRAMDN ; END RAMBANK + DEC A + SUB TOT_RAM_RB + LD (HL),A +; +#ENDIF +; +;-------------------------------------------------------------------------------------------------- +; INTERRUPT MANAGEMENT SETUP +;-------------------------------------------------------------------------------------------------- +; +; SETUP INTERRUPT VECTOR TABLE ADDRESS(ES) AND TRANSITION TO +; OPERATING INTERRUPT MODE. NOTE THAT INTERRUPTS REMAIN +; DISABLED AT THIS POINT. +; +#IF (CPUFAM != CPU_EZ80) +#IF ((INTMODE == 2) | ((INTMODE == 1) & (CPUFAM == CPU_Z180))) + ; SETUP Z80 IVT AND INT MODE 2 + LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS + LD I,A ; ... AND PLACE IT IN I REGISTER + + #IF (CPUFAM == CPU_Z180) + ; SETUP Z180 IVT + XOR A ; SETUP LO BYTE OF IVT ADDRESS + OUT0 (Z180_IL),A ; ... AND PLACE IN Z180 IL REGISTER + #ENDIF + + #IF (INTMODE == 2) + IM 2 ; SWITCH TO INT MODE 2 + #ENDIF +#ENDIF +; +#IF (MEMMGR == MM_Z280) + ; NOW POINT TO RAM COPY OF Z280 INT/TRAP TABLE + ; HL IS TOP 16 BITS OF PHYSICAL ADDRESS OF IVT + ; IVT *MUST* BE ON A 4K BOUNDARY + LD C,Z280_VPR + LD HL,0 + (((PBANK(BID_BIOS) << 15) + Z280_IVT) >> 8) + LDCTL (C),HL +#ENDIF +; +#IF (INTMODE == 3) +; + ; SETUP Z280 INT A FOR VECTORED INTERRUPTS + LD HL,%0010000000000000 + LD C,Z280_ISR + LDCTL (C),HL +; + ; TRANSITION TO INTERRUPT MODE 3 + IM 3 +; +#ENDIF +#ENDIF +; +;-------------------------------------------------------------------------------------------------- +; APPLICATION BOOT INITIALIZATION +;-------------------------------------------------------------------------------------------------- +; +; IF APPBOOT, WE NEED TO FIX UP A FEW THINGS IN PAGE ZERO AND +; COPY THE PAYLOAD CONTAINING ROMLDR, MONITOR, AND ZSDOS TO AUX BANK. ; #IFDEF APPBOOT ; + ;;; SHOULD THIS BE DONE FOR AN HBIOS RESTART IN PLACE??? ; MAKE SURE RST 08 VECTOR IS RIGHT LD A,$C3 LD ($0008),A @@ -1967,40 +2187,37 @@ HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK INC HL LD (HL),$4D #ENDIF -#ENDIF -; -#IF FALSE -; -; POPULATE THE CRITICAL RAM BANK NUMBERS. -; -; ASSUME THAT CB_RAMBANKS IS THE NUMBER OF 32K RAM BANKS THAT HAS BEEN SET EITHER -; AT ASSEMBLY TIME OR BY PROBING THE ACTUAL AVAILABLE MEMORY (NOT IMPLEMENTED YET). ; - LD A,(CB_RAMBANKS) ; CALCULATE TOP RAMBANK - ADD A,BID_RAM0 ; AS FIRST RAMBANK + - DEC A ; #RAMBANKS - 1 + ; CHECK TO SEE IF THIS IS AN IN-PLACE RESTART. IF SO, + ; WE NEED TO SKIP THE COPY OF THE CONCATENATED OS IMAGES BELOW. + LD A,(HB_RAMFLAG) ; GET THE FLAG + OR A ; TEST IT + JR NZ,HB_START2 ; IF SET, SKIP + DEC A ; SET FLAG + LD (HB_RAMFLAG),A ; SAVE IT ; - LD HL,CB_BIDCOM - LD B,4 -CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM - INC HL ; POPULATE CB_BIDUSR - DEC A ; POPULATE CB_BIDBIOS - DJNZ CB_IDS ; POPULATE CB_BIDAUX + ; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS + ; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER. + LD A,(HB_CURBNK) ; GET CURRENT BANK ID + LD (HB_SRCBNK),A ; SETUP SOURCE BANK + LD A,BID_AUX ; DEST BANK IS AUX BANK + LD (HB_DSTBNK),A ; SETUP DESTINATION BANK + LD HL,HB_END ; COPY FROM END OF HBIOS + LD DE,0 ; TO START OF TARGET BANK + LD BC,$8000 ; COPY ENTIRE 32KB BANK + CALL HBX_BNKCPY ; ELSE NORMAL BANK COPY + JR HB_START2 ; CONTINUE ; - LD A,(CB_BIDUSR) - LD (HB_SRCBNK),A ; POPULATE HB_SRCBNK - LD (HB_DSTBNK),A ; POPULATE HB_DSTBNK +;;; RELOCATE THIS DATA FIELD +HB_RAMFLAG .DB $00 ; - LD A,BID_RAM0 ; POPULATE CB_BIDRAMD0 ; START RAMBANK - LD (HL),A - INC HL +#ENDIF ; - LD A,(CB_RAMBANKS) ; POPULATE CB_BIDRAMDN ; END RAMBANK - DEC A - SUB TOT_RAM_RB - LD (HL),A +HB_START2: ; -#ENDIF +;-------------------------------------------------------------------------------------------------- +; GENERAL HBIOS INITIALIZATION +;-------------------------------------------------------------------------------------------------- ; ; CLEAR DISPATCH TABLE ENTRIES ; @@ -2011,6 +2228,50 @@ CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM LD (SND_CNT),A ; SND DEVICES LD (RTC_DISPACT),A ; RTC DEVICE LD (DSKY_DISPACT),A ; DSKY DEVICE + LD HL,RTC_DISPERR ; DEFAULT RTC DISPADR + LD (RTC_DISPADR),HL ; SET IT + LD HL,DSKY_DISPERR ; DEFAULT DSKY DISPADR + LD (DSKY_DISPADR),HL ; SET IT +; +; INITIALIZE SOME HCB ENTRIES +; + OR $FF ; $FF TO ACCUM + LD (CB_CRTDEV),A ; RESET CRT DEVICE +; +; CLEAR INTERRUPT VECTOR TABLES +; +; THIS IS REALLY ONLY REQUIRED ON A RESTART, BUT IT DOESN'T HURT TO +; DO IT ALL THE TIME. +; + LD HL,HB_IVT + 1 ; FIRST VECTOR (IM2) + LD B,16 ; CLEAR 16 VECTORS + CALL HB_CLRIVT ; DO IT + LD HL,HB_IM1INT + 1 ; FIRST VECTOR (IM1) + LD B,8 ; CLEAR 8 VECTORS + CALL HB_CLRIVT ; DO IT + XOR A ; ZERO ACCUM + LD (HB_IM1CNT),A ; ... TO CLEAR IM1 VECTOR CNT + LD HL,HB_IM1INT ; POINTER TO START OF IM1 IVT + LD (HB_IM1PTR),HL ; ... TO CLEAR IM1 PTR + + LD HL,HB_TICK + LD (VEC_TICK + 1),HL + LD HL,HB_SECOND + LD (VEC_SECOND + 1),HL + + JR HB_CLRIVT_Z ; DONE, JUMP OVER SUBROUTINE +; +HB_CLRIVT: + LD (HL),HB_BADINT & $FF + INC HL + LD (HL),HB_BADINT >> 8 + INC HL + INC HL + INC HL + DJNZ HB_CLRIVT + RET +; +HB_CLRIVT_Z: ; ; INITIALIZE HEAP STORAGE ; @@ -2036,6 +2297,7 @@ CB_IDS: LD (HL),A ; POPULATE CB_BIDCOM ; 2: Z8S180 - ORIGINAL S-CLASS, REV. K, AKA SL1960, NO ASCI BRG ; 3: Z8S180 - REVISED S-CLASS, REV. N, W/ ASCI BRG ; 4: Z8280 +; 5: eZ80 ; LD HL,0 ; L = 0 MEANS Z80 ; @@ -2089,6 +2351,10 @@ HB_CPU1: ; SOME DRIVERS NEED TO BE CALLED AS EARLY AS WE CAN ONE AN OPERATING ; ENVIRONMENT IS ESTABLISHED. ; +#IF (CPUFAM == CPU_EZ80) + ; THIS WILL RE-ASSIGN HB_CPUTYPE + CALL EZ80_PREINIT +#ENDIF #IF (SN76489ENABLE) ; SN76489 CHIP GENERATES UGLY NOISE AFTER HARDWARE RESET. ; WE CALL THIS DRIVER'S PREINIT ASAP TO SHUT OFF THE NOISE. @@ -2104,38 +2370,45 @@ HB_CPU1: ; DSKY INITIALIZATION AND ANNOUNCEMENT ;-------------------------------------------------------------------------------------------------- ; -#IF (DSKYENABLE) - #IF (ICMENABLE) +;;;#IF (DSKYENABLE) +#IF (ICMENABLE) CALL ICM_PREINIT - #ENDIF - #IF (PKDENABLE) +#ENDIF +#IF (PKDENABLE) CALL PKD_PREINIT - #ENDIF - #IF (H8PENABLE) +#ENDIF +; + ;;;; ANNOUNCE OURSELVES ON DSKY + ;;;LD HL,MSG_HBVER + 5 + ;;;LD A,(DSKY_HEXMAP + RMJ) + ;;;OR $80 + ;;;LD (HL),A + ;;;INC HL + ;;;LD A,(DSKY_HEXMAP + RMN) + ;;;OR $80 + ;;;LD (HL),A + ;;;INC HL + ;;;LD A,(DSKY_HEXMAP + RUP) + ;;;LD (HL),A + ;;;LD HL,MSG_HBVER + ;;;LD B,BF_DSKYSHOWSEG + ;;;CALL DSKY_DISPATCH +;;;#ENDIF +#IF (LCDENABLE) + CALL LCD_PREINIT +#ENDIF +#IF (H8PENABLE) CALL H8P_PREINIT - #ENDIF -; - ; ANNOUNCE OURSELVES ON DSKY - LD HL,MSG_HBVER + 5 - LD A,(DSKY_HEXMAP + RMJ) - OR $80 - LD (HL),A - INC HL - LD A,(DSKY_HEXMAP + RMN) - OR $80 - LD (HL),A - INC HL - LD A,(DSKY_HEXMAP + RUP) - LD (HL),A - LD HL,MSG_HBVER - LD B,BF_DSKYSHOWSEG - CALL DSKY_DISPATCH -#ENDIF +#ENDIF +#IF (GM7303ENABLE) + CALL GM7303_PREINIT +#ENDIF ; FPLEDS(DIAG_05) ; ; INIT OSCILLATOR SPEED FROM CONFIG ; +#IF (CPUFAM != CPU_EZ80) LD HL,CPUOSC / 1000 ; OSC SPD IN KHZ LD (HB_CPUOSC),HL ; INIT HB_CPUOSC DEFAULT ; @@ -2150,9 +2423,11 @@ HB_CPU1: ; ; RECORD THE UPDATED CPU OSCILLATOR SPEED ; -#IF ((CPUFAM == CPU_Z180) | (CPUSPDCAP == SPD_HILO)) +#IF ((CPUFAM == CPU_Z180) | (CPUSPDCAP == SPD_HILO) | (PLATFORM=PLT_HEATH)) ; SPEED MEASURED WILL BE HALF OSCILLATOR SPEED ; SO RECORD DOUBLE THE MEASURED VALUE + ; FOR HEATH, WE ARE ASSUMING THAT THE CPU SPEED DIVISOR WAS + ; PREVIOUSLY SET TO $01 MEANING HALF OF OSCILLATOR SPEED. SLA L RL H #ENDIF @@ -2160,6 +2435,7 @@ HB_CPU1: LD (HB_CPUOSC),HL ; RECORD MEASURED SPEED ; HB_CPU2: +#ENDIF ; ;-------------------------------------------------------------------------------------------------- ; FINALIZE OPERATING CPU SPEED @@ -2185,6 +2461,12 @@ HB_CPU2: #ENDIF #ENDIF ; +#IF (PLATFORM == PLT_HEATH) + ; ADJUST HL TO REFLECT HALF SPEED OPERATION + SRL H ; ADJUST HL ASSUMING + RR L ; HALF SPEED OPERATION +#ENDIF +; #IF ((CPUSPDCAP==SPD_HILO) & (PLATFORM==PLT_SBC)) #IF (CPUSPDDEF==SPD_HIGH) ; SET HIGH SPEED VIA RTC LATCH @@ -2207,7 +2489,7 @@ HB_CPU2: ; ADJUST HL TO REFLECT HALF SPEED OPERATION SRL H ; ADJUST HL ASSUMING RR L ; HALF SPEED OPERATION -; +; #IF (Z180_CLKDIV >= 1) LD A,(HB_CPUTYPE) ; GET CPU TYPE CP 2 ; Z8S180 REV K OR BETTER? @@ -2322,52 +2604,9 @@ HB_CPU3: ; ;;; LOCATION OF THIS CODE??? ; +#IF (CPUFAM != CPU_EZ80) LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY -; -;-------------------------------------------------------------------------------------------------- -; INTERRUPT MANAGEMENT SETUP -;-------------------------------------------------------------------------------------------------- -; -; SETUP INTERRUPT VECTOR TABLE ADDRESS(ES) AND TRANSITION TO -; OPERATING INTERRUPT MODE. NOTE THAT INTERRUPTS REMAIN -; DISABLED AT THIS POINT. -; -#IF ((INTMODE == 2) | ((INTMODE == 1) & (CPUFAM == CPU_Z180))) - ; SETUP Z80 IVT AND INT MODE 2 - LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS - LD I,A ; ... AND PLACE IT IN I REGISTER - - #IF (CPUFAM == CPU_Z180) - ; SETUP Z180 IVT - XOR A ; SETUP LO BYTE OF IVT ADDRESS - OUT0 (Z180_IL),A ; ... AND PLACE IN Z180 IL REGISTER - #ENDIF - - #IF (INTMODE == 2) - IM 2 ; SWITCH TO INT MODE 2 - #ENDIF -#ENDIF -; -#IF (MEMMGR == MM_Z280) - ; NOW POINT TO RAM COPY OF Z280 INT/TRAP TABLE - ; HL IS TOP 16 BITS OF PHYSICAL ADDRESS OF IVT - ; IVT *MUST* BE ON A 4K BOUNDARY - LD C,Z280_VPR - LD HL,0 + (((PBANK(BID_BIOS) << 15) + Z280_IVT) >> 8) - LDCTL (C),HL -#ENDIF -; -#IF (INTMODE == 3) -; - ; SETUP Z280 INT A FOR VECTORED INTERRUPTS - LD HL,%0010000000000000 - LD C,Z280_ISR - LDCTL (C),HL -; - ; TRANSITION TO INTERRUPT MODE 3 - IM 3 -; #ENDIF ; ;-------------------------------------------------------------------------------------------------- @@ -2707,34 +2946,21 @@ NXTMIO: LD A,(HL) NOT_REC_M2: ; FPLEDS(DIAG_08) - -#IF (PLATFORM == PLT_NABU) & TRUE -; - ; GET CURRENT VALUE OF PSG ENABLE REGISTER - LD A,7 - OUT (NABU_RSEL),A - NOP - IN A,(NABU_RDAT) - LD B,A -; - ; GET CURRENT VALUE OF PSG ENABLE REGISTER - LD A,7 - OUT (NABU_RSEL),A - NOP - IN A,(NABU_RDAT) - LD C,A -; - ; DUMP IT - CALL PC_ASTERISK - LD A,B - CALL PRTHEXBYTE - LD A,C - CALL PRTHEXBYTE - CALL PC_ASTERISK ; +#IF FALSE + LD DE,$0123 + LD HL,$4567 + LD B,BF_DSKYSHOWHEX + CALL DSKY_DISPATCH + CALL LDELAY + CALL LDELAY + LD DE,$89AB + LD HL,$CDEF + LD B,BF_DSKYSHOWHEX + CALL DSKY_DISPATCH + CALL LDELAY + CALL LDELAY #ENDIF - - ; ;-------------------------------------------------------------------------------------------------- ; IO PORT SCAN @@ -2840,13 +3066,24 @@ HB_Z280BUS: HB_Z280BUS1: PRTS("MHz$") ; SUFFIX #ENDIF + +#IF (CPUFAM == CPU_EZ80) + CALL EZ80_RPT_FIRMWARE +#ENDIF + ; ;-------------------------------------------------------------------------------------------------- ; DISPLAY CPU CONFIGURATION ;-------------------------------------------------------------------------------------------------- ; CALL NEWLINE +; +; DISPLAY MEMORY TIMINGS +; +#IF (CPUFAM == CPU_EZ80) + CALL EZ80_RPT_TIMINGS +#ELSE #IF (CPUFAM == CPU_Z280) LD A,Z280_MEMLOWAIT CALL PRTDECB @@ -2865,6 +3102,13 @@ HB_Z280BUS1: CALL PRTSTRD .TEXT " MEM W/S, $" #ENDIF +#ENDIF ; CPUFAM = CPU_EZ80 +; +; DISPLAY I/O TIMINGS +; +#IF (CPUFAM == CPU_EZ80) + ; ALREADY REPORTED BY DRIVER +#ELSE LD A,1 #IF (CPUFAM == CPU_Z180) LD A,Z180_IOWAIT + 1 @@ -2883,6 +3127,10 @@ HB_Z280BUS1: CALL PRTSTRD .TEXT " INT W/S$" #ENDIF +#ENDIF //CPUFAM = CPU_EZ80 +; +; DISPLAY INTERRUPT MODE +; #IF (INTMODE > 0) CALL PRTSTRD .TEXT ", INT MODE $" @@ -2987,6 +3235,11 @@ HB_Z280BUS1: LDCTL HL,(C) CALL PRTHEXWORDHL CALL PC_SPACE + PRTS("ISR=$") + LD C,Z280_ISR ; INTERRUPT STATUS REGISTER + LDCTL HL,(C) + CALL PRTHEXWORDHL + CALL PC_SPACE PRTS("BTCR=$") LD C,Z280_BTCR ; BUS TIMING AND CONTROL REGISTER LDCTL HL,(C) @@ -3125,6 +3378,32 @@ IS_REC_M1: CALL CALLLIST ; ;-------------------------------------------------------------------------------------------------- +; NV-SWITCH INITITIALISATION +; Requires functional RTC NVR +;-------------------------------------------------------------------------------------------------- +; +NVR_INIT: + ; Check for the existence of NV RAM by attempting to read a byte + LD B,BF_RTCGETBYT ; GET RTC BYTE + LD C,0 ; FIRST Byte address in RTC + CALL RTC_DISPATCH ; CALL RTC + JR NZ,NVR_INIT_END ; GET BYTE Failed; Noting to do, HCB is correct. Status =0 + ; + CALL NVSW_READ ; read the full data into hcb + JR NZ, NVR_INIT_DEF ; failed to correclty read data + ; + CALL NVSW_CHECKSUM ; checksum calc into A + LD HL,CB_SWITCHCK ; address of HCB value + CP (HL) ; compare Caculated Check, with hcb Check Value + JR Z,NVR_INIT_END ; The same so success +NVR_INIT_DEF: + ; failed Read or Checksum + CALL NVSW_DEFAULTS ; set defaults into HCB, which include the "W" first byte + LD HL,CB_SWITCHES ; which is incorrect, need the value of 1 + LD (HL),1 ; to indicate we while not inited, we do have NVRAM +NVR_INIT_END: +; +;-------------------------------------------------------------------------------------------------- ; WATCHDOG ACTIVATION ;-------------------------------------------------------------------------------------------------- ; @@ -3217,6 +3496,28 @@ HB_WDZ: JR NZ,INITSYS3 ; NOT SET, BYPASS CONSOLE SWITCH #ENDIF ; + #IF (PLATFORM == PLT_FZ80) + ; IOBYTE: XXXXXVVC + ; 00- FORCE ONBOARD VGA/PS2 KBD (FV) + ; --1 FORCE PROPELLER CONSOLE (SCON) + ; 110 NORMAL USB SERIAL BOOT + ; + ; WE ASSUME THAT THE ONBOARD VGA (FV) IS ALWAYS DETECTED AND + ; WILL BE THE CURRENT CRTDEV. SCON IS ASSUMED TO BE THE + ; DEVICE AT CRTDEV + 1. THESE ARE REASONABLE ASSUMPTIONS + ; UNLESS THE DRIVER DETECTION OR DRIVER ORDER IS CHANGED. + IN A,($36) ; GET IO BYTE + AND %00000110 ; ISOLATE BITS + JR Z,HB_CRTACT ; FORCE ONBOARD CRT + IN A,($36) ; GET IO BYTE + AND %00000001 ; ISOLATE BIT + JR Z,INITSYS3 ; NORMAL USB SERIAL BOOT + LD A,(CB_CRTDEV) ; GET CRT DEV + INC A ; SWITCH FROM FV -> SCON + LD (CB_CRTDEV),A ; SAVE IT AND DO CONSOLE SWITCH + #ENDIF +; +HB_CRTACT: LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE LD (HB_NEWCON),A ; AND QUEUE TO SWITCH ; @@ -3278,7 +3579,7 @@ HB_FP2: LD B,A ; MOVE TO B LD A,SECCON ; GET SEC CONSOLE SETTING CP $FF ; $FF MEANS USE INCREMENT - JR NZ,HB_FP3 ; BYPASS IF NOT $FF + JR NZ,HB_FP3 ; BYPASS IF NOT $FF ; ; INCREMENT CONSOLE UNIT LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT @@ -3446,11 +3747,12 @@ DBG_NOTE: ; #ENDIF ; -; DIAGNOSTIC ROUTINE TO PLAY A BEEP -; -#IFDEF TESTING - CALL SND_BEEP -#ENDIF + ; MAKE A LITTLE NOISE... + LD B,BF_SNDBEEP ; HBIOS BEEP FUNCTION + LD C,0 ; SOUND UNIT 0 + LD A,(SND_CNT) ; GET SOUND UNIT COUNT + OR A ; CHECK FOR ZERO + CALL NZ,HB_DISPATCH ; DO IT IF WE HAVE A SOUND UNIT ; ;-------------------------------------------------------------------------------------------------- ; TRANSITION TO USER LAND @@ -3527,6 +3829,9 @@ HB_INITRLEN .EQU (($ - HB_INIT_REC) / 2) ; HB_PCINITTBL: ; +#IF (SSERENABLE) + .DW SSER_PREINIT +#ENDIF #IF (ASCIENABLE) .DW ASCI_PREINIT #ENDIF @@ -3542,18 +3847,12 @@ HB_PCINITTBL: #IF (SIOENABLE) .DW SIO_PREINIT #ENDIF +#IF (EZ80UARTENABLE) + .DW EZUART_PREINIT +#ENDIF #IF (ACIAENABLE) .DW ACIA_PREINIT #ENDIF -#IF (PIOENABLE) - .DW PIO_PREINIT -#ENDIF -#IF LPTENABLE) - .DW LPT_PREINIT -#ENDIF -#IF (PIO_4P | PIO_ZP) - .DW PIO_PREINIT -#ENDIF #IF (UFENABLE) .DW UF_PREINIT #ENDIF @@ -3561,6 +3860,12 @@ HB_PCINITTBL: .DW TMS_PREINIT #ENDIF .DW TERM_PREINIT ; ALWAYS DO THIS ONE +#IF (PIOENABLE) + .DW PIO_PREINIT +#ENDIF +#IF (PIO_4P | PIO_ZP) + .DW PIO_PREINIT +#ENDIF ; HB_PCINITTBLLEN .EQU (($ - HB_PCINITTBL) / 2) ; @@ -3579,16 +3884,22 @@ HB_INITTBL: #IF (PCFENABLE) .DW PCF_INIT #ENDIF -#IF (DSKYENABLE) - #IF (ICMENABLE) +;;;#IF (DSKYENABLE) +#IF (ICMENABLE) .DW ICM_INIT - #ENDIF - #IF (PKDENABLE) +#ENDIF +#IF (PKDENABLE) .DW PKD_INIT - #ENDIF - #IF (H8PENABLE) +#ENDIF +;;;#ENDIF +#IF (LCDENABLE) + .DW LCD_INIT +#ENDIF +#IF (H8PENABLE) .DW H8P_INIT - #ENDIF +#ENDIF +#IF (GM7303ENABLE) + .DW GM7303_INIT #ENDIF #IF (PLATFORM == PLT_NABU) .DW NABU_INIT @@ -3605,6 +3916,9 @@ HB_INITTBL: #IF (SPKENABLE) .DW SP_INIT ; AUDIBLE INDICATOR OF BOOT START #ENDIF +#IF (SSERENABLE) + .DW SSER_INIT +#ENDIF #IF (ASCIENABLE) .DW ASCI_INIT #ENDIF @@ -3620,18 +3934,12 @@ HB_INITTBL: #IF (SIOENABLE) .DW SIO_INIT #ENDIF +#IF (EZ80UARTENABLE) + .DW EZUART_INIT +#ENDIF #IF (ACIAENABLE) .DW ACIA_INIT #ENDIF -#IF (PIOENABLE) - .DW PIO_INIT -#ENDIF -#IF (LPTENABLE) - .DW LPT_INIT -#ENDIF -#IF (PIO_4P | PIO_ZP) - .DW PIO_INIT -#ENDIF #IF (UFENABLE) .DW UF_INIT #ENDIF @@ -3653,9 +3961,19 @@ HB_INITTBL: #IF (DS7RTCENABLE) .DW DS7RTC_INIT #ENDIF +#IF (DS5RTCENABLE) + .DW DS5RTC_INIT +#ENDIF #IF (RP5RTCENABLE) .DW RP5RTC_INIT #ENDIF +#IF (EZ80RTCENABLE) + .DW EZ80RTC_INIT +#ENDIF +#IF (CPUFAM == CPU_EZ80) + ; INITALISE ONE OF THE SUPPORTED SYSTEM TIMER TICKS DRIVERS + .DW EZ80_TMR_INIT +#ENDIF #IF (VDUENABLE) .DW VDU_INIT #ENDIF @@ -3677,6 +3995,21 @@ HB_INITTBL: #IF (VRCENABLE) .DW VRC_INIT #ENDIF +#IF (FVENABLE) + .DW FV_INIT +#ENDIF +#IF (SCONENABLE) + .DW SCON_INIT +#ENDIF +#IF (LPTENABLE) + .DW LPT_INIT +#ENDIF +#IF (PIOENABLE) + .DW PIO_INIT +#ENDIF +#IF (PIO_4P | PIO_ZP) + .DW PIO_INIT +#ENDIF #IF (DMAENABLE) .DW DMA_INIT #ENDIF @@ -3710,18 +4043,15 @@ HB_INITTBL: #IF (SYQENABLE) .DW SYQ_INIT #ENDIF +#IF (CHENABLE) + .DW CH_INIT +#ENDIF #IF (PRPENABLE) .DW PRP_INIT #ENDIF #IF (PPPENABLE) .DW PPP_INIT #ENDIF -#IF (SCONENABLE) - .DW SCON_INIT -#ENDIF -#IF (CHENABLE) - .DW CH_INIT -#ENDIF #IF (ESPENABLE) .DW ESP_INIT #ENDIF @@ -3786,10 +4116,13 @@ HB_DISPATCH1: JP C,DSKY_DISPATCH CP BF_VDA + $10 ; $40-$4F: VIDEO DISPLAY ADAPTER JP C,VDA_DISPATCH - CP BF_SND + $08 ; $50-$58: SOUND DRIVERS + CP BF_SND + $10 ; $50-$5F: SOUND DRIVERS JP C,SND_DISPATCH - CP BF_SYS ; SKIP TO BF_SYS VALUE AT $F0 - JR C,HB_DISPERR ; ERROR IF LESS THAN BF_SYS + ; GAP TO E0 + CP BF_EXT ; SKIP TO BF_EXT VALUE AT $E0 + JR C,HB_DISPERR ; ERROR IF LESS THAN BF_EXT + CP BF_EXT + $10 ; $E0-$EF: EXTENDED + JP C,EXT_DISPATCH JP SYS_DISPATCH ; OTHERWISE SYS CALL ; FALL THRU ; @@ -3852,6 +4185,24 @@ CIO_SIZ .EQU CIO_MAX * 4 ; EACH ENTRY IS 4 BYTES CIO_CNT .DB 0 ; ENTRY COUNT PREFIX CIO_TBL .FILL CIO_SIZ,0 ; SPACE FOR ENTRIES ; +; CRT TYPE CHAR DEVICES CALL THIS TO REGISTER THAT THEY WANT TO BE THE +; DEFAULT CRT DEVICE. THIS ROUTINE WILL SET CB_CRTDEV WHEN CALLED THE +; FIRST TIME. SUBSEQUENT CALLS ARE IGNORED. THIS ENSURES THAT THE +; *FIRST* CRT DEVICE WINS. +; +CIO_SETCRT: + PUSH AF ; SAVE INCOMING CRT DEV NUM + LD A,(CB_CRTDEV) ; GET CURRENT CRT DEV NUM + INC A ; $FF -> $00 + JR NZ,CIO_SETCRT_Z ; IF ALREADY SET, LEAVE IT ALONE + POP AF ; RESTORE AF + LD (CB_CRTDEV),A ; SAVE CRT DEV NUM + RET ; AND DONE +; +CIO_SETCRT_Z: + POP AF ; RESTORE AF + RET ; AND DONE +; ;-------------------------------------------------------------------------------------------------- ; DISK I/O DEVICE FUNCTION DISPATCHER ;-------------------------------------------------------------------------------------------------- @@ -4155,6 +4506,7 @@ HB_IOBNK .DB 0 ; CURRENT IO BUFFER BANK ID HB_DSKCMD: HB_DSKUNIT .DB 0 ; CURRENT DISK UNIT HB_DSKFUNC .DB 0 ; CURRENT DISK FUNCTION +HB_DSKADR .FILL 4,0 ; CURRENT DISK BLOCK ADDRESS ; ;-------------------------------------------------------------------------------------------------- ; DSKY DISK ACTIVITY MONITOR @@ -4174,55 +4526,32 @@ HB_DSKFUNC .DB 0 ; CURRENT DISK FUNCTION ; HL: ADDRESS OF 32-BIT SECTOR NUMBER (LITTLE-ENDIAN) ; ALL REGISTERS PERSERVED ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) -; +#IF (DSKYDSKACT) HB_DSKACT: +; ; SAVE EVERYTHING PUSH AF PUSH BC PUSH DE PUSH HL ; - ; COPY VALUE TO LOCAL HEXBUF + ; COPY VALUE TO LOCAL HB_DSKADR CALL LD32 ; HB_DSKACT1: - LD BC,DSKY_HEXBUF + LD BC,HB_DSKADR CALL ST32 ; - ; USE DISK UNIT NUMBER FOR MSB - LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM - LD (DSKY_HEXBUF+3),A ; REPLACE HIGH BYTE W/ DISK # -; - ; CONVERT TO SEGMENT DISPLAY - LD HL,DSKY_HEXBUF ; INPUT POINTER - LD DE,DSKY_BUF ; TEMP BUF FOR OUTPUT - CALL DSKY_BIN2SEG ; CONVERT TO SEG DISPLAY -; - ; DECIMAL POINT FOR DISK UNIT SEPARATION - LD HL,DSKY_BUF+1 ; SECOND CHAR OF DISP - SET 7,(HL) ; TURN ON DECIMAL PT -; - ; DECIMAL POINT TO INDICATE WRITE ACTION - LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION - CP BF_DIOWRITE ; IS IT A WRITE? - JR NZ,HB_DSKACT2 ; IF NOT, SKIP - LD HL,DSKY_BUF+7 ; POINT TO CHAR 7 - SET 7,(HL) ; SET WRITE DOT -; -HB_DSKACT2: - ; UPDATE DISPLAY - LD HL,DSKY_BUF ; SEG DISPLAY BUF TO HL - LD B,BF_DSKYSHOWSEG ; SHOW SEG FUNCTION - CALL DSKY_DISPATCH ; DO IT + LD B,BF_DSKYEVENT + LD C,DSKY_EVT_DSKACT + CALL DSKY_DISPATCH ; ; CLEAN UP AND GO AWAY POP HL POP DE POP BC POP AF - RET ; DONE + JR HB_DSKACT_Z ; DONE ; ; THIS IS THE CHS VARIANT OF THE ABOVE. THIS IS USED BY CHS ORIENTED ; DISK DRIVERS (BASICALLY JUST FLOPPY). @@ -4244,7 +4573,15 @@ HB_DSKACTCHS: EX DE,HL JR HB_DSKACT1 ; - #ENDIF +HB_DSKACT_Z: + RET +; +#ELSE +; +HB_DSKACT: +HB_DSKACTCHS: + RET +; #ENDIF ; ;-------------------------------------------------------------------------------------------------- @@ -4269,6 +4606,9 @@ RTC_DISPERR: ; WILL ONLY SAVE THE FIRST ADDRESS SET ; RTC_SETDISP: + LD A,(RTC_DISPACT) ; GET ACTIVE FLAG + OR A ; IS IT ACTIVE? + RET NZ ; ABORT IF ALREADY ACTIVE LD (RTC_DISPADR),BC ; SAVE THE ADDRESS OR $FF ; FLAG ACTIVE VALUE LD (RTC_DISPACT),A ; SAVE IT @@ -4299,6 +4639,9 @@ DSKY_DISPERR: ; WILL ONLY SAVE THE FIRST ADDRESS SET ; DSKY_SETDISP: + LD A,(DSKY_DISPACT) ; GET ACTIVE FLAG + OR A ; IS IT ACTIVE? + RET NZ ; ABORT IF ALREADY ACTIVE LD (DSKY_DISPADR),BC ; SAVE THE ADDRESS OR $FF ; FLAG ACTIVE VALUE LD (DSKY_DISPACT),A ; SAVE IT @@ -4384,7 +4727,7 @@ SND_ADDENT: ; WORD DRIVER FUNCTION TABLE ADDRESS ; WORD UNIT SPECIFIC DATA (TYPICALLY A DEVICE INSTANCE DATA ADDRESS) ; -SND_FNCNT .EQU 8 ; NUMBER OF SND FUNCS (FOR RANGE CHECK) +SND_FNCNT .EQU 9 ; NUMBER OF SND FUNCS (FOR RANGE CHECK) SND_MAX .EQU 5 ; UP TO 5 UNITS SND_SIZ .EQU SND_MAX * 4 ; EACH ENTRY IS 4 BYTES ; @@ -4397,47 +4740,61 @@ SND_TBL .FILL SND_SIZ,0 ; SPACE FOR ENTRIES ; SPEAKER BEEP ROUTINE ;-------------------------------------------------------------------------------------------------- ; -;;; RELOCATE -; -; ROUTINE TO BEEP THE DEFAULT SOUND UNIT -; NEED TO CHECK FOR EXISTENCE OF SOUND UNIT +; ROUTINE TO BEEP A SOUND UNIT +; THE SOUND DRIVERS CAN DEFER THEIR BEEP FUNCTION TO THIS FUNCTION +; ON ENTRY, B = SOUND UNIT ; WHICH CHANNEL SHOULD BE USED? IS THERE A GOOD DEFAULT CHANNEL? ; SND_BEEP: - ; CHECK FOR AT LEAST 1 SOUND DEVICE - LD A,(SND_CNT) ; GET SOUND UNIT COUNT - OR A ; CHECK FOR ZERO - RET Z ; BAIL OUT IF NO SOUND UNITS - - ; PLAY A BEEP ON SOUND DEVICE UNIT 0 + ; RESET THE SOUND DEVICE TO START LD B,$50 ; SOUND RESET FUNCTION - LD C,0 ; SOUND UNIT NUMBER - CALL SND_DISPATCH ; DO IT + CALL SND_BEEP_DISP ; DO IT +; + ; SET VOLUME TO MAX LD B,$51 ; VOLUME - LD C,0 ; SOUND UNIT NUMBER LD L,$FF ; MAX - CALL SND_DISPATCH ; DO IT + CALL SND_BEEP_DISP ; DO IT +; + ; SET NOTE TO PLAY LD B,$53 ; SELECT NOTE - LD C,0 ; SOUND UNIT NUMBER - ;LD HL,0 ; A0# LD HL,244 ; B5 (CLOSE TO 1 KHZ) - CALL SND_DISPATCH ; DO IT - ;LD B,$56 ; DURATION - ;LD C,0 ; SOUND UNIT NUMBER - ;LD HL,500 ; 1/2 SECOND - ;CALL SND_DISPATCH ; DO IT + CALL SND_BEEP_DISP ; DO IT +; + ; START PLAYING THE SOUND LD B,$54 ; PLAY SOUND - LD C,0 ; SOUND UNIT NUMBER LD D,0 ; CHANNEL 0 - CALL SND_DISPATCH ; DO IT - LD DE,15625 ; PLAY FOR 1/4 SECOND + CALL SND_BEEP_DISP ; DO IT +; + ; WAIT A BIT FOR SOUND TO PLAY + LD DE,23436 ; PLAY FOR 1/3 SECOND CALL VDELAY ; WAIT WHILE TONE IS PLAYED - ;CALL LDELAY ; LET SOUND PLAY 1/2 SECOND +; LD B,$50 ; SOUND RESET FUNCTION - LD C,0 ; SOUND UNIT NUMBER - CALL SND_DISPATCH ; DO IT + CALL SND_BEEP_DISP ; DO IT +; + XOR A ; SIGNAL SUCCESS RET ; DONE ; +SND_BEEP_DISP: + ; CALL SOUND DISPATCHER PRESERVING BC ACROSS CALL + PUSH BC + CALL SND_DISPATCH + POP BC + RET +; +;-------------------------------------------------------------------------------------------------- +; EXTENDED FUNCTION DISPATCHER +;-------------------------------------------------------------------------------------------------- +; +; B: FUNCTION +; +EXT_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,EXT_SLICE ; $E0 + DEC A + JP HB_DISPERR ; ERROR COULD NOT FIND FUNCTION +; ;-------------------------------------------------------------------------------------------------- ; SYSTEM FUNCTION DISPATCHER ;-------------------------------------------------------------------------------------------------- @@ -4473,10 +4830,402 @@ SYS_DISPATCH: DEC A JP Z,SYS_INT ; $FC DEC A + JP HB_DISPERR ; ERROR COULD NOT FIND FUNCTION ; HB_DISP_END .EQU $ ; ;================================================================================================== +; Z280 INTERRUPT VECTOR TABLE +;================================================================================================== +; +HB_Z280IVT_BEG .EQU $ +; +; THE Z280 IVT MUST BE ON A 4K BOUNDARY. IT HAS BEEN LOCATED +; HERE IN AN EFFORT TO MINIMIZE WASTED SPACE. THERE SHOULD BE +; A LITTLE LESS THAN 4K OF CODE ABOVE. +; +#IF (MEMMGR == MM_Z280) +; +Z280_IVT_SLACK_ORG .EQU $ + ALIGN($1000) +Z280_IVT_SLACK .EQU $ - Z280_IVT_SLACK_ORG + .ECHO "Z280 IVT SLACK = " + .ECHO Z280_IVT_SLACK + .ECHO " bytes.\n" +; +Z280_IVT: + .DW 0, 0 ; RESERVED + .DW 0 ; NMI MSR + .DW 0 ; NMI VECTOR + .DW $0000 ; INT A MSR + .DW Z280_BADINT ; INT A VECTOR + .DW $0000 ; INT B MSR + .DW Z280_BADINT ; INT B VECTOR + .DW $0000 ; INT C MSR + .DW Z280_BADINT ; INT C VECTOR + .DW $0000 ; COUNTER/TIMER 0 MSR + .DW Z280_BADINT ; COUNTER/TIMER 0 VECTOR + .DW $0000 ; COUNTER/TIMER 1 MSR + .DW Z280_BADINT ; COUNTER/TIMER 1 VECTOR + .DW 0, 0 ; RESERVED + .DW $0000 ; COUNTER/TIMER 2 MSR + .DW Z280_BADINT ; COUNTER/TIMER 2 VECTOR + .DW $0000 ; DMA CHANNEL 0 MSR + .DW Z280_BADINT ; DMA CHANNEL 0 VECTOR + .DW $0000 ; DMA CHANNEL 1 MSR + .DW Z280_BADINT ; DMA CHANNEL 1 VECTOR + .DW $0000 ; DMA CHANNEL 2 MSR + .DW Z280_BADINT ; DMA CHANNEL 2 VECTOR + .DW $0000 ; DMA CHANNEL 3 MSR + .DW Z280_BADINT ; DMA CHANNEL 3 VECTOR + .DW $0000 ; UART RECEIVER MSR + .DW Z280_BADINT ; UART RECEIVER VECTOR + .DW $0000 ; UART TRANSMITTER MSR + .DW Z280_BADINT ; UART TRANSMITTER VECTOR + .DW $0000 ; SINGLE STEP TRAP MSR + .DW Z280_SSTEP ; SINGLE STEP TRAP VECTOR + .DW $0000 ; BREAK ON HALT TRAP MSR + .DW Z280_BRKHLT ; BREAK ON HALT TRAP VECTOR + .DW $0000 ; DIVISION EXCEPTION TRAP MSR + .DW Z280_DIVEXC ; DIVISION EXCEPTION TRAP VECTOR + .DW $0000 ; STACK OVERFLOW WARNING TRAP MSR + .DW Z280_STKOVR ; STACK OVERFLOW WARNING TRAP VECTOR + .DW $0000 ; ACCESS VIOLATION TRAP MSR + .DW Z280_ACCVIO ; ACCESS VIOLATION TRAP VECTOR + .DW $0000 ; SYSTEM CALL TRAP MSR + .DW Z280_SYSCALL ; SYSTEM CALL TRAP VECTOR + .DW $0000 ; PRIVILEGED INSTRUCTION TRAP MSR + .DW Z280_PRIVINST ; PRIVILEGED INSTRUCTION TRAP VECTOR + .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP MSR + .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP MSR + .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP MSR + .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP VECTOR + .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP MSR + .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP VECTOR + .DW 0, 0 ; RESERVED + .DW 0, 0 ; RESERVED + ; PROGRAM COUNTER VALUES FOR NMI/INTA (16) + .DW HBX_IV00 + .DW HBX_IV01 + .DW HBX_IV02 + .DW HBX_IV03 + .DW HBX_IV04 + .DW HBX_IV05 + .DW HBX_IV06 + .DW HBX_IV07 + .DW HBX_IV08 + .DW HBX_IV09 + .DW HBX_IV0A + .DW HBX_IV0B + .DW HBX_IV0C + .DW HBX_IV0D + .DW HBX_IV0E + .DW HBX_IV0F +; + ; THE REMAINDER OF THE Z280 IVT IS TRUNCATED HERE BECAUSE IT + ; TAKES A BUNCH OF SPACE AND IS NOT USED. WE SUPPORT ONLY + ; 16 VECTORED INTERRUPTS AND THEY MUST BE CONNECTED TO INTA. +; +#ENDIF +; +HB_Z280IVT_END .EQU $ +; +;================================================================================================== +; EXTENSION API FUNCTIONS +;================================================================================================== +; +HB_EXTAPI_BEG .EQU $ +; +;-------------------------------------------------------------------------------------------------- +; SLICE CALCULATE - GET DISK EXTENDED HARD DISK MEDIA INFORMATION +;-------------------------------------------------------------------------------------------------- +; This function is specificly intended for Hard Drives, where it will scan +; the partition table and return a Media ID, including hd1k (MID_HDNEW). +; It will also return the absolute LBA offset of the first sector in the slice +; If the slice number is invalid (wont fit) the Status will return an error +; If the Unit is not a hard disk the Media ID will be returned and slice ignored. +;-------------------------------------------------------------------------------------------------- +; ENTRY: +; B: FUNCTION 0xE0 EXT_SLICE +; D: DISK UNIT, preferably for a hard disk. +; E: SLICE, ignored if media is not a hard disk +; RETURNS: +; A: STATUS, -6 (parameter out of range) - if Slice is invalid +; Other errors Include ERR_NOUNIT, ERR_NOMEDIA, +; If any error is raised the other return values are undefined +; B: DEVICE ATTRIBUTES, as reported by DIODEVICE +; C: MEDIAID, including MID_HDNEW if hd1k partition is found +; DEHL: LBAOFFSET, of Slice if valid, 0 otherwise. +;-------------------------------------------------------------------------------------------------- +; +SLICE_SLICE .DB 0 ; SLICE ARGUMENT (E) +SLICE_UNIT .DB 0 ; UNIT ARGUMENT (D) +SLICE_DEVATT .DB 0 ; DEVICE ATTRIBUTES +SLICE_MID .DB 0 ; DISCOVERED MEDIAID +; +SLICE_WRKSTA .EQU $ +SLICE_LBAOFF .FILL 4,0 ; START OF PARTITION / SLICE (SECTORS) +SLICE_LBASIZ .FILL 4,0 ; SIZE OF MEDIA / PARTITION (SECTORS) +SLICE_SPS .DW 0 ; DISCOVERED SECTORS PER SLICE (16BIT) +SLICE_FND .DB 0 ; DID WE FIND A NON CPM PARTITION +SLICE_WRKSIZ .EQU $ - SLICE_WRKSTA ; SIZE OF WORKING DATA +; +EXT_SLICE: + ; SAVE CALL ARGUMENTS + LD (SLICE_SLICE),DE ; STORES DE -> SLICE/UNIT PARAMETERS + + ; READ DEVICE INFORMATION USING DIODEVICE FUNCTION + LD A,(SLICE_UNIT) + LD C,A ; UNIT ID PARAMETER INTO C + LD B,BF_DIODEVICE ; DRIVER FUNCTION = DISK MEDIA + CALL DIO_DISPATCH ; CALL DIO TO GET DEVICE ATTRIBUTES + RET NZ ; ABORT ON ERROR +; + ; DEVICE ATTRIBUTES IN C + LD A,C + LD (SLICE_DEVATT),A ; STORE DEVICE ATTRIBUTES +; + ; DETERMINE MEDIA IN DRIVE USING DIOMEDIA FUNCTION + LD A,(SLICE_UNIT) + LD C,A ; UNIT ID PARAMETER INTO C + LD E,1 ; ENABLE MEDIA CHECK/DISCOVERY + LD B,BF_DIOMEDIA ; DRIVER FUNCTION = DISK MEDIA + CALL DIO_DISPATCH ; CALL DIO TO GET MEDIAID (RESULT IN E) + RET NZ ; ABORT ON ERROR +; + ; CHECK MEDIA TYPE, ONLY HD IS APPLICABLE + LD A,E ; RESULTANT MEDIA ID TO ACCUM + LD (SLICE_MID),A ; INIT VALUE, MAY BE USED LATER + OR A ; SET FLAGS + JR Z,EXT_SLICE1A ; BAIL IF NO MEDIA + CP MID_HD ; IS IT A HARD DISK + JR Z,EXT_SLICE1B ; IS HD, CONTINUE TO PROCESS HD +; + ; NOT A HARD DISK, CHECK SLICE = 0 + LD A,(SLICE_SLICE) ; GET THE SLICE + OR A ; SET FLAGS + JP NZ,EXT_SLICE5C ; SLICE NOT ZERO - SIGNAL ERROR AND RETURN +; +EXT_SLICE1A: + ; RETURN MEDIA ID (NOT HD) WITH SUCCESS + LD DE,0 ; LBA VALUE WILL BE ZERO + LD HL,0 + JP EXT_SLICE6A ; RETURN SUCCESS +; +EXT_SLICE1B: + ; FOUND HD, NEED TO PROCESS MBR / PART TABLE + ; CLEAR WORKING STORAGE + LD HL,SLICE_WRKSTA ; HL SET TO FIRST BYTE + LD (HL),0 ; CLEAR FIRST BYTE + LD D,H + LD E,L + INC DE ; DE SET TO SECOND BYTE + LD BC,SLICE_WRKSIZ - 1 ; NUMBER OF LDIR COPIES + LDIR ; BLOCK COPY TO CLEAR WORKING STORAGE +; + ; SEEK TO SECTOR ZERO (MBR TABLE) + LD B,BF_DIOSEEK ; SEEK FUNCTION + LD A,(SLICE_UNIT) ; GET UNIT + LD C,A ; PUT IN C + LD DE,$8000 ; LBA SECTOR ZERO + LD HL,0 ; ASSUME LBA ACCESS FOR NOW + CALL DIO_DISPATCH ; DO IT + RET NZ ; ABORT ON ERROR +; + ; READ SECTOR ZERO (MBR TABLE) + LD B,BF_DIOREAD ; READ FUNCTION + LD A,(SLICE_UNIT) ; GET UNIT + LD C,A ; PUT IN C + LD A,(HB_CURBNK) ; GET CURRENT BANK ID + LD D,A ; PUT IN D + LD E,1 ; SECTOR COUNT + LD HL,HB_WRKBUF ; IO BUFFER TO USE + CALL DIO_DISPATCH ; DO IT + RET NZ ; ABORT ON ERROR +; + ; CHECK MBR OF DISK TO SEE IF IT HAS A PARTITION TABLE. + LD HL,HB_WRKBUF ; DSKBUF ADR + LD DE,$1FE ; OFFSET TO SIGNATURE + ADD HL,DE ; POINT TO SIGNATURE + LD A,(HL) ; GET FIRST BYTE + CP $55 ; CHECK FIRST BYTE + JR NZ,EXT_SLICE3C ; NO MATCH, NO PART TABLE + INC HL ; NEXT BYTE + LD A,(HL) ; GET SECOND BYTE + CP $AA ; CHECK SECOND BYTE + JR NZ,EXT_SLICE3C ; NO MATCH, NO PART TABLE +; + ; FOUND PARTITION TABLE - LOOP AND PROCESS PARTITION TABLE + LD HL,HB_WRKBUF ; DSKBUF ADR + LD DE,$1BE+4 ; OFFSET OF FIRST ENTRY PART TYPE + ADD HL,DE ; POINT TO IT + LD B,4 ; FOUR ENTRIES IN PART TABLE LOOP +EXT_SLICE2A: + LD A,(HL) ; GET PART TYPE + LD DE,4 + ADD HL,DE ; MOVE HL FWD TO GET TO LBA OFFSET + CP $2E ; CP/M PARTITION? + JR Z,EXT_SLICE3B ; HD1K, GRAB THE LBA OFFSET + CP $00 ; IS ANOTHER PARTITION TYPE, NOT CPM + JR NZ,EXT_SLICE3A ; OTHER VALID PART TYPE +EXT_SLICE2B: + LD DE,12 ; REMAINING SIZE TO GET TO NEXT PARTITION +EXT_SLICE2C: + ADD HL,DE ; BUMP TO NEXT PARTITION ENTRY - TYPE + DJNZ EXT_SLICE2A ; LOOP THRU TABLE + JR EXT_SLICE3C ; READ ALL - NO CP/M PARTITION FOUND +; +EXT_SLICE3A + ; FOUND OTHER (NOT CPM) PARTITION + LD A,(SLICE_FND) ; HAVE WE ALREADY FOUND PROCESSED NON CPM + OR A ; PARTITION, AND CAPTURED ITS START SECTOR, SO + JR NZ,EXT_SLICE2B ; IGNORE AND CONTINUTE TO NEXT PARTITION ENTRY +; +; NOTE THERE SLIGHT ISSUE HERE THAT WE ONLY CONSIDER THE FIRST NON-CPM PARTITION +; TO GET THE UPPER SIZE OF MEDIA, IDEALLY WE WOULD CONSIDER ALL, AND TAKE THE LOWEWST +; STARTING SECTOR - THIS IS A COMPRIMISE - OUT OF SEQUENCE PARTITIONS ARE UNLIKELY. +; + PUSH BC ; SAVE IT, BEING USED IN PARTITION LOOP + LD BC,4 ; IF NOT ALREADY SET - COPY 4 BYTES + LD DE,SLICE_LBASIZ ; FROM PARTION LBA OFFSET (HL) - TO WORKING LBA SIZE (DE) + LDIR ; COPY 4 BYTES + POP BC ; RESTORE +; + LD A,$FF + LD (SLICE_FND),A ; SET FOUND FLAG, SO DONT PROCESS ANY OTHERS + LD DE,8 ; AND INC HL BY 8 TO GET TO NEXT PARITION + JR EXT_SLICE2C ; CONTINUE TO NEXT PARTITION +; +EXT_SLICE3B: + ; FOUND CP/M (HD1K) PARTITION - RECORD THIS + LD A,MID_HDNEW ; DISCOVERED HD1K MEDIA + LD (SLICE_MID),A ; STORE IT + LD BC,SPS_HD1K ; DISCOVERED HD1K MEDIA + LD (SLICE_SPS),BC ; STORE IT +; + ; CAPTURE THE LBA OFFSET AND SECTOR COUNT FROM PARTITION + ; HL POINTS TO PART LBA OFFSET FIELD OF PART ENTRY + LD DE,SLICE_LBAOFF ; LOC TO STORE OFFSET AND SIZE + LD BC,8 ; 8 BYTES - LBA OFFSET AND SIZE + LDIR ; COPY IT +; + JR EXT_SLICE4A ; CONTINUE AND COMPUTE THE SLICE +; +EXT_SLICE3C: + ; NO PARTITION TABLE FOUND / NO CPM PARTITION + LD A,(SLICE_SLICE) ; IF SLICE = 0, WE BOOT THE DISK ITSELF. IGNORE SLICE(S) + OR A ; SET FLAGS FOR SLICE ARGUMENT, IF SLICE==0 + JR Z,EXT_SLICE5Z ; BYPASS ALL CALCS / CHECKS - JUST BOOT THE DISK + + ; BOOT SLICE WITH LEGACY SPS + LD BC,SPS_HD512 ; WITH HD512 SECTORS PER SLICE + LD (SLICE_SPS),BC ; STORE IT + + ; DID WE FIND AN OTHER (NOT CPM) PARTITION + LD A,(SLICE_FND) ; HAVE WE ALREADY FOUND PROCESSED NON CPM + OR A ; PARTITION, AND CAPTURED ITS START SECTOR, SO + JR NZ,EXT_SLICE4A ; MEDIA SIZE IS KNOWN BASED ON START OF PARTITION + + ; FIND THE PHYSICAL CAPCITY OF THE MEDIA CALL (DIOCAP) + LD B,BF_DIOCAP ; HBIOS FUNC: TO GET DISK LBA CAPACITY + LD A,(SLICE_UNIT) + LD C,A ; PUT DISK UNIT IN C FOR FUNC CALL + CALL DIO_DISPATCH ; DO IT - RETURNS SIZE in DE:HL + RET NZ ; ABORT ON ERROR + + ; UPDATE LBA SIZE FROM MEDIA SIZE + LD (SLICE_LBASIZ),HL ; LOWER ORDER BYTES - HL + EX DE,HL + LD (SLICE_LBASIZ+2),HL ; HIGHER ORDER BYTES - DE +; +EXT_SLICE4A: + ; COMPUTE THE START SECTOR (RELATIVE) FOR SLICE -> DE:HL + LD HL,0 ; STARTING SECTOR NUMBER + LD DE,0 ; ASSUMING A 0 OFFSET, SO CAN COMPARE TO SIZE + LD BC,(SLICE_SPS) + LD A,(SLICE_SLICE) + OR A ; SLICE NUMBER - SET FLAGS TO CHECK LOOP CTR + JR Z,EXT_SLICE5A ; NOTHING TO COUNT +EXT_SLICE4B: + ADD HL,BC ; ADD ONE SLICE (SPS) TO LOW WORD + JR NC,EXT_SLICE4C ; CHECK FOR CARRY + INC DE ; IF SO, BUMP HIGH WORD +EXT_SLICE4C: + DEC A ; DEC LOOP (SLICE) COUNTER + JR NZ,EXT_SLICE4B ; AND LOOP +; +EXT_SLICE5A: + ; DE:HL NOW CONTAINS THE STARTING SECTOR FOR SLICE + PUSH HL ; SAVE THE SECTOR OFFSET (SPS * SLICE NUMBER) + PUSH DE +; + ADD HL,BC ; ADD SPS, GET REQUIRED CAPCITY (UPPER SECTOR) + JR NC,EXT_SLICE5B + INC DE +EXT_SLICE5B: + ; DEHL HAS THE REQUIRED NUMBER OF SECTORS (ON MEDIA) FOR THE SLICE + PUSH DE ; SAVE DSK_REQ (MSW) + PUSH HL ; SAVE DSK_REQ (LSW) +; + ; CHECK DSK_CAPACITY >= CAP_REQUIRED, CF SET ON OVERFLOW + ; NO NEED SAVE ACTUAL RESULT + OR A ; CLEAR CARRY FOR SBC + LD HL,(SLICE_LBASIZ+0) ; CAPACITY LSW + POP DE ; REQUIRED LSW + SBC HL,DE ; CAPACITY - REQUIRED (LSW) + LD HL,(SLICE_LBASIZ+2) ; CAPAITY MSW + POP DE ; REQUIRED MSW + SBC HL,DE ; CAPACITY - REQUIRED (MSW) +; + ; POP STARTING OFSETT SECTOR + POP DE + POP HL +; + ; REQUIRE - CAPACITY -> GENERATES BORROW IF CAPITY > REQUIREMENT + JR NC,EXT_SLICE6 ; IF WE HAVE ENOUGH CAPACITY +; +EXT_SLICE5C: + ; SLICE WONT FIT - STOP AND RETURN ERROR + LD DE,0 + LD HL,0 ; EMTY OFFSET IN DEHL + LD A,(SLICE_DEVATT) + LD B,A ; DEVICE ATTRIBUTES IN B + LD A,(SLICE_MID) + LD C,A ; RETURN MEDIA ID IN C + LD A,ERR_RANGE ; OTHERWISE SIGNAL NOT ENOUGH CAPACITY + OR A + RET +; +EXT_SLICE5Z: + LD HL,0 ; BOOT THE DISK TO LBA = 0 + LD DE,0 ; +; +EXT_SLICE6: + ; FINAL CALC AND RETURN SUCCESS + ; ADD PARTITION OFFSET (START) TO DEHL TO GET ABSOLUTE SLICE OFFSET + LD BC,(SLICE_LBAOFF+0) ; LSB OF LBA OFFSET + ADD HL,BC ; ADD LSB OFFSET + EX DE,HL ; FLIP DE INTO HL + LD BC,(SLICE_LBAOFF+2) ; MSB OF LBA OFFSET + ADC HL,BC ; ADD MSB + EX DE,HL ; FLIP BACK DE:HL AS SLICE OFFSET +; +EXT_SLICE6A: + ; SLICE FITS - RETURN CORRECTLY + LD A,(SLICE_DEVATT) + LD B,A ; DEVICE ATTRIBUTES IN B + LD A,(SLICE_MID) + LD C,A ; RETURN MEDIA ID IN C + XOR A ; CLEAR FLAGS + RET ; RETUNING DE:HL AND C +; +;-------------------------------------------------------------------------------------------------- +; +HB_EXTAPI_END .EQU $ +; +;================================================================================================== ; SYSTEM API FUNCTIONS ;================================================================================================== ; @@ -4538,31 +5287,38 @@ SYS_RESWARM: ; SYS_RESCOLD: ; -#IF (MEMMGR == MM_Z280) +#IFDEF APPBOOT + JP HB_RESTART +#ELSE +; +; MAKE ROM BOOT BANK ACTIVE IN LOW SYS MEM +; + #IF (MEMMGR == MM_Z280) ; FOR Z280, NEED TO REMAP THE LOW 32K IN SYSTEM MODE AND ; CONTINUE AT ADDRESS ZERO. WE CANNOT RETURN HERE AFTER THE ; BNKSEL IS DONE BECAUSE THE SYSTEM BANK HAS BEEN CHANGED! - ; SO, WE PRESET THE STACK TO CAUSE A JUMP TO ADDRESS ZERO - ; ON RETURN FROM THE BNKSEL. SLICK, RIGHT? + ; SO, WE PRESET THE STACK TO CAUSE A JUMP TO THE RESTART + ; ADDRESS ON RETURN FROM THE BNKSEL. SLICK, RIGHT? DI ; KILL INTERRUPTS LD SP,HBX_LOC ; STACK IN HIGH MEMORY - LD HL,0 ; VALUE TO RESUME + LD HL,HB_RESTART ; RESUME AT RESTART ADDRESS PUSH HL ; ... IS PRESET ON STACK -; - ; MAKE ROM BOOT BANK ACTIVE IN LOW SYS MEM - LD A,BID_BOOT ; BOOT BANK + LD A,BID_BOOT ; BANK TO LAUNCH RESTART LD B,$10 ; FIRST SYS PDR JP Z280_BNKSEL ; DO IT AND RESUME FROM STACK -#ELSE + #ELSE + ; FOR OTHER THAN Z280, JUST DO AN INTERBANK CALL TO THE + ; RESTART ADDRESS. DI LD SP,HBX_LOC ; STACK JUST BELOW HBIOS PROXY - LD A,BID_BOOT ; BOOT BANK - LD IX,0 ; ADDRESS ZERO + LD A,BID_BOOT ; BANK TO LAUNCH RESTART + LD IX,HB_RESTART ; RESUME AT RESTART ADDRESS CALL HB_BNKCALL ; DOES NOT RETURN + #ENDIF #ENDIF ; ; HOOK CALLED WHEN A USERLAND RESET IS INVOKED, TYPICALLY VIA A JUMP -; TO LOGICAL CPU ADDRESS $0000 +; TO CPU ADDRESS $0000 ; ; CREDIT TO PHILLIP STEVENS FOR SUGGESTING AND SIGNIFICANT CONTRIBUTIONS ; TO THE Z180 INVALID OPCODE TRAP ENHANCEMENT. @@ -4756,6 +5512,11 @@ SYS_GET: JP Z,SYS_GETDIOCNT CP BF_SYSGET_DIOFN JP Z,SYS_GETDIOFN + CP $12 ; LEFT FOR BACKWRD COMPATABILITY + JP Z,EXT_SLICE ; FUNCTION MOVED TO TOP LEVEL $E0 + ; REMOVING THE ABOVE CAUSED UPGRADE ISSUES FOR EARLY ADOPTERS + ; SINCE OS BOOT LOADERS DEPEND ON IT. WITHOUT CAN LEAVE OS + ; UNBOOTABLE AND MIGRATION HARDER - Oct 2024 CP BF_SYSGET_RTCCNT JP Z,SYS_GETRTCCNT CP BF_SYSGET_DSKYCNT @@ -4768,6 +5529,8 @@ SYS_GET: JP Z, SYS_GETSNDCNT CP BF_SYSGET_SNDFN JP Z,SYS_GETSNDFN + CP BF_SYSGET_SWITCH + JP Z,SYS_GETSWITCH CP BF_SYSGET_TIMER JP Z,SYS_GETTIMER CP BF_SYSGET_SECS @@ -4920,6 +5683,50 @@ SYS_GETFN: POP DE ; ... TO DE RET ; AF STILL HAS RESULT OF CALC ; +; GET SWITCH +; ON ENTRY: +; D: SWITCH KEY +; 0 -> ILLEGAL / RESERVED +; 1-FE -> SWITCH +; FF -> DONT GET VALUE CHECK THE STATUS OF NVRAM -> Returning +; A=0 if no NVRAM exists. with NZ flag set +; A=1 if NVRAM is present. with Z flag set +; A='W' if NVRAM is fullly inited. with Z flag set +; Note the NZ flag can be used to detect and return an error condition +; RETURNS: +; HL: SWITCH VALUE 8/16 BIT +; +SYS_GETSWITCH: +; PUSH DE +; CALL NVSW_CONFIG ; make sure shadow copy is inited +; POP DE ; +; RET NZ ; Configuration Failed, thus cant continue +; + LD A,D + CP $FF ; test if want to just get NVRAM status + JP Z,NVSW_STATUS ; Check the Status - Call and Return +; + CALL SWITCH_RES ; D SWITCH NUMBER -> OUT HL address, E FLAGS + RET NZ ; IF NZ FLAG SET THEN ISSUE +; + LD B,0 ; Clear upper byte + LD C,(HL) ; Get LOW Order Switch Data + LD A,1 ; Compare with 1 (byte) + CP E ; Compare The byte count from SWITCH_RES + JR NC,SYS_GETSWITCH2 ; 1 byte or less, skip over + INC HL ; next byte pos in a 2 Byte Switch + LD B,(HL) ; Get HIGH Order Switch Data +; +SYS_GETSWITCH2: + LD H,B ; retun Result in HL + LD L,C + XOR A ; signal success + RET +#IF ((CPUFAM == CPU_EZ80) & (EZ80TIMER == EZ80TMR_FIRM)) +; IMPLEMENTED IN EZ80DRV.ASM +; +#ELSE +; ; GET TIMER ; RETURNS: ; DE:HL: TIMER VALUE (32 BIT) @@ -4932,6 +5739,12 @@ SYS_GETTIMER: LD C, TICKFREQ XOR A RET +#ENDIF +; +#IF ((CPUFAM == CPU_EZ80) & (EZ80TIMER == EZ80TMR_FIRM)) +; IMPLEMENTED IN EZ80DRV.ASM +; +#ELSE ; ; GET SECONDS ; RETURNS: @@ -4944,11 +5757,12 @@ SYS_GETSECS: CALL LD32 LD A,(HB_SECTCK) HB_EI - NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER + NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER ADD A,TICKFREQ LD C,A XOR A RET +#ENDIF ; ; GET BOOT INFORMATION ; RETURNS: @@ -5016,9 +5830,9 @@ SYS_GETCPUSPD: ; #IF (((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) & (CPUSPDCAP==SPD_HILO)) LD A,(HB_RTCVAL) -#IF (PLATFORM == PLT_SBC) + #IF (PLATFORM == PLT_SBC) XOR %00001000 ; SBC SPEED BIT IS INVERTED -#ENDIF + #ENDIF BIT 3,A LD L,0 ; ASSUME HALF SPEED JR Z,SYS_GETCPUSPD1 @@ -5030,6 +5844,16 @@ SYS_GETCPUSPD1: RET #ENDIF ; +#IF (PLATFORM == PLT_HEATH) + LD A,(H8P_SPEED) ; GET HEATH SPEED BITS SHADOW + XOR $03 ; CONVERT TO HBIOS VALUE + LD L,A ; PUT IN L FOR RETURN + LD DE,$FFFF ; UNKNOWN WAIT STATES +; + XOR A + RET +#ENDIF +; #IF (CPUFAM == CPU_Z180) LD HL,0 ; INIT CPU SPEED TO HALF LD A,(HB_CPUTYPE) ; LOAD CPUTYPE @@ -5126,19 +5950,91 @@ SYS_GETAPPBNKS: ; SYS_SET: LD A,C ; GET REQUESTED SUB-FUNCTION + CP BF_SYSSET_SWITCH + JP Z,SYS_SETSWITCH CP BF_SYSSET_TIMER - JR Z,SYS_SETTIMER + JP Z,SYS_SETTIMER CP BF_SYSSET_SECS - JR Z,SYS_SETSECS + JP Z,SYS_SETSECS CP BF_SYSSET_BOOTINFO - JR Z,SYS_SETBOOTINFO + JP Z,SYS_SETBOOTINFO CP BF_SYSSET_CPUSPD - JR Z,SYS_SETCPUSPD + JP Z,SYS_SETCPUSPD CP BF_SYSSET_PANEL JP Z,SYS_SETPANEL SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR RET ; +; SET SWITCH +; ON ENTRY: +; D: SWITCH KEY +; 0 -> ILLEGAL / RESERVED +; 1-254 -> SWITCH +; FF -> REINIT DEFAULT VALUES +; HL: SWITCH VALUE 8/16 BIT +; +SYS_SETSWITCH: + CALL NVSW_STATUS ; Check the status of NV RAM + RET NZ ; IF NZ then we cant continue, return NZ at this point +; + LD A,D ; switch # argument + CP $FF ; test if want to reset NVRAM + JP Z,NVSW_RESET ; then perform reset function. CALL AND RETURN +; + LD B,H ; move value to write into BC + LD C,L + CALL SWITCH_RES ; IN D SWITCH NUMBER -> OUT HL address, E FLAGS + RET NZ ; RETURN IF NZ - swich number illegal +; + LD (HL),C ; Save LOW Order Switch Data + LD A,1 ; Compare with 1 (byte) switch + CP E ; Compare + JR NC,SYS_SETSWITCH1 ; 1 byte or less, skip over + INC HL ; next byte pos + LD (HL),B ; Save High Order Switch Data +; +SYS_SETSWITCH1: + JP NVSW_UPDATE ; do a write to NVR, CALL AND RETURN +; +; Utility function to convert switch number into lookup +; INPUT +; D SWITCH NUMBER +; OUTPUT +; E with Byte count (1,2) for switch, or 0 if switch illegal +; HL Memory Address (CB_SWITCHES + offset) +SWITCH_RES: + LD A,SWITCH_LEN ; lengt of target array (below) + CP D ; check we fit in the loop + JR C,SWITCH_RES1 ; overflow table to abort +; + LD HL,SWITCH_TAB ; Lookup table below + LD A,D ; plus the offset switch number + CALL ADDHLA ; get address of lookup table + LD E,(HL) ; E (OUT) nubmer of bytes in switch +; + LD HL,CB_SWITCHES ; BASE ADDRESS OF SHADDOW DATA + LD A,D ; Add The offset to the address + CALL ADDHLA ; Final address of Switch Data +; + XOR A ; signal success + RET +SWITCH_RES1: + OR $FF ; signal failure + RET +; +; Switch number maps drectly into the HCB data, so to account +; for double bytes words, we need a table (loopkup) +; to defines how to map Applicability of Each Swicth Number +; 0->Cant be Used; 1->Single Byte Value; 2->Double Byte Value +; +SWITCH_TAB: + .DB 0 ; Switch 0 is header, cant be used + .DB 2 ; Switch 1 - (WORD) + .DB 0 ; Switch (byte 2) of prior word, not used + .DB 1 ; Switch 3 - (BYTE) + .DB 0 ; Last byte is checksum, cant be used +SWITCH_LEN .EQU $ - SWITCH_TAB - 2 +; ; SET BOOT INFORMATION ; ON ENTRY: ; L: BOOT BANK ID @@ -5151,6 +6047,11 @@ SYS_SETBOOTINFO: XOR A RET ; +#IF ((CPUFAM == CPU_EZ80) & (EZ80TIMER == EZ80TMR_FIRM)) +; IMPLEMENTED IN EZ80DRV.ASM +; +#ELSE +; ; SET TIMER ; ON ENTRY: ; DE:HL: TIMER VALUE (32 BIT) @@ -5162,6 +6063,11 @@ SYS_SETTIMER: HB_EI XOR A RET +#ENDIF +#IF ((CPUFAM == CPU_EZ80) & (EZ80TIMER == EZ80TMR_FIRM)) +; IMPLEMENTED IN EZ80DRV.ASM +; +#ELSE ; ; SET SECS ; ON ENTRY: @@ -5174,10 +6080,11 @@ SYS_SETSECS: HB_EI XOR A RET +#ENDIF ; ; SET SYSTEM CPU SPEED ATTRIBUTES ; ON ENTRY: -; L: CLOCK MULT (0:HALF, 1:FULL, 2: DOUBLE) +; L: CLOCK MULT (0:HALF, 1:FULL, 2: DOUBLE, 3: QUAD) ; D: MEMORY WAIT STATES ; E: I/O WAIT STATES ; @@ -5234,15 +6141,63 @@ SYS_SETCPUSPD2: ADC A,C ; C -> A; ADD CF FOR ROUNDING LD (CB_CPUMHZ),A ; SAVE IT ; +#IF (CPUFAM != CPU_EZ80) ; REINIT DELAY ROUTINE LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY +#ENDIF ; SYS_SETCPUSPD3: XOR A RET #ENDIF ; +#IF (PLATFORM == PLT_HEATH) + ; PORT $30: + ; 0=16MHZ, 1=8MHZ, 2=4MHZ, 3=2MHZ + LD A,L ; REQUESTED SPEED TO ACCUM + XOR $03 ; CONVERT TO HEATH BITS + AND $03 ; ONLY 2 LS BITS +; +H8P_SETSPD: ; INVOKED BY H8P.ASM WHEN SPEED CHANGED VIA FRONT PANEL + OUT (H8P_SPDIO),A ; DO IT + LD (H8P_SPEED),A ; UPDATE FP SHADOW +; + ; UPDATE CPUKHZ/CPMHZ + LD HL,(HB_CPUOSC) ; START WITH OSC VALUE IN KHZ + LD B,A ; USE BITS FOR LOOP COUNT + OR A ; CHECK FOR ZERO + JR Z,SYS_SETCPUSPD2 ; IF SO, SKIP ADJUSTMENT LOOP +SYS_SETCPUSPD1: + SRL H ; DIVIDE + RR L ; ... BY TWO + DJNZ SYS_SETCPUSPD1 ; LOOP AS NEEDED +; +SYS_SETCPUSPD2: +; +; HL SHOULD NOW HAVE FINAL CPU RUNNING SPEED IN KHZ. +; UPDATE CB_CPUMHZ/CB_CPUKHZ WITH THIS VALUE. +; + LD (CB_CPUKHZ),HL ; UPDATE CPUKHZ + LD DE,1000 ; SET UP TO DIV BY 1000 FOR MHZ + CALL DIV16 ; BC=CPU MHZ, HL=REMAINDER + LD DE,500 ; SET UP TO ROUND UP + XOR A ; IF WITHIN 500 KHZ + SBC HL,DE ; REMAINDER - 500 + CCF ; COMPLEMENT CF + ADC A,C ; C -> A; ADD CF FOR ROUNDING + LD (CB_CPUMHZ),A ; SAVE IT +; +#IF (CPUFAM != CPU_EZ80) + ; REINIT DELAY ROUTINE + LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT + CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY +#ENDIF +; + XOR A ; SIGNAL SUCCESS + RET +#ENDIF +; #IF (CPUFAM == CPU_Z180) ; VERIFY THAT REQUESTED SETTINGS ARE ALLOWED BY HARDWARE LD A,L ; GET SPEED REQUESTED @@ -5372,9 +6327,11 @@ SYS_SETCPUSPD4: LD A,L ; WORKING VALUE TO A OUT0 (Z180_DCNTL),A ; IMPLEMENT NEW VALUE ; +#IF (CPUFAM != CPU_EZ80) ; REINIT DELAY ROUTINE LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY +#ENDIF ; #IF ((INTMODE == 2) & (Z180_TIMER)) ; THE Z180 TIMER IS BASED ON CPU SPEED. SO HERE @@ -5541,7 +6498,7 @@ SYS_INTINFO: LD A,(HB_IM1CNT) ; RETURN IM1 CALL LIST SIZE LD E,A #ENDIF -#IF (INTMODE == 2) +#IF ((INTMODE == 2) | (INTMODE == 3)) LD E,HBX_IVTCNT ; RETURN INT VEC TABLE SIZE #ENDIF XOR A ; INDICATE SUCCESS @@ -5560,7 +6517,7 @@ SYS_INTVECADR: INC A ; ALLOW FOR EXTRA ENTRY TO APPEND AT END LD C,A ; SAVE IN C FOR COMPARE #ENDIF -#IF (INTMODE == 2) +#IF ((INTMODE == 2) | (INTMODE == 3)) LD C,HBX_IVTCNT ; GET CURRENT ENTRY COUNT #ENDIF LD A,E ; INCOMING INDEX POSITION TO A @@ -5578,7 +6535,7 @@ SYS_INTGET1: #IF (INTMODE == 1) LD DE,HB_IM1INT ; DE := START OF VECTOR TABLE #ENDIF -#IF (INTMODE == 2) +#IF ((INTMODE == 2) | (INTMODE == 3)) LD DE,HB_IVT ; DE := START OF VECTOR TABLE #ENDIF ADD HL,DE ; HL := ADR OF VECTOR @@ -5628,104 +6585,6 @@ SYS_INTSET1: HB_SYSAPI_END .EQU $ ; ;================================================================================================== -; Z280 INTERRUPT VECTOR TABLE -;================================================================================================== -; -HB_Z280IVT_BEG .EQU $ -; -; THE Z280 IVT MUST BE ON A 4K BOUNDARY. IT HAS BEEN LOCATED -; HERE IN AN EFFORT TO MINIMIZE WASTED SPACE. THERE SHOULD BE -; A LITTLE LESS THAN 4K OF CODE ABOVE. -; -#IF (MEMMGR == MM_Z280) -; -Z280_IVT_SLACK_ORG .EQU $ - ALIGN($1000) -Z280_IVT_SLACK .EQU $ - Z280_IVT_SLACK_ORG - .ECHO "Z280 IVT SLACK = " - .ECHO Z280_IVT_SLACK - .ECHO " bytes.\n" -; -Z280_IVT: - .DW 0, 0 ; RESERVED - .DW 0 ; NMI MSR - .DW 0 ; NMI VECTOR - .DW $0000 ; INT A MSR - .DW Z280_BADINT ; INT A VECTOR - .DW $0000 ; INT B MSR - .DW Z280_BADINT ; INT B VECTOR - .DW $0000 ; INT C MSR - .DW Z280_BADINT ; INT C VECTOR - .DW $0000 ; COUNTER/TIMER 0 MSR - .DW Z280_BADINT ; COUNTER/TIMER 0 VECTOR - .DW $0000 ; COUNTER/TIMER 1 MSR - .DW Z280_BADINT ; COUNTER/TIMER 1 VECTOR - .DW 0, 0 ; RESERVED - .DW $0000 ; COUNTER/TIMER 2 MSR - .DW Z280_BADINT ; COUNTER/TIMER 2 VECTOR - .DW $0000 ; DMA CHANNEL 0 MSR - .DW Z280_BADINT ; DMA CHANNEL 0 VECTOR - .DW $0000 ; DMA CHANNEL 1 MSR - .DW Z280_BADINT ; DMA CHANNEL 1 VECTOR - .DW $0000 ; DMA CHANNEL 2 MSR - .DW Z280_BADINT ; DMA CHANNEL 2 VECTOR - .DW $0000 ; DMA CHANNEL 3 MSR - .DW Z280_BADINT ; DMA CHANNEL 3 VECTOR - .DW $0000 ; UART RECEIVER MSR - .DW Z280_BADINT ; UART RECEIVER VECTOR - .DW $0000 ; UART TRANSMITTER MSR - .DW Z280_BADINT ; UART TRANSMITTER VECTOR - .DW $0000 ; SINGLE STEP TRAP MSR - .DW Z280_SSTEP ; SINGLE STEP TRAP VECTOR - .DW $0000 ; BREAK ON HALT TRAP MSR - .DW Z280_BRKHLT ; BREAK ON HALT TRAP VECTOR - .DW $0000 ; DIVISION EXCEPTION TRAP MSR - .DW Z280_DIVEXC ; DIVISION EXCEPTION TRAP VECTOR - .DW $0000 ; STACK OVERFLOW WARNING TRAP MSR - .DW Z280_STKOVR ; STACK OVERFLOW WARNING TRAP VECTOR - .DW $0000 ; ACCESS VIOLATION TRAP MSR - .DW Z280_ACCVIO ; ACCESS VIOLATION TRAP VECTOR - .DW $0000 ; SYSTEM CALL TRAP MSR - .DW Z280_SYSCALL ; SYSTEM CALL TRAP VECTOR - .DW $0000 ; PRIVILEGED INSTRUCTION TRAP MSR - .DW Z280_PRIVINST ; PRIVILEGED INSTRUCTION TRAP VECTOR - .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP MSR - .DW $0000 ; EPU <- MEMORY EXTENDED INSTRUCTION TRAP VECTOR - .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP MSR - .DW $0000 ; MEMORY <- EPU EXTENDED INSTRUCTION TRAP VECTOR - .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP MSR - .DW $0000 ; A <- EPU EXTENDED INSTRUCTION TRAP VECTOR - .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP MSR - .DW $0000 ; EPU INTERNAL OPERATION EXTENDED INSTRUCTION TRAP VECTOR - .DW 0, 0 ; RESERVED - .DW 0, 0 ; RESERVED - ; PROGRAM COUNTER VALUES FOR NMI/INTA (16) - .DW HBX_IV00 - .DW HBX_IV01 - .DW HBX_IV02 - .DW HBX_IV03 - .DW HBX_IV04 - .DW HBX_IV05 - .DW HBX_IV06 - .DW HBX_IV07 - .DW HBX_IV08 - .DW HBX_IV09 - .DW HBX_IV0A - .DW HBX_IV0B - .DW HBX_IV0C - .DW HBX_IV0D - .DW HBX_IV0E - .DW HBX_IV0F -; - ; THE REMAINDER OF THE Z280 IVT IS TRUNCATED HERE BECAUSE IT - ; TAKES A BUNCH OF SPACE AND IS NOT USED. WE SUPPORT ONLY - ; 16 VECTORED INTERRUPTS AND THEY MUST BE CONNECTED TO INTA. -; -#ENDIF -; -HB_Z280IVT_END .EQU $ -; -;================================================================================================== ; GLOBAL INTERNAL HBIOS FUNCTIONS ;================================================================================================== ; @@ -5969,44 +6828,6 @@ HB_ADDIM1: #ENDIF ; ;-------------------------------------------------------------------------------------------------- -; DSKY SUPPORT -;-------------------------------------------------------------------------------------------------- -; -#IF (DSKYENABLE) -; -; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY -; -; HL: ADR OF 32 BIT BINARY -; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES) -; -DSKY_BIN2SEG: - LD B,4 ; 4 BYTES OF INPUT - LD A,B ; PUT IN ACCUM - CALL ADDHLA ; PROCESS FROM END (LITTLE ENDIAN) -DSKY_BIN2SEG1: - DEC HL ; DEC PTR (LITTLE ENDIAN) - LD A,(HL) ; HIGH NIBBLE - RRCA \ RRCA \ RRCA \ RRCA ; ROTATE BITS - CALL DSKY_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF - LD A,(HL) ; LOW NIBBLE - CALL DSKY_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF - DJNZ DSKY_BIN2SEG1 ; LOOP FOR ALL INPUT BYTES - RET ; DONE -; -DSKY_BIN2SEG_NIB: - PUSH HL ; SAVE HL - LD HL,DSKY_HEXMAP ; POINT TO SEG MAP TABLE - AND $0F ; ISOLATE LOW NIBBLE - CALL ADDHLA ; OFFSET INTO TABLE - LD A,(HL) ; LOAD VALUE FROM TABLE - POP HL ; RESTORE HL - LD (DE),A ; SAVE VALUE TO OUTPUT BUF - INC DE ; BUMP TO NEXT OUTPUT BYTE - RET ; DONE -; -#ENDIF -; -;-------------------------------------------------------------------------------------------------- ; SYSTEM TIMER INTERRUPT HANDLER ;-------------------------------------------------------------------------------------------------- ; @@ -6026,9 +6847,9 @@ HB_TIMDBG1: ; THESE CAN BE HOOKED AS DESIRED BY DRIVERS ; VEC_TICK: - JP HB_TICK ; TICK PROCESSING VECTOR + JP HB_TICK ; TICKS PROCESSING VECTOR VEC_SECOND: - JP HB_SECOND ; SECOND PROCESSING VECTOR + JP HB_SECOND ; SECONDS PROCESSING VECTOR ; ; TIMER HANDLERS ; @@ -6055,10 +6876,6 @@ HB_TICK1: ; PULSE WATCHDOG OUT (WDOGIO),A ; VALUE IS IRRELEVANT #ENDIF -; -#IF MKYENABLE - CALL MKY_INT -#ENDIF ; OR $FF ; NZ SET TO INDICATE INT HANDLED RET @@ -6464,7 +7281,7 @@ Z280_PRIVINST: ;;;HB_DI ; DO THE DI XOR A ; NO INTERRUPTS LD (HB_MSRSAV),A ; UPDATE SAVED MSR LSB - + INC HL ; BUMP PAST IT JR Z280_PRIVINSTX ; @@ -6750,6 +7567,128 @@ Z2DMAADR2: ; #ENDIF ; +;-------------------------------------------------------------------------------------------------- +; ROUTINES FOR NON VOLITILE (NVRAM) SWITCHES +;-------------------------------------------------------------------------------------------------- +; +; Return Status +; A=0 if no NVRAM exists. with NZ flag set +; A=1 if NVRAM is present. with Z flag set +; A='W' if NVRAM is fullly inited. with Z flag set +; Note the NZ flag can be used to detect and return an error condition +; +NVSW_STATUS: + LD A,(CB_SWITCHES) ; the status byte + LD B,A ; save it + AND 1 ; applies to 'W' and $01 status, -> 1 + CP 1 ; set NZ based on A = 1 + LD A,B ; return the + RET +; +; RESET CONTENTS OF NVRAM, STORING INTO +; RETURN NONZERO IF WRITTEN - ZERO IF NOT WRITTEN +; +NVSW_RESET: + CALL NVSW_DEFAULTS ; copy defaults into HCB + ; Fall Through and Update (write) status + ; JP NVSW_UPDATE +; +; UPDATE HBIOS SHADOW TO NVRAM, AFTER SETTING HBIOS VALUE +; RETURN NONZERO IF WRITTEN - ZERO IF NOT WRITTEN +; +NVSW_UPDATE: + CALL NVSW_CHECKSUM ; CALC checksum into A + LD (CB_SWITCHCK),A ; store checksum in hcb + CALL NVSW_WRITE ; write the bytes to nvr + RET Z ; Successful write, return + ; write failed for some reason ??? + LD A,1 + LD (CB_SWITCHES),A ; ensure hcb signature=1 + OR $FF ; failure + RET ; return NZ flag +; +; PERFORM CHECKSUM CALC OF DATA IN HCB +; RETURN A REGISTER -> CONTAINING THE CHECKSUM +; +NVSW_CHECKSUM: + XOR A + LD B,NVSW_SIZE ; NUMBER OF BYTES TO CHECK + LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB) +NVSW_CHECKSM1: + XOR (HL) ; XOR The Byte + INC HL ; HL address + DJNZ NVSW_CHECKSM1 ; LOOP + XOR RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO + XOR RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO + RET +; +; COPY DEFAULTS INTO HCB +; +NVSW_DEFAULTS: + LD HL,NVSW_DEFAULT ; Copy default bytes from + LD DE,CB_SWITCHES ; to hbios HCB location + LD BC,NVSW_SIZE ; number of bytes top copy + LDIR ; copy bytes + RET +; +; LOAD BYTES FROM NVR - INTO HBIOS DCB +; RETURN ZERO IF READ SUCCESS, NON-ZERO IF CANT READ +; +NVSW_READ: + LD B,NVSW_SIZE + 1 ; NUMBER OF BYTES, + 1 for CHECKSUM + LD C,0 ; FIRST Byte address in RTC + LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB) +NVSW_READ1: + PUSH HL ; SAVE ADDRESS + PUSH BC ; Save Loop counter + LD B,BF_RTCGETBYT ; GET RTC BYTE (at a time), requires loop + CALL RTC_DISPATCH ; CALL RTC + POP BC ; Restore Loop + POP HL ; restore Block pointer + RET NZ ; ERROR JUST RETURN + LD (HL),E ; store IT + INC C ; RTC Byte address + INC HL ; HL address + DJNZ NVSW_READ1 ; LOOP to the next byte +NVSW_READ2: + LD A,(CB_SWITCHES) ; FIRST BYTE + CP 'W' ; MUST BE 'W' + RET ; ZERO IF OK, NON-ZERO IF ISSUE +; +; SAVE BYTES FROM HBIOS DCB - INTO NVR +; RETURN ZERO IF SUCCESS, NON-ZERO IF CANT WRITE +; +NVSW_WRITE: + LD B,NVSW_SIZE + 1 ; NUMBER OF BYTES, + 1 for CHECKSUM + LD C,0 ; FIRST Byte address in RTC + LD HL,CB_SWITCHES ; First Byte in HBIOS (HCB) +NVSW_WRITE1: + PUSH HL ; SAVE ADDRESS + PUSH BC ; Save Loop counter + LD E,(HL) ; Value to Write + LD B,BF_RTCSETBYT ; SET RTC BYTE + CALL RTC_DISPATCH ; CALL RTC + POP BC ; Restore Loop + POP HL ; restore Block pointer + RET NZ ; ERROR JUST RETURN + INC C ; RTC Byte address + INC HL ; HL address + DJNZ NVSW_WRITE1 ; LOOP, One Byte at a Time +NVSW_WRITE2: + XOR A ; SUCCESS + RET ; ZERO IF OK, NON-ZERO IF ISSUE +; +; DEFAULT VALUES FOR NVRAM, USED TO RESET NVR +; +NVSW_DEFAULT: + .DB 'W' ; Signature Byte + .DB 'H' ; Default Boot - Rom Application [H]elp + .DB DBOOT_ROM ; Default Boot - ROM Application + .DB 0 ; Auto Boot - NO auto boot + ; Configure above byte from (BOOT_TIMEOUT != -1) +; SIZE OF NVR BYTES +NVSW_SIZE .EQU $ - NVSW_DEFAULT +; HB_INTFUNC_END .EQU $ ; ;================================================================================================== @@ -6908,7 +7847,7 @@ RS_IMAGE: RS_START: LD A,(HB_CURBNK) ; GET CURRENT BANK PUSH AF ; SAVE IT - + LD C,0 ; RUNNING BANK COUNT LD HL,$7FFF ; BYTE TEST ADDRESS LD IX,RS_ARY ; ORIG BYTE STORAGE ARRAY PTR @@ -6940,7 +7879,7 @@ RS_LOOP1: LD (HL),A OR A ; ZERO? JR Z,RS_NEXT ; SKIP STORED VALUE CHECK - + ; VERIFY ALL STORED VALUES LD B,C ; INIT LOOP COUNTER LD E,0 ; INIT BANK ID @@ -6957,7 +7896,7 @@ RS_LOOP3: RS_NEXT: INC C ; ADD 1 TO RAM BANK COUNT JR RS_LOOP1 ; AND LOOP TILL DONE -; +; RS_DONE: LD E,C ; FINAL BANK COUNT TO E LD A,C @@ -7044,7 +7983,9 @@ FP_DETECT1: ; ATTEMPT TO CONFIRM WE HAVE A VALID PORT. CREDIT TO STEPHEN ; COUSINS FOR THIS APPROACH. LD C,FPSW_IO ; ADR OF SWITCH PORT + EZ80_IO IN C,(C) ; READ IT USING IN (C) + EZ80_IO IN A,(FPSW_IO) ; READ IT USING IN (PORT) CP C ; PORT FLOATING ON MISMATCH JR NZ,FP_DETECT2 ; NO H/W, SET FLAG @@ -7073,12 +8014,13 @@ FP_SETLEDS: #IF (FPLED_INV) XOR $FF ; INVERT BITS IF NEEDED #ENDIF - OUT (FPLED_IO),A ; WRITE + + EZ80_IO + OUT (FPLED_IO),A ; WRITE FP_SETLEDS1: POP HL ; RESTORE HL RET ; DONE ; -; #ENDIF ; #IF (FPSW_ENABLE) @@ -7089,6 +8031,7 @@ FP_GETSWITCHES: LD A,(FPSW_ACTIVE) ; SWITCHES ACTIVE? OR A ; SET FLAGS RET Z ; BAIL OUT IF NOT ACTIVE + EZ80_IO IN A,(FPSW_IO) ; READ SWITCHES #IF (FPSW_INV) XOR $FF ; INVERT BITS IF NEEDED @@ -7101,6 +8044,8 @@ FP_GETSWITCHES: FP_ACTIVE: FPSW_ACTIVE .DB TRUE FPLED_ACTIVE .DB TRUE + +#IF (CPUFAM != CPU_EZ80) ; eZ80 WILL RETURNED ITS MEASURED CPUOSC - SO NO NEED FOR DETECTION HERE ; ;================================================================================================== ; CPU SPEED DETECTION USING DS-1302 RTC @@ -7219,6 +8164,7 @@ HB_CPUSPD2: ; HANDLE NO RTC OR NOT TICKING OR $FF ; SIGNAL ERROR RET ; AND DONE +#ENDIF ; CPUFAM != CPU_EZ80 ; HB_UTIL_END .EQU $ ; @@ -7311,7 +8257,7 @@ PS_PRTDT: LD A,00001111B CALL PRTIDXMSK CALL PS_PAD18 ; PAD TO 18 SPACES - RET + RET ; ; PRINT DISK CAPACITY (UNIT IN C, ATTRIBUTE IN E) ; @@ -7688,6 +8634,7 @@ HB_CPU_STR: .TEXT " Z80$" .TEXT " Z8S180-K$" .TEXT " Z8S180-N$" .TEXT " Z80280$" + .TEXT " eZ80$" ; PS_STRNUL .TEXT "--$" ; DISPLAY STRING FOR NUL VALUE ; @@ -7756,6 +8703,8 @@ PS_SDLPT .TEXT "LPT$" PS_SDESPCON .TEXT "ESPCON$" PS_SDESPSER .TEXT "ESPSER$" PS_SDSCON .TEXT "SCON$" +PS_SDEF .TEXT "EF$" +PS_SDSSER .TEXT "SSER$" ; ; CHARACTER SUB TYPE STRINGS ; @@ -7780,6 +8729,8 @@ PS_VDGDC .TEXT "GDC$" PS_VDTMS .TEXT "TMS$" PS_VDVGA .TEXT "VGA$" PS_VDVRC .TEXT "VRC$" +PS_VDEF .TEXT "EF$" +PS_VDFV .TEXT "FV$" ; ; VIDEO TYPE STRINGS ; @@ -7809,33 +8760,51 @@ HB_PRTSUM_END .EQU $ ; HB_DRIVERS_BEG .EQU $ ; -#IF (DSKYENABLE) - #IF (ICMENABLE) +;;;#IF (DSKYENABLE) +#IF (ICMENABLE) ORG_ICM .EQU $ #INCLUDE "icm.asm" SIZ_ICM .EQU $ - ORG_ICM MEMECHO "ICM occupies " MEMECHO SIZ_ICM MEMECHO " bytes.\n" - #ENDIF +#ENDIF ; - #IF (PKDENABLE) +#IF (PKDENABLE) ORG_PKD .EQU $ #INCLUDE "pkd.asm" SIZ_PKD .EQU $ - ORG_PKD MEMECHO "PKD occupies " MEMECHO SIZ_PKD MEMECHO " bytes.\n" - #ENDIF +#ENDIF +;;;#ENDIF ; - #IF (H8PENABLE) +#IF (LCDENABLE) +ORG_LCD .EQU $ + #INCLUDE "lcd.asm" +SIZ_LCD .EQU $ - ORG_LCD + MEMECHO "LCD occupies " + MEMECHO SIZ_LCD + MEMECHO " bytes.\n" +#ENDIF +; +#IF (GM7303ENABLE) +ORG_GM7303 .EQU $ + #INCLUDE "gm7303.asm" +SIZ_GM7303 .EQU $ - ORG_GM7303 + MEMECHO "GM7303 occupies " + MEMECHO SIZ_GM7303 + MEMECHO " bytes.\n" +#ENDIF +; +#IF (H8PENABLE) ORG_H8P .EQU $ #INCLUDE "h8p.asm" SIZ_H8P .EQU $ - ORG_H8P MEMECHO "H8P occupies " MEMECHO SIZ_H8P MEMECHO " bytes.\n" - #ENDIF #ENDIF ; #IF (PLATFORM == PLT_NABU) @@ -7892,12 +8861,12 @@ SIZ_PCF .EQU $ - ORG_PCF MEMECHO " bytes.\n" #ENDIF ; -#IF (DS7RTCENABLE) -ORG_DS7RTC .EQU $ - #INCLUDE "ds7rtc.asm" -SIZ_DS7RTC .EQU $ - ORG_DS7RTC - MEMECHO "DS7RTC occupies " - MEMECHO SIZ_DS7RTC +#IF (DS5RTCENABLE) +ORG_DS5RTC .EQU $ + #INCLUDE "ds5rtc.asm" +SIZ_DS5RTC .EQU $ - ORG_DS5RTC + MEMECHO "DS5RTC occupies " + MEMECHO SIZ_DS5RTC MEMECHO " bytes.\n" #ENDIF ; @@ -7918,6 +8887,16 @@ SIZ_RP5RTC .EQU $ - ORG_RP5RTC MEMECHO SIZ_RP5RTC MEMECHO " bytes.\n" #ENDIF +; +#IF (SSERENABLE) +ORG_SSER .EQU $ + #INCLUDE "sser.asm" +SIZ_SSER .EQU $ - ORG_SSER + MEMECHO "SSER occupies " + MEMECHO SIZ_SSER + MEMECHO " bytes.\n" +#ENDIF +; #IF (ASCIENABLE) ORG_ASCI .EQU $ #INCLUDE "asci.asm" @@ -8071,6 +9050,15 @@ SIZ_VRC .EQU $ - ORG_VRC MEMECHO " bytes.\n" #ENDIF ; +#IF (FVENABLE) +ORG_FV .EQU $ + #INCLUDE "fv.asm" +SIZ_FV .EQU $ - ORG_FV + MEMECHO "FV occupies " + MEMECHO SIZ_FV + MEMECHO " bytes.\n" +#ENDIF +; #IF (DMAENABLE) ORG_DMA .EQU $ #INCLUDE "dma.asm" @@ -8309,6 +9297,50 @@ SIZ_YM2612 .EQU $ - ORG_YM2612 MEMECHO " bytes.\n" #ENDIF ; +; +#IF (CPUFAM == CPU_EZ80) + MEMECHO "EZ80 DRIVERS\n" +ORG_EZ80DRVS .EQU $ +; +ORG_EZ80CPUDRV .EQU $ + #INCLUDE "ez80cpudrv.asm" +SIZ_EZ80CPUDRV .EQU $ - ORG_EZ80CPUDRV + MEMECHO " EZ80 CPU DRIVER occupies " + MEMECHO SIZ_EZ80CPUDRV + MEMECHO " bytes.\n" +; +ORG_EZ80SYSTMR .EQU $ + #INCLUDE "ez80systmr.asm" +SIZ_EZ80SYSTMR .EQU $ - ORG_EZ80SYSTMR + MEMECHO " EZ80 SYS TIMER occupies " + MEMECHO SIZ_EZ80SYSTMR + MEMECHO " bytes.\n" +; +#IF (EZ80RTCENABLE) +ORG_EZ80RTC .EQU $ + #INCLUDE "ez80rtc.asm" +SIZ_EZ80RTC .EQU $ - ORG_EZ80RTC + MEMECHO " EZ80 RTC occupies " + MEMECHO SIZ_EZ80RTC + MEMECHO " bytes.\n" +#ENDIF +; +#IF (EZ80UARTENABLE) +ORG_EZU .EQU $ + #INCLUDE "ez80uart.asm" +SIZ_EZU .EQU $ - ORG_EZU + MEMECHO " EZ80 UART occupies " + MEMECHO SIZ_EZU + MEMECHO " bytes.\n" +#ENDIF + +SIZ_EZ80DRVS .EQU $ - ORG_EZ80DRVS + MEMECHO " Total " + MEMECHO SIZ_EZ80DRVS + MEMECHO " bytes.\n" + +#ENDIF + MEMECHO "RTCDEF=" MEMECHO RTCDEF MEMECHO "\n" @@ -8399,7 +9431,7 @@ HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER HB_SECTCK .DB TICKFREQ ; TICK COUNTER FOR FRACTIONAL SECONDS HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER ; -HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG +HB_CPUTYPE .DB 0 ; 0=Z80, 1=Z180, 2=Z180-K, 3=Z180-N, 4=Z280 HB_CPUOSC .DW CPUOSC ; ACTUAL CPU HARDWARE OSC FREQ IN KHZ ; HB_BATCOND .DB 0 ; BATTERY CONDITION (0=LOW, 1=OK) @@ -8424,10 +9456,6 @@ STR_PANIC .TEXT "\r\n>>> PANIC: $" STR_SYSCHK .TEXT "\r\n>>> SYSCHK: $" STR_CONTINUE .TEXT "\r\nContinue (Y/N)? $" ; -#IF (DSKYENABLE) ; 'H','B','I','O',' ',' ',' ',' ' -MSG_HBVER .DB $76,$7F,$30,$3F,$00,$00,$00,$00 ; "HBIO " -#ENDIF -; HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) @@ -8474,50 +9502,54 @@ HB_APPBOOTERR: STR_APPBOOTERR .DB "\r\n\r\n*** App Boot is only possible on running RomWBW system!\r\n\r\n$" ; HB_APPBOOT1: + ; APPBOOT REQUIRES THAT THE COMMON BANK IS NOT CHANGED BY + ; THE NEW CONFIG. TEST FOR THIS AND DIAGNOSE IF SO. + LD A,(HCB_BIDCOM) ; RUNNING COMMON BANK ID + + LD B,BF_SYSGET ; HBIOS SYSGET + LD C,BF_SYSGET_BNKINFO ; BANK INFORMATION + RST 08 ; D = BIOS BANK ID + LD B,BF_SYSPEEK ; HBIOS FUNC: PEEK + LD HL,HCB_LOC + HCB_BIDCOM ; COMMON BANK ID + RST 08 ; E = COMMON BANK ID + LD A,E ; PUT IN A + CP BID_COM ; COMPARE TO NEW CONFIG + JR Z,HB_APPBOOT2 ; IF SAME, CONTINUE +; + ; DIAGNOSE COMMON BANK ID MISMATCH + LD DE,STR_COMBANKERR ; POINT TO ERROR MESSAGE + LD C,9 ; BDOS FUNC 9: WRITE STR + CALL $0005 ; DO IT + OR $FF ; SIGNAL ERROR + RET ; AND RETURN +; +STR_COMBANKERR .DB "\r\n\r\n*** Common Bank Mismatch!\r\n\r\n$" +; +HB_APPBOOT2: ; ANNOUNCE THE APPLICATION BOOT LD DE,STR_APPBOOT ; POINT TO MESSAGE LD C,9 ; BDOS FUNC 9: WRITE STR CALL $0005 ; DO IT - JR HB_APPBOOT2 ; AND CONTINUE + CALL LDELAY ; SERIAL PORT FLUSH TIME + JR HB_APPBOOT3 ; AND CONTINUE ; STR_APPBOOT .DB "\r\n\r\n*** Launching RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP, " for" .DB "\r\n\r\n ", PLATFORM_NAME, "$" ; -HB_APPBOOT2: - ; IF THIS IS AN APPLICATION BOOT, WE CAPTURE THE CURRENT BANK ID - ; AND UPDATE THE PROXY IMAGE. LATER, WHEN THE PROXY IMAGE IS COPIED - ; TO IT'S RUNNING LOCATION AT TOP OF RAM, THE CORRECT HB_CURBNK - ; VALUE WILL BE INSTALLED. NOTE: THE ADDRESSES IN THE PROXY - ; IMAGE ARE FOR IT'S RUNNING LOCATION. WE NEED TO USE *MATH* - ; TO DERIVE THE LOCATION OF HB_CURBNK IN THE IMAGE. - LD A,(HB_CURBNK) - LD (HB_CURBNK - HBX_LOC + HBX_IMG),A -; - ; FOR AN APPLICATION BOOT, WE ALSO COPY THE CONCATENATED OS - ; IMAGES TO THE AUX BANK WHERE WE WILL JUMP TO ROMLDR LATER. - ; THE AUX BANK WILL BE DESTROYED IF CP/M 3 IS LOADED. WE DON'T - ; LIVE IN A PERFECT WORLD. - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY - LD D,BID_AUX ; D = DEST BANK = AUX BANK - LD A,(HB_CURBNK) ; E = SRC BANK = CUR BANK - LD E,A ; USE AS SOURCE - LD HL,$8000 ; HL = COPY LEN = ENTIRE BANK - RST 08 ; DO IT - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - LD HL,HB_END ; COPY FROM END OF HBIOS - LD DE,0 ; TO START OF TARGET BANK - RST 08 ; DO IT +HB_APPBOOT3: ; #IF (MEMMGR == MM_Z280) ; WE NEED TO SWITCH FROM USER MODE TO SYSTEM MODE, BUT CONTINUE ; RUNNING IN THE CURRENT BANK. THIS IS A LITTLE MESSY. ; - ; FIRST, OVERLAY PROXY CODE WITH NEW CODE SO WE CAN USE THE + ; FIRST, OVERLAY PROXY CODE WITH FRESH CODE SO WE CAN USE THE ; PROXY ROUTINES SAFELY. + LD A,(HB_CURBNK) ; GET CURBNK LD DE,HBX_LOC ; RUNNING LOCATION LD HL,HBX_IMG ; LOCATION IN IMAGE LD BC,HBX_SIZ ; SIZE LDIR ; INSTALL IT + LD (HB_CURBNK),A ; RESTORE CURBNK ; ; NEXT, COPY A BIT OF CODE TO DO THE SYSTEM TRANSITION TO ; UPPER MEM. WE CAN BORROW THE PROXY BOUNCE BUFFER FOR THIS. @@ -8527,7 +9559,7 @@ HB_APPBOOT2: LDIR ; ; THEN SYSCALL IT. NOTE THAT THE ROUTINE CALLED DOES NOT - ; (RET)URN, IT JUMPS TO CONTINUE SO THAT THE SYSCALL DOES + ; (RET)URN, IT JUMPS TO HB_RESTART SO THAT THE SYSCALL DOES ; NOT RETURN TO USER MODE. SC HBX_BUF ; SYSCALL ROUTINE ; @@ -8541,7 +9573,7 @@ Z280_GOSYS: LD A,(HB_CURBNK) ; CURRENT BANK LD B,$10 ; FIRST SYSTEM PDR CALL Z280_BNKSEL ; DO THE SWITCH - JP HB_APPBOOT_Z ; AND RESUME BOOT + JP HB_RESTART ; AND RESUME BOOT ; Z280_GOSYS_LEN .EQU $ - Z280_GOSYS ; @@ -8599,37 +9631,6 @@ MG014_STATMAPHI: ; #ENDIF ; -; CODES FOR NUMERICS -; HIGH BIT ALWAYS CLEAR TO SUPPRESS DECIMAL POINT -; SET HIGH BIT TO SHOW DECIMAL POINT -; -#IF (DSKYENABLE) -; -DSKY_HEXMAP: - .DB $3F ; 0 - .DB $06 ; 1 - .DB $5B ; 2 - .DB $4F ; 3 - .DB $66 ; 4 - .DB $6D ; 5 - .DB $7D ; 6 - .DB $07 ; 7 - .DB $7F ; 8 - .DB $67 ; 9 - .DB $77 ; A - .DB $7C ; B - .DB $39 ; C - .DB $5E ; D - .DB $79 ; E - .DB $71 ; F -; -DSKY_BUF .FILL 8,0 -DSKY_BUFLEN .EQU $ - DSKY_BUF -DSKY_HEXBUF .FILL 4,0 -DSKY_HEXBUFLEN .EQU $ - DSKY_HEXBUF -; -#ENDIF -; HB_DATA_END .EQU $ ; HB_END .EQU $ @@ -8649,8 +9650,9 @@ SLACK .EQU BNKTOP - $ .ECHO "INTVEC \t" \ .ECHO HB_INTVEC_BEG \ .ECHO "\t" \ .ECHO HB_INTVEC_END - HB_INTVEC_BEG \ .ECHO "\n" .ECHO "SYSINIT \t" \ .ECHO HB_SYSINIT_BEG \ .ECHO "\t" \ .ECHO HB_SYSINIT_END - HB_SYSINIT_BEG \ .ECHO "\n" .ECHO "DISP \t" \ .ECHO HB_DISP_BEG \ .ECHO "\t" \ .ECHO HB_DISP_END - HB_DISP_BEG \ .ECHO "\n" - .ECHO "SYSAPI \t" \ .ECHO HB_SYSAPI_BEG \ .ECHO "\t" \ .ECHO HB_SYSAPI_END - HB_SYSAPI_BEG \ .ECHO "\n" .ECHO "Z280IVT \t" \ .ECHO HB_Z280IVT_BEG \ .ECHO "\t" \ .ECHO HB_Z280IVT_END - HB_Z280IVT_BEG \ .ECHO "\n" + .ECHO "EXTAPI \t" \ .ECHO HB_EXTAPI_BEG \ .ECHO "\t" \ .ECHO HB_EXTAPI_END - HB_EXTAPI_BEG \ .ECHO "\n" + .ECHO "SYSAPI \t" \ .ECHO HB_SYSAPI_BEG \ .ECHO "\t" \ .ECHO HB_SYSAPI_END - HB_SYSAPI_BEG \ .ECHO "\n" .ECHO "INTFUNC \t" \ .ECHO HB_INTFUNC_BEG \ .ECHO "\t" \ .ECHO HB_INTFUNC_END - HB_INTFUNC_BEG \ .ECHO "\n" .ECHO "UTIL \t" \ .ECHO HB_UTIL_BEG \ .ECHO "\t" \ .ECHO HB_UTIL_END - HB_UTIL_BEG \ .ECHO "\n" .ECHO "PRTSUM \t" \ .ECHO HB_PRTSUM_BEG \ .ECHO "\t" \ .ECHO HB_PRTSUM_END - HB_PRTSUM_BEG \ .ECHO "\n" @@ -8682,7 +9684,7 @@ SLACK .EQU BNKTOP - $ !!! ; FORCE AN ASSEMBLY ERROR #ENDIF ; -;;;#IF (SLACK < (1024 * 3)) +;;;#IF (SLACK < (1024 * 3)) ;;; .ECHO "*** ERROR: Low HEAP space!!!\n" ;;; !!! ; FORCE AN ASSEMBLY ERROR ;;;#ENDIF diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 9c00f6e2..bac1c903 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -46,6 +46,8 @@ BF_DSKYKEYLEDS .EQU BF_DSKY + 5 ; SET/CLEAR KEYPAD LEDS BF_DSKYSTATLED .EQU BF_DSKY + 6 ; SET/CLEAR STATUS LEDS BF_DSKYBEEP .EQU BF_DSKY + 7 ; BEEP ONBOARD DSKY SPEAKER BF_DSKYDEVICE .EQU BF_DSKY + 8 ; DSKY DEVICE INFO REPORT +BF_DSKYMESSAGE .EQU BF_DSKY + 9 ; DSKY MESSAGE HANDLING +BF_DSKYEVENT .EQU BF_DSKY + 10 ; DSKY EVENT HANDLING ; BF_VDA .EQU $40 BF_VDAINI .EQU BF_VDA + 0 ; INITIALIZE VDU @@ -74,6 +76,7 @@ BF_SNDPLAY .EQU BF_SND + 4 ; INITIATE THE REQUESTED SOUND COMMAND BF_SNDQUERY .EQU BF_SND + 5 ; E IS SUBFUNCTION BF_SNDDURATION .EQU BF_SND + 6 ; REQUEST DURATION HL MILLISECONDS BF_SNDDEVICE .EQU BF_SND + 7 ; SOUND DEVICE INFO REQUEST +BF_SNDBEEP .EQU BF_SND + 8 ; PLAY A BEEP SOUND ON DEVICE ; ; BF_SNDQUERY SUBCOMMANDS BF_SNDQ_STATUS .EQU 0 @@ -81,6 +84,11 @@ BF_SNDQ_CHCNT .EQU BF_SNDQ_STATUS + 1 ; RETURN COUNT OF CHANNELS BF_SNDQ_VOLUME .EQU BF_SNDQ_STATUS + 2 ; 8 BIT NUMBER BF_SNDQ_PERIOD .EQU BF_SNDQ_STATUS + 3 ; 16 BIT NUMBER BF_SNDQ_DEV .EQU BF_SNDQ_STATUS + 4 ; RETURN DEVICE TYPE CODE AND IO PORTS - TYPE IN B, PORTS IN DE, HL +; +; EXTENSION FUNCTIONS +BF_EXT .EQU $E0 +BF_EXTSLICE .EQU BF_EXT + 0 ; SLICE CALCULATION (WAS BF_SYSGET_DIOMED) + ; BF_SYS .EQU $F0 BF_SYSRESET .EQU BF_SYS + 0 ; SOFT RESET HBIOS @@ -112,6 +120,8 @@ BF_SYSGET_VDACNT .EQU $40 ; GET VDA UNIT COUNT BF_SYSGET_VDAFN .EQU $41 ; GET VDA UNIT FN/DATA ADR BF_SYSGET_SNDCNT .EQU $50 ; GET VDA UNIT COUNT BF_SYSGET_SNDFN .EQU $51 ; GET SND UNIT FN/DATA ADR +; +BF_SYSGET_SWITCH .EQU $C0 ; GET NON VOLITILE SWITCH VALUE BF_SYSGET_TIMER .EQU $D0 ; GET CURRENT TIMER VALUE BF_SYSGET_SECS .EQU $D1 ; GET CURRENT SECONDS VALUE BF_SYSGET_BOOTINFO .EQU $E0 ; GET BOOT INFORMATION @@ -122,6 +132,7 @@ BF_SYSGET_CPUSPD .EQU $F3 ; GET CLOCK SPEED & WAIT STATES BF_SYSGET_PANEL .EQU $F4 ; GET FRONT PANEL SWITCHES VAL BF_SYSGET_APPBNKS .EQU $F5 ; GET APP BANK INFORMATION ; +BF_SYSSET_SWITCH .EQU $C0 ; SET NON VOLITILE SWITCH VALUE BF_SYSSET_TIMER .EQU $D0 ; SET TIMER VALUE BF_SYSSET_SECS .EQU $D1 ; SET SECONDS VALUE BF_SYSSET_BOOTINFO .EQU $E0 ; SET BOOT INFORMATION @@ -132,10 +143,43 @@ BF_SYSINT_INFO .EQU $00 ; GET INTERRUPT SYSTEM INFO BF_SYSINT_GET .EQU $10 ; GET INT VECTOR ADDRESS BF_SYSINT_SET .EQU $20 ; SET INT VECTOR ADDRESS ; +; 2 BYTE FUNCTION/SUBFUNCTION : BC_ => BIOS CALL +; e.g. LOAD BC, BC_SYSxxxx (avoid load B and C seperately) +; +BC_SYSGET_CIOCNT .EQU BF_SYSGET * $100 + BF_SYSGET_CIOCNT +BC_SYSGET_CIOFN .EQU BF_SYSGET * $100 + BF_SYSGET_CIOFN +BC_SYSGET_DIOCNT .EQU BF_SYSGET * $100 + BF_SYSGET_DIOCNT +BC_SYSGET_DIOFN .EQU BF_SYSGET * $100 + BF_SYSGET_DIOFN +BC_SYSGET_RTCCNT .EQU BF_SYSGET * $100 + BF_SYSGET_RTCCNT +BC_SYSGET_DSKYCNT .EQU BF_SYSGET * $100 + BF_SYSGET_DSKYCNT +BC_SYSGET_VDACNT .EQU BF_SYSGET * $100 + BF_SYSGET_VDACNT +BC_SYSGET_VDAFN .EQU BF_SYSGET * $100 + BF_SYSGET_VDAFN +BC_SYSGET_SNDCNT .EQU BF_SYSGET * $100 + BF_SYSGET_SNDCNT +BC_SYSGET_SNDFN .EQU BF_SYSGET * $100 + BF_SYSGET_SNDFN +; +BC_SYSGET_SWITCH .EQU BF_SYSGET * $100 + BF_SYSGET_SWITCH +BC_SYSGET_TIMER .EQU BF_SYSGET * $100 + BF_SYSGET_TIMER +BC_SYSGET_SECS .EQU BF_SYSGET * $100 + BF_SYSGET_SECS +BC_SYSGET_BOOTINFO .EQU BF_SYSGET * $100 + BF_SYSGET_BOOTINFO +BC_SYSGET_CPUINFO .EQU BF_SYSGET * $100 + BF_SYSGET_CPUINFO +BC_SYSGET_MEMINFO .EQU BF_SYSGET * $100 + BF_SYSGET_MEMINFO +BC_SYSGET_BNKINFO .EQU BF_SYSGET * $100 + BF_SYSGET_BNKINFO +BC_SYSGET_CPUSPD .EQU BF_SYSGET * $100 + BF_SYSGET_CPUSPD +BC_SYSGET_PANEL .EQU BF_SYSGET * $100 + BF_SYSGET_PANEL +BC_SYSGET_APPBNKS .EQU BF_SYSGET * $100 + BF_SYSGET_APPBNKS +; +BC_SYSSET_SWITCH .EQU BF_SYSSET * $100 + BF_SYSSET_SWITCH +BC_SYSSET_TIMER .EQU BF_SYSSET * $100 + BF_SYSSET_TIMER +BC_SYSSET_SECS .EQU BF_SYSSET * $100 + BF_SYSSET_SECS +BC_SYSSET_BOOTINFO .EQU BF_SYSSET * $100 + BF_SYSSET_BOOTINFO +BC_SYSSET_CPUSPD .EQU BF_SYSSET * $100 + BF_SYSSET_CPUSPD +BC_SYSSET_PANEL .EQU BF_SYSSET * $100 + BF_SYSSET_PANEL +; CIO_CONSOLE .EQU $80 ; CIO UNIT NUM FOR CUR CON ; ; PRIMARY HARDWARE PLATFORMS ; +PLT_NONE .EQU 0 ; UNDEFINED PLATFORM PLT_SBC .EQU 1 ; SBC ECB Z80 SBC PLT_ZETA .EQU 2 ; ZETA Z80 SBC PLT_ZETA2 .EQU 3 ; ZETA Z80 V2 SBC @@ -156,26 +200,28 @@ PLT_DUO .EQU 17 ; DUODYNE Z80 SYSTEM PLT_HEATH .EQU 18 ; HEATHKIT H8 Z80 SYSTEM PLT_EPITX .EQU 19 ; Z180 MINI-ITX PLT_MON .EQU 20 ; MONSPUTER -PLT_STDZ180 .EQU 21 ; GENESIS Z180 SYSTEM +PLT_GMZ180 .EQU 21 ; GENESIS Z180 SYSTEM PLT_NABU .EQU 22 ; NABU PERSONAL COMPUTER +PLT_FZ80 .EQU 23 ; S100 FPGA Z80 +PLT_RCEZ80 .EQU 24 ; RCBUS W/ eZ80 ; ; HBIOS GLOBAL ERROR RETURN VALUES ; -ERR_NONE .EQU 0 ; SUCCESS -; -ERR_UNDEF .EQU -1 ; UNDEFINED ERROR -ERR_NOTIMPL .EQU -2 ; FUNCTION NOT IMPLEMENTED -ERR_NOFUNC .EQU -3 ; INVALID FUNCTION -ERR_NOUNIT .EQU -4 ; INVALID UNIT NUMBER -ERR_NOMEM .EQU -5 ; OUT OF MEMORY -ERR_RANGE .EQU -6 ; PARAMETER OUT OF RANGE -ERR_NOMEDIA .EQU -7 ; MEDIA NOT PRESENT -ERR_NOHW .EQU -8 ; HARDWARE NOT PRESENT -ERR_IO .EQU -9 ; I/O ERROR -ERR_READONLY .EQU -10 ; WRITE REQUEST TO READ-ONLY MEDIA -ERR_TIMEOUT .EQU -11 ; DEVICE TIMEOUT -ERR_BADCFG .EQU -12 ; INVALID CONFIGURATION -ERR_INTERNAL .EQU -13 ; INTERNAL ERROR +ERR_NONE .EQU 0 ; SUCCESS +; +ERR_UNDEF .EQU -1 ; UNDEFINED ERROR +ERR_NOTIMPL .EQU -2 ; FUNCTION NOT IMPLEMENTED +ERR_NOFUNC .EQU -3 ; INVALID FUNCTION +ERR_NOUNIT .EQU -4 ; INVALID UNIT NUMBER +ERR_NOMEM .EQU -5 ; OUT OF MEMORY +ERR_RANGE .EQU -6 ; PARAMETER OUT OF RANGE +ERR_NOMEDIA .EQU -7 ; MEDIA NOT PRESENT +ERR_NOHW .EQU -8 ; HARDWARE NOT PRESENT +ERR_IO .EQU -9 ; I/O ERROR +ERR_READONLY .EQU -10 ; WRITE REQUEST TO READ-ONLY MEDIA +ERR_TIMEOUT .EQU -11 ; DEVICE TIMEOUT +ERR_BADCFG .EQU -12 ; INVALID CONFIGURATION +ERR_INTERNAL .EQU -13 ; INTERNAL ERROR ; ; HBIOS DIAG OPTIONS ; @@ -190,46 +236,46 @@ DIAG_TRIG .EQU 6 ; TRIGGER DIAG_DISP .EQU DIAG_PROG ; DEFAULT ; #IF (DIAG_DISP == DIAG_PROG) -DIAG_00 .EQU 00000000B -DIAG_01 .EQU 00000001B -DIAG_02 .EQU 00000011B -DIAG_03 .EQU 00000111B -DIAG_04 .EQU 00001111B -DIAG_05 .EQU 00011111B -DIAG_06 .EQU 00111111B -DIAG_07 .EQU 01111111B -DIAG_08 .EQU 11111111B -DIAG_09 .EQU 11111111B +DIAG_00 .EQU 00000000B +DIAG_01 .EQU 00000001B +DIAG_02 .EQU 00000011B +DIAG_03 .EQU 00000111B +DIAG_04 .EQU 00001111B +DIAG_05 .EQU 00011111B +DIAG_06 .EQU 00111111B +DIAG_07 .EQU 01111111B +DIAG_08 .EQU 11111111B +DIAG_09 .EQU 11111111B #ENDIF ; #IF (DIAG_DISP == DIAG_STEP) -DIAG_00 .EQU 00000000B -DIAG_01 .EQU 00000001B -DIAG_02 .EQU 00000010B -DIAG_03 .EQU 00000100B -DIAG_04 .EQU 00001000B -DIAG_05 .EQU 00010000B -DIAG_06 .EQU 00100000B -DIAG_07 .EQU 01000000B +DIAG_00 .EQU 00000000B +DIAG_01 .EQU 00000001B +DIAG_02 .EQU 00000010B +DIAG_03 .EQU 00000100B +DIAG_04 .EQU 00001000B +DIAG_05 .EQU 00010000B +DIAG_06 .EQU 00100000B +DIAG_07 .EQU 01000000B DIAG_08 .EQU 10000000B DIAG_09 .EQU 11111111B #ENDIF ; #IF (DIAG_DISP == DIAG_ASCII) -DIAG_00 .EQU '0' +DIAG_00 .EQU '0' DIAG_01 .EQU '1' -DIAG_02 .EQU '2' -DIAG_03 .EQU '3' +DIAG_02 .EQU '2' +DIAG_03 .EQU '3' DIAG_04 .EQU '4' DIAG_05 .EQU '5' -DIAG_06 .EQU '6' +DIAG_06 .EQU '6' DIAG_07 .EQU '7' -DIAG_08 .EQU '8' -DIAG_09 .EQU '9' +DIAG_08 .EQU '8' +DIAG_09 .EQU '9' #ENDIF ; #IF (DIAG_DISP == DIAG_BINARY) -DIAG_00 .EQU 0 +DIAG_00 .EQU 0 DIAG_01 .EQU 1 DIAG_02 .EQU 2 DIAG_03 .EQU 3 @@ -238,7 +284,7 @@ DIAG_05 .EQU 5 DIAG_06 .EQU 6 DIAG_07 .EQU 7 DIAG_08 .EQU 8 -DIAG_09 .EQU 9 +DIAG_09 .EQU 9 #ENDIF ; #IF (DIAG_DISP == DIAG_7SEG) @@ -247,30 +293,30 @@ DIAG_00 .EQU 00000000B ; BLANK DIAG_01 .EQU 01111110B ; 0 DIAG_02 .EQU 00110000B ; 1 DIAG_03 .EQU 01101101B ; 2 -DIAG_04 .EQU 01111001B ; 3 +DIAG_04 .EQU 01111001B ; 3 DIAG_05 .EQU 00110011B ; 4 DIAG_06 .EQU 01011011B ; 5 -DIAG_07 .EQU 00011111B ; 6 +DIAG_07 .EQU 00011111B ; 6 DIAG_08 .EQU 01110000B ; 7 DIAG_09 .EQU 01111111B ; 8 DIAG_10 .EQU 01110011B ; 9 #ENDIF ; #IF (DIAG_DISP == DIAG_FLASH) -DIAG_00 .EQU 00000000B ; OFF +DIAG_00 .EQU 00000000B ; OFF DIAG_01 .EQU 11111111B ; ON -DIAG_02 .EQU 00000000B ; OFF +DIAG_02 .EQU 00000000B ; OFF DIAG_03 .EQU 11111111B ; ON -DIAG_04 .EQU 00000000B ; OFF +DIAG_04 .EQU 00000000B ; OFF DIAG_05 .EQU 11111111B ; ON -DIAG_06 .EQU 00000000B ; OFF +DIAG_06 .EQU 00000000B ; OFF DIAG_07 .EQU 11111111B ; ON -DIAG_08 .EQU 00000000B ; OFF -DIAG_09 .EQU 11111111B ; ON +DIAG_08 .EQU 00000000B ; OFF +DIAG_09 .EQU 11111111B ; ON #ENDIF ; #IF (DIAG_DISP == DIAG_TRIG) -DIAG_00 .EQU 11111111B ; ON +DIAG_00 .EQU 11111111B ; ON DIAG_01 .EQU 11111111B ; ON DIAG_02 .EQU 11111111B ; ON DIAG_03 .EQU 11111111B ; ON @@ -279,7 +325,7 @@ DIAG_05 .EQU 11111111B ; ON DIAG_06 .EQU 11111111B ; ON DIAG_07 .EQU 11111111B ; ON DIAG_08 .EQU 11111111B ; ON -DIAG_09 .EQU 11111111B ; ON +DIAG_09 .EQU 11111111B ; ON #ENDIF ; ; FRONT PANEL SWITCHES @@ -291,6 +337,21 @@ SW_DISK .EQU %00010000 ; DISK/ROM SW_FLOP .EQU %00001000 ; FLOP/HD SW_OPT .EQU %00000111 ; SLICE/ROM APP ; +; NVRAM SWITCHES +; +; used for identifying Non Volitile Switches +NVSW_DEFBOOT .EQU 1 ; Default Boot NVRAM Switch +NVSW_AUTOBOOT .EQU 3 ; Auto Boot NVRAM Switch +; +; NVRAM SWITCH BIT MASKS +; +; AUTO BOOT MASKS +ABOOT_AUTO .EQU %00100000 ; AUTO=1/MANUAL=0 BOOT +ABOOT_TIMEOUT .EQU %00001111 ; MENU TIMEOUT IN SECONDS, 0=IMMEDIAGE +; DEFAULT BOOT MASKS +DBOOT_ROM .EQU %10000000 ; ROM=1/DISK=0 FLAG +DBOOT_UNIT .EQU %01111111 ; DISK UNIT +; ; MEDIA ID VALUES ; MID_NONE .EQU 0 @@ -305,6 +366,11 @@ MID_FD120 .EQU 8 MID_FD111 .EQU 9 MID_HDNEW .EQU 10 ; +; SECTORS PER SLICE +; +SPS_HD512 .EQU $4100 +SPS_HD1K .EQU $4000 +; ; CHAR DEVICE IDS ; CIODEV_UART .EQU $00 @@ -323,6 +389,8 @@ CIODEV_ESPCON .EQU $0C CIODEV_ESPSER .EQU $0D CIODEV_SCON .EQU $0E CIODEV_EF .EQU $0F +CIODEV_SSER .EQU $10 +CIODEV_EZ80UART .EQU $11 ; ; SUB TYPES OF CHAR DEVICES ; @@ -357,12 +425,16 @@ RTCDEV_SIMH .EQU $02 ; SIMH RTCDEV_INT .EQU $03 ; PERIODIC INT TIMER RTCDEV_DS7 .EQU $04 ; DS1307 (I2C) RTCDEV_RP5 .EQU $05 ; RP5C01 +RTCDEV_DS5 .EQU $06 ; DS1305 (SPI) +RTCDEV_EZ80 .EQU $07 ; EZ80 ON-CHIP RTC ; ; DSKY DEVICE IDS ; DSKYDEV_ICM .EQU $00 ; Intersil ICM7218 DSKYDEV_PKD .EQU $01 ; Intel P8279 DSKYDEV_H8P .EQU $02 ; Heath H8 Panel +DSKYDEV_GM7303 .EQU $03 ; Genesis GM7303 LCD Panel +DSKYDEV_LCD .EQU $04 ; RCBus LCD Panel ; ; VIDEO DEVICE IDS ; @@ -373,6 +445,7 @@ VDADEV_TMS .EQU $03 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 VDADEV_VGA .EQU $04 ; ECB VGA3 - HITACHI HD6445 VDADEV_VRC .EQU $05 ; VGARC VDADEV_EF .EQU $06 ; EF9345 +VDADEV_FV .EQU $07 ; S100 FPGA VGA ; ; SOUND DEVICE IDS ; @@ -432,10 +505,14 @@ HCB_SERDEV .EQU $10 ; PRIMARY SERIAL DEVICE/UNIT (BYTE) HCB_CRTDEV .EQU $11 ; CRT DISPLAY DEVICE/UNIT (BYTE) HCB_CONDEV .EQU $12 ; ACTIVE CONSOLE DEVICE/UNIT (BYTE) HCB_DIAGLVL .EQU $13 ; HBIOS DIAGNOSTIC LEVEL (BYTE) +HCB_BOOTMODE .EQU $14 ; HBIOS BOOTMODE (BYTE) ; HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP ; +HCB_SW_DBOOT .EQU $31 ; DEFAULT BOOT CONFIG (WORD) +HCB_SW_AUTOB .EQU $33 ; AUTO BOOT CONFIG (BYTE) +; ; MEMORY BANK IDS (ONE BYTE EACH) HCB_BIDCOM .EQU $D8 ; COMMON BANK (UPPER 32K) HCB_BIDUSR .EQU $D9 ; USER BANK (TPA) diff --git a/Source/HBIOS/hdsk.asm b/Source/HBIOS/hdsk.asm index 6dfc426f..af357564 100644 --- a/Source/HBIOS/hdsk.asm +++ b/Source/HBIOS/hdsk.asm @@ -239,13 +239,13 @@ HDSK_RW0: XOR A ; A = 0 LD (HDSK_RC),A ; CLEAR RETURN CODE ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,HDSK_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; CONVERT LBA HHHH:LLLL (4 BYTES) ; TO HDSK TRACK/SECTOR TTTT:SS (3 BYTES) diff --git a/Source/HBIOS/icm.asm b/Source/HBIOS/icm.asm index a0490cd4..49b558f7 100644 --- a/Source/HBIOS/icm.asm +++ b/Source/HBIOS/icm.asm @@ -27,24 +27,32 @@ ; PB0 | $01 [FW] $41 [0] $81 [BK] $C1 [CL] ; ; -ICM_PPIA .EQU ICMPPIBASE + 0 ; PORT A -ICM_PPIB .EQU ICMPPIBASE + 1 ; PORT B -ICM_PPIC .EQU ICMPPIBASE + 2 ; PORT C -ICM_PPIX .EQU ICMPPIBASE + 3 ; PPI CONTROL PORT +ICM_PPIA .EQU ICMPPIBASE + 0 ; PORT A +ICM_PPIB .EQU ICMPPIBASE + 1 ; PORT B +ICM_PPIC .EQU ICMPPIBASE + 2 ; PORT C +ICM_PPIX .EQU ICMPPIBASE + 3 ; PPI CONTROL PORT +; +ICM_ROWS .EQU 1 ; DISPLAY ROWS +ICM_COLS .EQU 8 ; DISPLAY COLUMNS ; DEVECHO "ICM: IO=" DEVECHO ICMPPIBASE + DEVECHO ", SIZE=" + DEVECHO ICM_COLS + DEVECHO "X" + DEVECHO ICM_ROWS DEVECHO "\n" ; -;__ICM_INIT__________________________________________________________________________________________ +;__ICM_INIT________________________________________________________________________________________ ; ; CONFIGURE PARALLEL PORT AND CLEAR KEYPAD BUFFER -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; ICM_PREINIT: - LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET? - OR A ; SET FLAGS - RET NZ ; IF ALREADY ACTIVE, ABORT +; + ; RESET PRESENCE FLAG + XOR A ; ASSUME NOT PRESENT + LD (ICM_PRESENT),A ; SAVE IT ; OR $FF ; SIGNAL TO WAIT FOR KEY RELEASE LD (ICM_KEYBUF),A ; SET IT @@ -82,9 +90,36 @@ ICM_PREINIT: ; REGISTER DRIVER WITH HBIOS LD BC,ICM_DISPATCH CALL DSKY_SETDISP +; + CALL ICM_SHOWVER ; RET ; +ICM_SHOWVER: + LD HL,ICM_VERSTR + LD DE,ICM_BUF + LD BC,ICM_COLS + LDIR + LD HL,ICM_BUF + 5 + LD A,RMJ + LD A,(ICM_SEGMAP + RMJ) + OR $80 + LD (HL),A + INC HL + LD A,(ICM_SEGMAP + RMN) + OR $80 + LD (HL),A + INC HL + LD A,(ICM_SEGMAP + RUP) + LD (HL),A +; + ; DISPLAY VERSION ON ICM + LD C,0 + LD B,8 + LD HL,ICM_BUF + CALL ICM_PUTBUF + RET +; ICM_INIT: CALL NEWLINE ; FORMATTING PRTS("ICM:$") ; FORMATTING @@ -95,9 +130,18 @@ ICM_INIT: ; LD A,(ICM_PRESENT) ; PRESENT? OR A ; SET FLAGS - RET NZ ; YES, ALL DONE + JR NZ,ICM_INIT1 ; YES, CONTINUE PRTS(" NOT PRESENT$") ; NOT PRESENT + RET ; +ICM_INIT1: + CALL PC_SPACE + LD A,ICM_COLS + CALL PRTDEC8 + LD A,'X' + CALL COUT + LD A,ICM_ROWS + CALL PRTDEC8 RET ; ; ICM DEVICE FUNCTION DISPATCH ENTRY @@ -124,6 +168,10 @@ ICM_DISPATCH: JP Z,ICM_BEEP ; BEEP DSKY SPEAKER DEC A JP Z,ICM_DEVICE ; DEVICE INFO + DEC A + JP Z,ICM_MESSAGE ; HANDLE MESSAGE + DEC A + JP Z,ICM_EVENT ; HANDLE EVENT SYSCHKERR(ERR_NOFUNC) RET ; @@ -187,47 +235,44 @@ ICM_GETKEY2: ; DISPLAY HEX VALUE FROM DE:HL ; ICM_SHOWHEX: - LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER + LD BC,ICM_TMP32 ; POINT TO HEX BUFFER CALL ST32 ; STORE 32-BIT BINARY THERE - LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL) - LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE) - CALL DSKY_BIN2SEG ; CONVERT - LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER - ; AND FALL THRU TO DISPLAY IT + LD HL,ICM_TMP32 ; FROM: BINARY VALUE (HL) + LD DE,ICM_BUF ; TO: SEGMENT BUFFER (DE) + CALL ICM_BIN2SEG ; CONVERT + LD HL,ICM_BUF ; POINT TO SEGMENT BUFFER + CALL ICM_PUTBUF ; DO IT + XOR A ; SUCCESS + RET ; AND RETURN ; ; ICM SHOW BUFFER ; HL: ADDRESS OF BUFFER ; ICM_SHOWSEG: - LD A,82H ; SETUP PPI - OUT (ICM_PPIX),A - CALL ICM_COFF - LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE) - OUT (ICM_PPIA),A - CALL ICM_STROBEC ; STROBE COMMAND - LD B,DSKY_BUFLEN ; NUMBER OF DIGITS - LD C,ICM_PPIA -ICM_HEXOUT2: - LD A,(HL) - CALL ICM_XLAT ; MAP SEGMENTS - XOR $80 ; FIX DOT POLARITY - OUT (C),A - INC HL - DEC B - JP Z,ICM_STROBE ; DO FINAL STROBE AND RETURN - CALL ICM_STROBE ; STROBE BYTE VALUE - JR ICM_HEXOUT2 -ICM_STROBEC: ; COMMAND STROBE - LD A,80H | 30H - JP ICM_STROBE0 -ICM_STROBE: ; DATA STROBE - LD A,00H | 30H ; SET WRITE STROBE -ICM_STROBE0: - OUT (ICM_PPIC),A ; OUT TO PORTC - CALL DLY2 ; DELAY -ICM_COFF: - LD A,40H | 30H ; QUIESCE - OUT (ICM_PPIC),A ; OUT TO PORTC + ; CONVERT FROM DBG ALPHABET TO SEG CODES + LD B,ICM_COLS ; DO FOR ALL CHARS + LD DE,ICM_BUF ; DESTINATION BUFFER +ICM_SHOWSEG1: + LD A,(HL) ; GET SOURCE VALUE + INC HL ; BUMP FOR NEXT TIME + PUSH AF ; SAVE IT + AND $80 ; ISOLATE HI BIT (DP) + LD C,A ; SAVE IN C + POP AF ; RECOVER ORIGINAL + AND $7F ; REMOVE HI BIT (DP) + PUSH HL ; SAVE IT + LD HL,ICM_SEGMAP ; POINT TO XLAT MAP + CALL ADDHLA ; OFFSET BY VALUE + LD A,(HL) ; GET NEW VALUE + OR C ; RECOMBINE WITH DP BIT + LD (DE),A ; SAVE IT + INC DE ; BUMP PTR + POP HL ; RESTORE SOURCE PTR + DJNZ ICM_SHOWSEG1 ; LOOP TILL DONE +; + ; DISPLAY CONVERTED BUFFER + LD HL,ICM_BUF ; BUFFER + CALL ICM_PUTBUF ; DO IT XOR A ; SIGNAL SUCCESS RET ; @@ -249,10 +294,76 @@ ICM_DEVICE: XOR A ; SIGNAL SUCCESS RET ; -;__ICM_KEY___________________________________________________________________________________________ +; MESSAGE HANDLER +; +ICM_MESSAGE: + LD A,C ; GET MESSAGE ID + ADD A,A ; WORD OFFSET + LD HL,ICM_MSGTBL ; START OF MESSAGE TABLE + CALL ADDHLA ; ADD OFFSET + LD A,(HL) ; SAVE LSB + INC HL ; BUMP TO MSB + LD H,(HL) ; GET MSB + LD L,A ; GET LSB +; + ; HL HAS POINTER TO MESSAGE + CALL ICM_PUTBUF ; DISPLAY IT + XOR A ; SIGNAL SUCCESS + RET +; +; EVENT HANDLER +; +ICM_EVENT: + LD A,C ; EVENT ID + OR A ; 0=CPUSPD + JR Z,ICM_EVT_CPUSPD ; HANDLE CPU SPD CHANGE + DEC A ; 1=DSKACT + JR Z,ICM_EVT_DSKACT ; HANDLE DISK ACTIVITY + XOR A + RET +; +; CPU SPEED CHANGE +; +ICM_EVT_CPUSPD: + XOR A + RET +; +; DISK ACTIVITY +; +ICM_EVT_DSKACT: +; + ; USE DISK UNIT NUMBER FOR MSB + LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM + LD (HB_DSKADR+3),A ; REPLACE HIGH BYTE W/ DISK # +; + ; CONVERT TO SEGMENT DISPLAY + LD HL,HB_DSKADR ; INPUT POINTER + LD DE,ICM_BUF ; BUF FOR OUTPUT + CALL ICM_BIN2SEG ; CONVERT TO SEG DISPLAY +; + ; DECIMAL POINT FOR DISK UNIT SEPARATION + LD HL,ICM_BUF+1 ; SECOND CHAR OF DISP + SET 7,(HL) ; TURN ON DECIMAL PT +; + ; DECIMAL POINT TO INDICATE WRITE ACTION + LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION + CP BF_DIOWRITE ; IS IT A WRITE? + JR NZ,ICM_EVT_DSKACT2 ; IF NOT, SKIP + LD HL,ICM_BUF+7 ; POINT TO CHAR 7 + SET 7,(HL) ; SET WRITE DOT +; +ICM_EVT_DSKACT2: + ; UPDATE DISPLAY + LD HL,ICM_BUF ; SEG DISPLAY BUF TO HL + CALL ICM_PUTBUF +; + XOR A + RET +; +;__ICM_KEY_________________________________________________________________________________________ ; ; CHECK FOR KEY PRESS W/ DEBOUNCE -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; ICM_KEY: CALL ICM_SCAN ; INITIAL KEY PRESS SCAN @@ -273,10 +384,10 @@ ICM_KEY2: OR A ; SET FLAGS BASED ON VALUE RET ; AND DONE ; -;__ICM_SCAN__________________________________________________________________________________________ +;__ICM_SCAN________________________________________________________________________________________ ; ; SCAN KEYPAD AND RETURN RAW SCAN CODE (RETURNS ZERO IF NO KEY PRESSED) -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; ICM_SCAN: LD B,4 ; 4 COLUMNS @@ -300,37 +411,44 @@ ICM_SCAN2: OR E ; COMBINE WITH ROW JP ICM_RESET ; RETURN VIA RESET ; +;__ICM_PUTBUF______________________________________________________________________________________ ; -; CONVERT FORM STANDARD SEGMENT ENCODING TO ICM ENCODING -; -; From: To: -; +--01--+ +--40--+ -; 20 02 02 20 -; +--40--+ +--04--+ -; 10 04 08 10 -; +--08--+ 80 +--01--+ 80 +; WRITE BUFFER AT HL TO SEGMENT DISPLAY +;__________________________________________________________________________________________________ ; -ICM_XLAT: - PUSH BC - PUSH HL - LD C,A ; ORIG VALUE TO C - XOR A ; INIT RESULT VALUE - LD B,8 - LD HL,ICM_XTBL -ICM_XLAT1: - RRC C ; SHIFT NEXT BIT TO CF - JR NC,ICM_XLAT2 ; SKIP IF BIT NOT SET - OR (HL) -ICM_XLAT2: +ICM_PUTBUF: + LD A,82H ; SETUP PPI + OUT (ICM_PPIX),A + CALL ICM_COFF + LD A,$F0 ; 7218 -> (DATA COMING, NO DECODE) + OUT (ICM_PPIA),A + CALL ICM_STROBEC ; STROBE COMMAND + LD B,ICM_COLS ; NUMBER OF DIGITS + LD C,ICM_PPIA +ICM_HEXOUT2: + LD A,(HL) + XOR $80 ; FIX DOT POLARITY + OUT (C),A INC HL - DJNZ ICM_XLAT1 - POP HL - POP BC + DEC B + JP Z,ICM_STROBE ; DO FINAL STROBE AND RETURN + CALL ICM_STROBE ; STROBE BYTE VALUE + JR ICM_HEXOUT2 +ICM_STROBEC: ; COMMAND STROBE + LD A,80H | 30H + JP ICM_STROBE0 +ICM_STROBE: ; DATA STROBE + LD A,00H | 30H ; SET WRITE STROBE +ICM_STROBE0: + OUT (ICM_PPIC),A ; OUT TO PORTC + CALL DLY2 ; DELAY +ICM_COFF: + LD A,40H | 30H ; QUIESCE + OUT (ICM_PPIC),A ; OUT TO PORTC + XOR A ; SIGNAL SUCCESS RET ; -ICM_XTBL .DB $40, $20, $10, $01, $08, $02, $04, $80 -; -;_ _TABLE_____________________________________________________________________________________________________________ +;_KEYMAP_TABLE_____________________________________________________________________________________ ; ICM_KEYMAP: ; POS $00 $01 $02 $03 $04 $05 $06 $07 @@ -353,6 +471,35 @@ ICM_KEYBUF .DB 0 ; UTILTITY FUNCTIONS ;================================================================================================== ; +; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY +; +; HL: ADR OF 32 BIT BINARY +; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES) +; +ICM_BIN2SEG: + LD B,4 ; 4 BYTES OF INPUT + LD A,B ; PUT IN ACCUM + CALL ADDHLA ; PROCESS FROM END (LITTLE ENDIAN) +ICM_BIN2SEG1: + DEC HL ; DEC PTR (LITTLE ENDIAN) + LD A,(HL) ; HIGH NIBBLE + RRCA \ RRCA \ RRCA \ RRCA ; ROTATE BITS + CALL ICM_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF + LD A,(HL) ; LOW NIBBLE + CALL ICM_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF + DJNZ ICM_BIN2SEG1 ; LOOP FOR ALL INPUT BYTES + RET ; DONE +; +ICM_BIN2SEG_NIB: + PUSH HL ; SAVE HL + LD HL,ICM_SEGMAP ; POINT TO SEG MAP TABLE + AND $0F ; ISOLATE LOW NIBBLE + CALL ADDHLA ; OFFSET INTO TABLE + LD A,(HL) ; LOAD VALUE FROM TABLE + POP HL ; RESTORE HL + LD (DE),A ; SAVE VALUE TO OUTPUT BUF + INC DE ; BUMP TO NEXT OUTPUT BYTE + RET ; DONE ; ;================================================================================================== ; STORAGE @@ -361,3 +508,37 @@ ICM_KEYBUF .DB 0 ; SEG DISPLAY WORKING STORAGE ; ICM_PRESENT .DB 0 +ICM_BUF .FILL ICM_COLS +ICM_TMP32 .FILL 4,0 ; TEMP DWORD +; +ICM_VERSTR .DB $3E,$7F,$0A,$7B,$57,$00,$00,$00 ; "HBIOS " +; +ICM_SEGMAP: +; + ; POS $00 $01 $02 $03 $04 $05 $06 $07 + ; GLYPH '0' '1' '2' '3' '4' '5' '6' '7' + + .DB $7B, $30, $6D, $75, $36, $57, $5F, $70 +; + ; POS $08 $09 $0A $0B $0C $0D $0E $0F + ; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' + .DB $7F, $76, $7E, $1F, $4B, $3D, $4F, $4E +; + ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A + ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' + .DB $00, $04, $00, $6E, $1D, $0C, $0F, $7E, $3D, $0C, $5F +; +ICM_MSGTBL: + .DW ICM_MSG_LDR_SEL + .DW ICM_MSG_LDR_BOOT + .DW ICM_MSG_LDR_LOAD + .DW ICM_MSG_LDR_GO + .DW ICM_MSG_MON_RDY + .DW ICM_MSG_MON_BOOT +; +ICM_MSG_LDR_SEL .DB $7F,$1D,$1D,$0F,$6C,$00,$00,$00 ; "Boot? " +ICM_MSG_LDR_BOOT .DB $7F,$1D,$1D,$0F,$80,$80,$80,$00 ; "Boot... " +ICM_MSG_LDR_LOAD .DB $0B,$1D,$7E,$3D,$80,$80,$80,$00 ; "Load... " +ICM_MSG_LDR_GO .DB $5F,$1D,$80,$80,$80,$00,$00,$00 ; "Go... " +ICM_MSG_MON_RDY .DB $04,$4B,$6E,$3B,$00,$3B,$6E,$04 ; "-CPU UP-" +ICM_MSG_MON_BOOT .DB $7F,$1D,$1D,$0F,$B0,$00,$00,$00 ; "Boot! " diff --git a/Source/HBIOS/ide.asm b/Source/HBIOS/ide.asm index 388c3181..96d2626b 100644 --- a/Source/HBIOS/ide.asm +++ b/Source/HBIOS/ide.asm @@ -18,6 +18,7 @@ ; MK4 $80 N/A N/A ; RC $10 N/A N/A ; SMB $E0 N/A N/A +; GIDE $20 $20 $28 - Genesis IDE controller - Note Read Hi Low - Write - Low High ; ; +-----------------------------------------------------------------------+ ; | CONTROL BLOCK REGISTERS | @@ -224,6 +225,9 @@ IDE_DEV0M: ; DEVICE 0, MASTER #IF (IDE0MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE0MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE0MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -259,6 +263,9 @@ IDE_DEV0S: ; DEVICE 0, SLAVE #IF (IDE0MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE0MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE0MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -297,6 +304,9 @@ IDE_DEV1M: ; DEVICE 1, MASTER #IF (IDE1MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE1MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE1MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -332,6 +342,9 @@ IDE_DEV1S: ; DEVICE 1, SLAVE #IF (IDE1MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE1MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE1MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -370,6 +383,9 @@ IDE_DEV2M: ; DEVICE 2, MASTER #IF (IDE2MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE2MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE2MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -405,6 +421,9 @@ IDE_DEV2S: ; DEVICE 2, SLAVE #IF (IDE2MODE == IDEMODE_DIDE) DEVECHO "DIDE" #ENDIF + #IF (IDE2MODE == IDEMODE_GIDE) + DEVECHO "GIDE" + #ENDIF #IF (IDE2MODE == IDEMODE_MK4) DEVECHO "MK4" #ENDIF @@ -435,7 +454,8 @@ IDE_DEV2S: ; DEVICE 2, SLAVE ; PICO TO WAIT FOR THE PICO DEVICE TO INITIALIZE. ; IDE_TOSLOW .EQU 200 ; SLOW TIMEOUT IS 20 SECS -IDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.5 SECS +;IDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.5 SECS +IDE_TONORM .EQU 200 ; NORMAL TIMEOUT IS 0.5 SECS IDE_TOPICO .EQU 50 ; RC2014 SD PICO (5 SECONDS) ; ;============================================================================= @@ -490,6 +510,9 @@ IDE_INIT2: LD DE,IDE_STR_MODE_RC ; MODE LABEL CP IDEMODE_RC ; TEST FOR MODE JR Z,IDE_INIT2A ; IF SO, DISPLAY IT + LD DE,IDE_STR_MODE_GIDE ; MODE LABEL + CP IDEMODE_GIDE ; TEST FOR MODE + JR Z,IDE_INIT2A ; IF SO, DISPLAY IT JR IDE_INIT4 ; NO MODE? BYPASS ENTRY IDE_INIT2A: CALL WRITESTR ; DISPLAY MODE @@ -919,13 +942,13 @@ IDE_PKT_RDSEC: #ENDIF ; SETUP LBA ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,IDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) @@ -988,13 +1011,13 @@ IDE_PKT_WRSEC: #ENDIF ; SETUP LBA ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,IDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN LD HL,IDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) @@ -1020,13 +1043,13 @@ IDE_PKT_WRSEC: ; IDE_SETADDR: ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,IDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; SEND 3 LOWEST BYTES OF LBA IN REVERSE ORDER ; IDE_REG_LBA3 HAS ALREADY BEEN SET ; HSTLBA2-0 --> IDE_REG_LBA2-0 @@ -1238,8 +1261,10 @@ IDE_GET8: ;LD C,IDE_REG_DATA LD C,(IY+IDE_IOBASE) LD B,A + EZ80_IO INIR LD B,A + EZ80_IO INIR RET ; @@ -1252,10 +1277,19 @@ IDE_GET16: RET ; IDE_GET16A: +#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED + LD C,E ; PORT FOR MSB + INI ; GET IT, SAVE IT, AND DEC B + LD C,D ; PORT FOR LSB + INI ; GET IT, SAVE IT, AND DEC B +#ELSE LD C,D ; PORT FOR LSB + EZ80_IO INI ; GET IT, SAVE IT, AND DEC B LD C,E ; PORT FOR MSB + EZ80_IO INI ; GET IT, SAVE IT, AND DEC B +#ENDIF DEC A JR NZ,IDE_GET16A ; LOOP TILL COUNTER EXHAUSTED RET @@ -1303,8 +1337,10 @@ IDE_PUT8: ;LD C,IDE_REG_DATA LD C,(IY+IDE_IOBASE) LD B,A + EZ80_IO OTIR LD B,A + EZ80_IO OTIR RET ; @@ -1317,11 +1353,20 @@ IDE_PUT16: RET ; IDE_PUT16A: +#IF (IDE0MODE == IDEMODE_GIDE) ; GENESIS BOARD IS REVERSED + LD C,E ; PORT FOR MSB + OUTI ; PUT IT AND DEC B LD C,D ; PORT FOR LSB OUTI ; PUT IT AND DEC B +#ELSE + LD C,D ; PORT FOR LSB + EZ80_IO + OUTI ; PUT IT AND DEC B LD C,E ; PORT FOR MSB + EZ80_IO OUTI ; PUT IT AND DEC B DEC A +#ENDIF JR NZ,IDE_PUT16A ; LOOP TILL COUNTER EXHAUSTED RET ; @@ -1553,7 +1598,19 @@ IDE_WAIT001: LD C,(IY+IDE_IOBASE) LD B,8 ; NUMBER OF REGISTERS TO CHECK IDE_WAIT002: - IN A,(C) ; GET REGISTER VALUE + + ; THE EZ80_IO ROUTINE SEEMS TO ALWAYS RETURN $00 FOR UNOCCUPIED + ; PORTS. THAT CAUSES AN INORDINATE DELAY HERE, SO WE HANDLE + ; 16 BIT I/O OURSELVES. + + ;;;EZ80_IO + ;;;IN A,(C) ; GET REGISTER VALUE + + PUSH BC ; SAVE LOOP CONTROL + LD B,IO_SEGMENT ; MSB FOR I/O + IN A,(C) ; READ PORT + POP BC ; RESTORE LOOP CONTROL + ;CALL PC_SPACE ;CALL PRTHEXBYTE OR A ; SET FLAGS @@ -1978,6 +2035,7 @@ IDE_IN: LD C,(IY+IDE_IOBASE) ; 19TS ADD A,C ; 4TS LD C,A ; 4TS + EZ80_IO IN A,(C) ; 12TS POP BC ; 10TS EX (SP),HL ; RESTORE STACK ; 19TS @@ -1989,12 +2047,23 @@ IDE_OUT: EX (SP),HL ; GET PARM POINTER PUSH BC PUSH AF +; +#IF (IDE0MODE == IDEMODE_GIDE) ; SET TOP BYTE TO 0 FOR GENESIS BOARD + LD A,(HL) + LD C,(IY+IDE_DATAHI) + ADD A,C + LD C,A + LD A,0 + OUT (C),A +#ENDIF +; LD A,(HL) INC HL LD C,(IY+IDE_IOBASE) ADD A,C LD C,A POP AF + EZ80_IO OUT (C),A POP BC EX (SP),HL ; RESTORE STACK @@ -2138,6 +2207,7 @@ IDE_REGDUMP: LD C,A LD B,7 IDE_REGDUMP1: + EZ80_IO IN A,(C) CALL PRTHEXBYTE DEC C @@ -2188,6 +2258,7 @@ IDE_STR_MODE_DIO .TEXT "DIO$" IDE_STR_MODE_DIDE .TEXT "DIDE$" IDE_STR_MODE_MK4 .TEXT "MK4$" IDE_STR_MODE_RC .TEXT "RC$" +IDE_STR_MODE_GIDE .TEXT "GIDE$" ; IDE_STR_TYPEATA .TEXT " ATA$" IDE_STR_TYPEATAPI .TEXT " ATAPI$" diff --git a/Source/HBIOS/imm.asm b/Source/HBIOS/imm.asm index 237c6ed4..5daf5cfd 100644 --- a/Source/HBIOS/imm.asm +++ b/Source/HBIOS/imm.asm @@ -239,6 +239,7 @@ IMM_DETECT: ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT LD C,A ; MOVE TO C FOR I/O LD A,$82 ; CONFIG A OUT, B IN, C OUT + EZ80_IO OUT (C),A ; DO IT CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE #ENDIF @@ -343,13 +344,13 @@ IMM_IO: ; LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,IMM_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; SETUP LBA ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN @@ -479,6 +480,7 @@ IMM_GEOM: ; IMM_WRITEDATA: LD C,(IY+IMM_IOBASE) ; DATA PORT IS AT IOBASE + EZ80_IO OUT (C),A ; WRITE THE BYTE ;CALL DELAY ; IS THIS NEEDED??? RET ; DONE @@ -501,6 +503,7 @@ IMM_WRITECTRL: LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS INC C ; BUMP TO CONTROL PORT INC C + EZ80_IO OUT (C),A ; WRITE TO CONTROL PORT ;CALL DELAY ; IS THIS NEEDED? RET ; DONE @@ -519,6 +522,7 @@ IMM_WRITECTRL: IMM_READSTATUS: LD C,(IY+IMM_IOBASE) ; IOBASE TO C INC C ; BUMP TO STATUS PORT + EZ80_IO IN A,(C) ; READ IT ; #IF (IMMMODE == IMMMODE_MG014) @@ -963,9 +967,11 @@ IMM_GETBLOCK: ; IMM_GETBLOCK1: EXX ; ALT REGS + EZ80_IO OUT (C),D ; SEND FIRST CLOCK -IMM_GETBLOCK_A .EQU $+1 + EZ80_IO IN A,($FF) ; GET LOW NIBBLE +IMM_GETBLOCK_A .EQU $-1 #IF (IMMMODE == IMMMODE_MG014) AND $0F ; RELEVANT BITS ONLY ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR @@ -981,9 +987,11 @@ IMM_GETBLOCK_A .EQU $+1 RLCA ; MOVE TO LOW NIBBLE LD L,A ; SAVE NIBBLE IN L #ENDIF + EZ80_IO OUT (C),E ; SEND SECOND CLOCK -IMM_GETBLOCK_B .EQU $+1 + EZ80_IO IN A,($FF) ; GET HIGH NIBBLE +IMM_GETBLOCK_B .EQU $-1 #IF (IMMMODE == IMMMODE_MG014) AND $0F ; RELEVANT BITS ONLY ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR @@ -1079,13 +1087,17 @@ IMM_PUTBLOCK: IMM_PUTBLOCK1: LD A,(DE) ; GET NEXT BYTE IMM_PUTBLOCK_A .EQU $+1 + EZ80_IO OUT ($FF),A ; PUT ON BUS INC DE ; INCREMENT BUF POS + EZ80_IO OUT (C),H ; FIRST CLOCK LD A,(DE) ; GET NEXT BYTE IMM_PUTBLOCK_B .EQU $+1 + EZ80_IO OUT ($FF),A ; PUT ON BUS INC DE ; INCREMENT BUF POS + EZ80_IO OUT (C),L ; SECOND CLOCK DJNZ IMM_PUTBLOCK1 ; LOOP RET ; DONE diff --git a/Source/HBIOS/kbd.asm b/Source/HBIOS/kbd.asm index 67014d2b..75171cb0 100644 --- a/Source/HBIOS/kbd.asm +++ b/Source/HBIOS/kbd.asm @@ -169,6 +169,7 @@ KBD_IST: ; A=0, Z SET FOR NOTHING PENDING, OTHERWISE DATA PENDING ; LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO IN A,(C) ; GET STATUS AND $01 ; ISOLATE INPUT PENDING BIT RET @@ -180,6 +181,7 @@ KBD_OST: ; A=0, Z SET FOR NOT READY, OTHERWISE READY TO WRITE ; LD C,(IY+KBD_ST) ; STATUS PORT + EZ80_IO IN A,(C) ; GET STATUS AND $02 ; ISOLATE OUTPUT EMPTY BIT XOR $02 ; FLIP IT FOR APPROPRIATE RETURN VALUES @@ -210,6 +212,7 @@ KBD_PUTCMD1: CALL PRTHEXBYTE #ENDIF LD C,(IY+KBD_CMD) ; COMMAND PORT + EZ80_IO OUT (C),A ; WRITE IT KBD_PUTCMD2: XOR A ; SIGNAL SUCCESS @@ -239,6 +242,7 @@ KBD_PUTDATA1: CALL PRTHEXBYTE #ENDIF LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO OUT (C),A ; WRITE IT KBD_PUTDATA2: XOR A ; SIGNAL SUCCESS @@ -259,6 +263,7 @@ KBD_GETDATA0: RET KBD_GETDATA1: LD C,(IY+KBD_DAT) ; DATA PORT + EZ80_IO IN A,(C) ; GET THE DATA VALUE #IF (KBDTRACE >= 2) PUSH AF diff --git a/Source/HBIOS/layout.inc b/Source/HBIOS/layout.inc new file mode 100644 index 00000000..5b6f0143 --- /dev/null +++ b/Source/HBIOS/layout.inc @@ -0,0 +1,101 @@ +; +; The was extracted out of STD.ASM, so can be included +; in BIOS apps that are NOT in HBIOS directory! +; +; ============= +; MEMORY LAYOUT +; ============= +; +SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY) +HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K +HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE) +CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY) +CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP +BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS +CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER +; +MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY +BNKTOP .EQU $8000 ; BANK MEMORY BARRIER +; +HBX_IMG .EQU $200 ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK +; +HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS +HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER +HBX_END .EQU MEMTOP ; END OF HBIOS PROXY +HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY +CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS) +CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS +CBIOS_END .EQU HBX_LOC ; END OF CBIOS +CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS +; +CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) +; +CPM_IMGSIZ .EQU $3000 +; +; ================= +; ROM BANK 1 LAYOUT +; ================= +; +LDR_LOC .EQU $0000 +LDR_SIZ .EQU $1000 +LDR_END .EQU LDR_LOC +LDR_SIZ +LDR_IMGLOC .EQU $0000 +; +MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM +MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE +MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR +MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ +; +ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ +; +CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ +; +; ================= +; ROM BANK 2 LAYOUT +; ================= +; +FTH_LOC .EQU $0200 ; CAMEL FORTH +FTH_SIZ .EQU $1700 +FTH_END .EQU FTH_LOC + FTH_SIZ +FTH_IMGLOC .EQU $0000 + +BAS_LOC .EQU $0200 ; NASCOM BASIC +BAS_SIZ .EQU $2000 +BAS_END .EQU BAS_LOC + BAS_SIZ +BAS_IMGLOC .EQU FTH_IMGLOC + FTH_SIZ +; +; NOTE FOLLOWING ARE COPY/PASTED INTO tastybasic.asm !!!!!!!! +TBC_LOC .EQU $0A00 ; TASTYBASIC +TBC_SIZ .EQU $0A00 +TBC_END .EQU TBC_LOC + TBC_SIZ +TBC_IMGLOC .EQU BAS_IMGLOC + BAS_SIZ +; +GAM_LOC .EQU $0200 ; GAME 2048 +GAM_SIZ .EQU $0900 +GAM_END .EQU GAM_LOC + GAM_SIZ +GAM_IMGLOC .EQU TBC_IMGLOC + TBC_SIZ +; +EGG_LOC .EQU $F000 ; EASTER EGG +EGG_SIZ .EQU $0200 +EGG_END .EQU EGG_LOC + EGG_SIZ +EGG_IMGLOC .EQU GAM_IMGLOC + GAM_SIZ +; +NET_LOC .EQU $0100 ; NETWORK BOOT +NET_SIZ .EQU $1000 +NET_END .EQU NET_LOC + NET_SIZ +NET_IMGLOC .EQU EGG_IMGLOC + EGG_SIZ +; +UPD_LOC .EQU $0200 ; ROM UPDATER +UPD_SIZ .EQU $0D00 +UPD_END .EQU UPD_LOC + UPD_SIZ +UPD_IMGLOC .EQU NET_IMGLOC + NET_SIZ +; +NVR_LOC .EQU $0100 ; NVRAM CONFIG +NVR_SIZ .EQU $0800 +NVR_END .EQU NVR_LOC + NVR_SIZ +NVR_IMGLOC .EQU UPD_IMGLOC + UPD_SIZ +; +USR_LOC .EQU $0200 ; USER +USR_SIZ .EQU BNKTOP - NVR_IMGLOC - NVR_SIZ +USR_END .EQU USR_LOC + USR_SIZ +USR_IMGLOC .EQU NVR_IMGLOC + NVR_SIZ diff --git a/Source/HBIOS/lcd.asm b/Source/HBIOS/lcd.asm new file mode 100644 index 00000000..0a49df9b --- /dev/null +++ b/Source/HBIOS/lcd.asm @@ -0,0 +1,519 @@ +; +;================================================================================================== +; HARDWARE SUPPORT FOR HITACHI HD44780 OR EQUIVALENT +;================================================================================================== +; +; CURRENTLY ASSUMES A 20X4 DISPLAY +; +; TYPICAL PORTS USED ON RCBUS ECOSYSTEM: +; +; PRIMARY ALT +; FUNCTION $DA $AA +; DATA $DB $AB +; +LCD_FUNC .EQU LCDBASE + 0 ; WRITE +LCD_STAT .EQU LCDBASE + 0 ; READ +LCD_DATA .EQU LCDBASE + 1 ; READ/WRITE +; +LCD_ROWS .EQU 4 +LCD_COLS .EQU 20 +; +LCD_FUNC_CLEAR .EQU $01 ; CLEAR DISPLAY +LCD_FUNC_HOME .EQU $02 ; HOME CURSOR & REMOVE ALL SHIFTING +LCD_FUNC_ENTRY .EQU $04 ; SET CUR DIR AND DISPLAY SHIFT +LCD_FUNC_DISP .EQU $08 ; DISP, CUR, BLINK ON/OFF +LCD_FUNC_SHIFT .EQU $10 ; MOVE CUR / SHIFT DISP +LCD_FUNC_SET .EQU $20 ; SET INTERFACE PARAMS +LCD_FUNC_CGADR .EQU $40 ; SET CGRAM ADRESS +LCD_FUNC_DDADR .EQU $80 ; SET DDRAM ADDRESS +; + DEVECHO "LCD: IO=" + DEVECHO LCDBASE + DEVECHO ", SIZE=" + DEVECHO LCD_COLS + DEVECHO "X" + DEVECHO LCD_ROWS + DEVECHO "\n" +; +; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION +; +LCD_PREINIT: +; + ; RESET LCD CONTROLLER, DELAYS ARE FIXED, BUSY FLAG + ; CANNOT BE USED YET, CONTROLLER MAY NOT EXIST! + LD A,LCD_FUNC_SET | %11000 + EZ80_IO + OUT (LCD_FUNC),A + LD DE,50000/16 ; WAIT >40MS, WE USE 50MS + CALL VDELAY ; DO IT + LD A,LCD_FUNC_SET | %11000 + EZ80_IO + OUT (LCD_FUNC),A + LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS + CALL VDELAY ; DO IT + LD A,LCD_FUNC_SET | %11000 + EZ80_IO + OUT (LCD_FUNC),A + LD DE,5000/16 ; WAIT >4.1MS, WE USE 5MS + CALL VDELAY ; DO IT +; + ; TEST FOR PRESENCE... + CALL LCD_DETECT ; PROBE FOR HARDWARE + LD A,(LCD_PRESENT) ; GET PRESENCE FLAG + OR A ; SET FLAGS + RET Z ; BAIL OUT IF NOT PRESENT +; + ; REGISTER DRIVER WITH HBIOS + LD BC,LCD_DISPATCH + CALL DSKY_SETDISP +; + ; WE CAN NOW DO NORMAL I/O W/ BUSY FLAG + LD DE,LCD_INIT_SEQ ; INIT SEQUENCE + CALL LCD_OUTFS ; SEND IT +; + ; PUT SOMETHING ON THE DISPLAY + LD DE,LCD_STR_BAN + CALL LCD_OUTDS +; + ; SECOND LINE + ; CPU TYPE + LD HL,$0100 ; ROW 2, COL 0 + CALL LCD_GOTORC + LD HL,LCD_CPU + LD A,(HB_CPUTYPE) ; GET CPU TYPE + RLCA ; WORD OFFSET + CALL ADDHLA ; ADD OFFSET + LD E,(HL) ; GET LSB + INC HL ; BUMP + LD D,(HL) ; GET MSB + CALL LCD_OUTDS + LD DE,LCD_STR_XPU + CALL LCD_OUTDS +; + ; "12.345 MHz" RIGHT JUSTIFIED + LD HL,$010A ; ROW 2, COL 10 + CALL LCD_GOTORC + LD HL,(CB_CPUKHZ) + PUSH HL + LD BC,10000 ; 10 MHZ + SBC HL,BC ; SUBTRACT + JR NC,LCD_PREINIT1 + LD A,' ' ; EXTRA PAD + CALL LCD_OUTD +LCD_PREINIT1: + POP HL + CALL LCD_PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA + LD DE,LCD_STR_MHZ + CALL LCD_OUTDS +; + ; THIRD LINE + LD HL,$0200 ; ROW 2, COL 0 + CALL LCD_GOTORC + LD DE,LCD_STR_CFG + CALL LCD_OUTDS +; + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +; POST CONSOLE INITIALIZATION +; +LCD_INIT: + CALL NEWLINE ; FORMATTING + PRTS("LCD: IO=0x$") + LD A,LCDBASE + CALL PRTHEXBYTE +; + LD A,(LCD_PRESENT) ; GET PRESENCE FLAG + OR A ; SET FLAGS + JR Z,LCD_INIT1 ; HANDLE NOT PRESENT +; + CALL PC_SPACE + LD A,LCD_COLS + CALL PRTDEC8 + PRTS("X$") + LD A,LCD_ROWS + CALL PRTDEC8 + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +LCD_INIT1: + PRTS(" NOT PRESENT$") + OR $FF + RET +; +; DSKY DEVICE FUNCTION DISPATCH ENTRY +; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR +; B: FUNCTION (IN) +; +LCD_DISPATCH: + LD A,B ; GET REQUESTED FUNCTION + AND $0F ; ISOLATE SUB-FUNCTION + JP Z,LCD_NULL ; RESET DSKY HARDWARE + DEC A + JP Z,LCD_NULL ; GET KEYPAD STATUS + DEC A + JP Z,LCD_NULL ; READ A KEY FROM THE KEYPAD + DEC A + JP Z,LCD_NULL ; DISPLAY A 32-BIT BINARY VALUE IN HEX + DEC A + JP Z,LCD_SHOWSEG ; DISPLAY SEGMENTS + DEC A + JP Z,LCD_NULL ; SET KEYPAD LEDS + DEC A + JP Z,LCD_NULL ; SET STATUS LED + DEC A + JP Z,LCD_NULL ; BEEP DSKY SPEAKER + DEC A + JP Z,LCD_DEVICE ; DEVICE INFO + DEC A + JP Z,LCD_MESSAGE ; HANDLE MESSAGE + DEC A + JP Z,LCD_EVENT ; HANDLE EVENT + SYSCHKERR(ERR_NOFUNC) + RET +; +; +; +LCD_NULL: + XOR A + RET +; +; DRAW DISPLAY USING DEBUG ALPHABET +; HL = SOURCE BUFFER +; +LCD_SHOWSEG: + XOR A + RET +; +; DEVICE INFORMATION +; +LCD_DEVICE: + LD D,DSKYDEV_LCD ; D := DEVICE TYPE + LD E,0 ; E := PHYSICAL DEVICE NUMBER + LD H,0 ; H := MODE + LD L,LCDBASE ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET +; +; MESSAGE HANDLER +; +LCD_MESSAGE: + LD A,C ; GET MESSAGE ID + ADD A,A ; WORD OFFSET + LD HL,LCD_MSGTBL ; START OF MESSAGE TABLE + CALL ADDHLA ; ADD OFFSET + LD A,(HL) ; SAVE LSB + INC HL ; BUMP TO MSB + LD H,(HL) ; GET MSB + LD L,A ; GET LSB +; + EX DE,HL + LD HL,$0300 ; ROW 3, COL 0 + CALL LCD_GOTORC + CALL LCD_LINEOUT + XOR A ; SIGNAL SUCCESS + RET +; +; EVENT HANDLER +; +LCD_EVENT: + LD A,C ; EVENT ID + OR A ; 0=CPUSPD + JR Z,LCD_EVT_CPUSPD ; HANDLE CPU SPD CHANGE + DEC A ; 1=DSKACT + JR Z,LCD_EVT_DSKACT ; HANDLE DISK ACTIVITY + XOR A + RET +; +; CPU SPEED CHANGE +; +LCD_EVT_CPUSPD: + XOR A + RET +; +; FORMAT: "Disk #99 R:12345678" +; 01234567890123456789 +; +LCD_EVT_DSKACT: +; + LD HL,$0300 ; ROW 3, COL 0 + CALL LCD_GOTORC ; SET DISPLAY ADDRESS +; + LD DE,LCD_STR_IO ; PREFIX + CALL LCD_OUTDS ; SEND TO DISPLAY (COLS 0-5) +; + LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM + CALL LCD_EVT_DSKACT_BYTE ; SEND TO DISPLAY (COLS 6-7) HEX??? +; + LD A,' ' ; SEPARATOR + CALL LCD_OUTD ; SEND TO DISPLAY (COL 8) + CALL LCD_OUTD ; SEND TO DISPLAY (COL 9) +; + LD A,(HB_DSKFUNC) ; ACTIVE DISK FUNCTION + CP BF_DIOWRITE ; WRITE? + LD A,'W' ; ASSUME WRITE + JR Z,LCD_EVT_DSKACT0 ; GO AHEAD + LD A,'R' ; OTHERWISE READ +LCD_EVT_DSKACT0: + CALL LCD_OUTD ; SEND CHAR (COL 10) +; + LD A,':' ; SEPARATOR + CALL LCD_OUTD ; SEND TO DISPLAY (COL 11) +; + LD HL,HB_DSKADR+3 ; END OF DWORD (MSB) + LD B,4 ; DO 4 BYTES +; +LCD_EVT_DSKACT1: + LD A,(HL) ; GET BYTE + CALL LCD_EVT_DSKACT_BYTE ; SEND TO DISPLAY (COLS 12-19) + DEC HL ; DEC PTR + DJNZ LCD_EVT_DSKACT1 ; DO ALL 4 BYTES + RET +; +LCD_EVT_DSKACT_BYTE: + PUSH AF ; SAVE BYTE + RRCA ; DO TOP NIBBLE FIRST + RRCA + RRCA + RRCA + CALL HEXCONV ; CONVERT NIBBLE TO ASCII + CALL LCD_OUTD ; SEND TO DISPLAY + POP AF ; RECOVER CURRENT BYTE + CALL HEXCONV ; CONVERT NIBBLE TO ASCII + CALL LCD_OUTD ; SEND TO DISPLAY + RET ; DONE +; +; DETECT PRESENCE OF LCD CONTROLLER BY WRITING AND READING BACK +; TEST VALUES IN THE CONTROLLER RAM. +; WE DO NOT USE THE NORMAL READ/WRITE ROUTINES BECAUSE WE DO +; NOT WANT TO STALL WAITING ON THE BUSY FLAG IF THE CONTROLLER +; IS NOT PRESENT +; +LCD_DETECT: + ; FIRST PASS W/ TEST VALUE $AA + LD C,$AA + CALL LCD_DETECT_PASS + JR NZ,LCD_DETECT1 +; + ; SECOND PASS W/ TEST VALUE $55 + LD C,$55 + CALL LCD_DETECT_PASS + JR NZ,LCD_DETECT1 +; + ; LCD PRESENT + OR $FF + JR LCD_DETECT_Z +; +LCD_DETECT1: + ; LCD NOT PRESENT + XOR A + JR LCD_DETECT_Z +; +LCD_DETECT_Z: + LD (LCD_PRESENT),A + RET +; +; WRITE AND READBACK VALUE IN C TO THE FIRST BYTE OF DDRAM +; RETURN WITH COMPARE RESULT +; +LCD_DETECT_PASS: + CALL LCD_DELAY ; WAIT + LD A,LCD_FUNC_DDADR + EZ80_IO + OUT (LCD_FUNC),A ; POINT TO FIRST BYTE + CALL LCD_DELAY ; WAIT + LD A,C ; TEST VALUE + EZ80_IO + OUT (LCD_DATA),A ; WRITE IT + CALL LCD_DELAY ; WAIT + LD A,LCD_FUNC_DDADR + EZ80_IO + OUT (LCD_FUNC),A ; POINT TO FIRST BYTE + CALL LCD_DELAY + EZ80_IO + IN A,(LCD_DATA) ; GET VALUE + CP C ; AS WRITTEN? + RET +; +; DELAY USED DURING DETECT, >37US +; +LCD_DELAY: + CALL DELAY ; 16US + CALL DELAY ; 16US + JP DELAY ; 16US, TOTAL 48US +; +; SEND FUNCTION CODE IN A +; +LCD_OUTF: + PUSH AF ; SAVE CODE +LCD_OUTF1: + EZ80_IO + IN A,(LCD_STAT) ; GET STATUS + AND $80 ; ISOLATE BUSY FLAG + JR NZ,LCD_OUTF1 ; LOOP TILL NOT BUSY + POP AF ; RECOVER CODE + EZ80_IO + OUT (LCD_FUNC),A ; SEND IT + RET ; DONE +; +; SEND FUNCTION STRING +; DE=STRING ADDRESS, NULL TERMINATED +; +LCD_OUTFS: + LD A,(DE) ; NEXT BYTE TO SEND + OR A ; SET FLAGS + RET Z ; DONE WHEN NULL REACHED + INC DE ; BUMP POINTER + CALL LCD_OUTF ; SEND IT + JR LCD_OUTFS ; LOOP AS NEEDED +; +; SEND DATA BYTE IN A +; +LCD_OUTD: + PUSH AF ; SAVE BYTE +LCD_OUTD1: + EZ80_IO + IN A,(LCD_STAT) ; GET STATUS + AND $80 ; ISOLATE BUSY FLAG + JR NZ,LCD_OUTD1 ; LOOP TILL NOT BUSY + POP AF ; RECOVER BYTE + EZ80_IO + OUT (LCD_DATA),A ; SEND IT + RET ; DONE +; +; SEND STRING, BLANK PAD TO END OF LINE +; ASSUMES WRITING TO FIRST COLUMN +; +LCD_LINEOUT: + LD B,LCD_COLS + CALL LCD_OUTDS +LCD_LINEOUT1: + LD A,' ' + CALL LCD_OUTD + DJNZ LCD_LINEOUT1 + RET +; +; SEND DATA STRING +; DE=STRING ADDRESS, NULL TERMINATED +; +LCD_OUTDS: + LD A,(DE) ; NEXT BYTE TO SEND + OR A ; SET FLAGS + RET Z ; DONE WHEN NULL REACHED + INC DE ; BUMP POINTER + DEC B ; PADDING COUNTER FOR ABOVE + CALL LCD_OUTD ; SEND IT + JR LCD_OUTDS ; LOOP AS NEEDED +; +; GET DATA BYTE INTO A +; +LCD_IND: + EZ80_IO + IN A,(LCD_STAT) ; GET STATUS + AND $80 ; ISOLATE BUSY FLAG + JR NZ,LCD_IND ; LOOP TILL NOT BUSY + POP AF ; RECOVER BYTE + EZ80_IO + IN A,(LCD_DATA) ; GET IT + RET ; DONE +; +; GOTO ROW(H),COL(L) +; +LCD_GOTORC: + PUSH HL ; SAVE INCOMING + LD A,H ; ROW # TO A + LD HL,LCD_ROWSIDX ; POINT TO ROWS INDEX TABLE + CALL ADDHLA ; INDEX TO ROW ENTRY + LD A,(HL) ; GET RWO START + POP HL ; RECOVER INCOMING + ADD A,L ; ADD COLUMN + ADD A,LCD_FUNC_DDADR ; APPLY FUNCTION BIT + JR LCD_OUTF ; AND SEND IT +; +; PRINT VALUE OF HL AS THOUSANDTHS, IE. 0.000 +; +LCD_PRTD3M: + PUSH BC + PUSH DE + PUSH HL + LD E,'0' + LD BC,-10000 + CALL LCD_PRTD3M1 + LD E,0 + LD BC,-1000 + CALL LCD_PRTD3M1 + LD A,'.' + CALL LCD_OUTD + LD BC,-100 + CALL LCD_PRTD3M1 + LD C,-10 + CALL LCD_PRTD3M1 + LD C,-1 + CALL LCD_PRTD3M1 + POP HL + POP DE + POP BC + RET +LCD_PRTD3M1: + LD A,'0' - 1 +LCD_PRTD3M2: + INC A + ADD HL,BC + JR C,LCD_PRTD3M2 + SBC HL,BC + CP E + JR Z,LCD_PRTD3M3 + LD E,0 + CALL LCD_OUTD +LCD_PRTD3M3: + RET +; +; DATA STORAGE +; +LCD_PRESENT .DB 0 ; NON-ZERO WHEN HARDWARE DETECTED +; +LCD_ROWSIDX .DB $00,$40,$14,$54 ; ROW START INDEX +; +LCD_INIT_SEQ: + .DB LCD_FUNC_SET | %11000 ; FUNCTION SET, 2 LINES, 5X8 FONT + .DB LCD_FUNC_DISP ; DISPLAY OFF + .DB LCD_FUNC_CLEAR ; CLEAR DISPLAY, HOME CURSOR + .DB LCD_FUNC_ENTRY | $02 ; INCREMENT, NO SHIFT + .DB LCD_FUNC_DISP | $04 ; DISPLAY ON, NO CURSOR, NO BLINK + .DB $00 ; TERMINATOR +; +LCD_STR_BAN .DB "RomWBW v", BIOSVER, 0 +LCD_STR_CFG .DB "Build: ", CONFIG, 0 +LCD_STR_IO .DB "Disk #", 0 +LCD_STR_XPU .DB " CPU",0 +;;;LCD_STR_SPD .DB "12.345",0 +LCD_STR_MHZ .DB " MHz",0 +; +LCD_CPU .DW LCD_CPU_Z80 + .DW LCD_CPU_Z180 + .DW LCD_CPU_Z180K + .DW LCD_CPU_Z180N + .DW LCD_CPU_Z280 + .DW LCD_CPU_EZ80 +; +LCD_CPU_Z80 .DB "Z80",0 +LCD_CPU_Z180 .DB "Z180",0 +LCD_CPU_Z180K .DB "Z180-K",0 +LCD_CPU_Z180N .DB "Z180-N",0 +LCD_CPU_Z280 .DB "Z280",0 +LCD_CPU_EZ80 .DB "eZ80",0 +; +LCD_MSGTBL: + .DW LCD_MSG_LDR_SEL + .DW LCD_MSG_LDR_BOOT + .DW LCD_MSG_LDR_LOAD + .DW LCD_MSG_LDR_GO + .DW LCD_MSG_MON_RDY + .DW LCD_MSG_MON_BOOT +; +LCD_MSG_LDR_SEL .DB "Ready",0 +LCD_MSG_LDR_BOOT .DB "Boot...",0 +LCD_MSG_LDR_LOAD .DB "Load...",0 +LCD_MSG_LDR_GO .DB "Go...",0 +LCD_MSG_MON_RDY .DB "-CPU UP-",0 +LCD_MSG_MON_BOOT .DB "Boot!",0 diff --git a/Source/HBIOS/lpt.asm b/Source/HBIOS/lpt.asm index 917a5a38..0445b269 100644 --- a/Source/HBIOS/lpt.asm +++ b/Source/HBIOS/lpt.asm @@ -50,7 +50,7 @@ ; ; D7 D6 D5 D4 D3 D2 D1 D0 ; +-------+-------+-------+-------+-------+-------+-------+-------+ -; | | | | /ERR | SEL | POUT | BUSY | /ACK | +; | | | | /ERR | SEL | POUT | BUSY | /ACK | ; +-------+-------+-------+-------+-------+-------+-------+-------+ ; ; PORT 2 (OUTPUT): @@ -62,40 +62,60 @@ ; ;================================================================================================== ; -; PRE-CONSOLE INITIALIZATION - DETECT AND INIT HARDWARE +; S100 STYLE INTERFACE: +; - S100 FPGA Z80 ; -LPT_PREINIT: +; BASE I/O PORT (OUTPUT): ; -; SETUP THE DISPATCH TABLE ENTRIES -; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST -; REMAIN DISABLED. +; D7 D6 D5 D4 D3 D2 D1 D0 +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 | +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; +; STATUS PORT (INPUT, BASE I/O - 1): +; +; D7 D6 D5 D4 D3 D2 D1 D0 +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; | | | | | | | BUSY | /ACK | +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; +; CONTROL PORT (OUTPUT, BASE I/O - 1): +; +; D7 D6 D5 D4 D3 D2 D1 D0 +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; | | | | | | | | /STB | +; +-------+-------+-------+-------+-------+-------+-------+-------+ +; +;================================================================================================== ; +LPT_INIT: LD B,LPT_CFGCNT ; LOOP CONTROL XOR A ; ZERO TO ACCUM LD (LPT_DEV),A ; CURRENT DEVICE NUMBER LD IY,LPT_CFG ; POINT TO START OF CFG TABLE -LPT_PREINIT0: +LPT_INIT0: PUSH BC ; SAVE LOOP CONTROL CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE POP BC ; RESTORE LOOP CONTROL ; LD A,(IY+1) ; GET THE LPT TYPE DETECTED OR A ; SET FLAGS - JR Z,LPT_PREINIT2 ; SKIP IT IF NOTHING FOUND + JR Z,LPT_INIT2 ; SKIP IT IF NOTHING FOUND ; PUSH BC ; SAVE LOOP CONTROL PUSH IY ; CFG ENTRY ADDRESS POP DE ; ... TO DE LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE + CALL LPT_PRTCFG ; PRINT IF NOT ZERO POP BC ; RESTORE LOOP CONTROL ; -LPT_PREINIT2: +LPT_INIT2: LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY ADD IY,DE ; BUMP IY TO NEXT ENTRY - DJNZ LPT_PREINIT0 ; LOOP UNTIL DONE + DJNZ LPT_INIT0 ; LOOP UNTIL DONE ; -LPT_PREINIT3: +LPT_INIT3: XOR A ; SIGNAL SUCCESS RET ; AND RETURN ; @@ -119,24 +139,6 @@ LPT_INITUNIT: ; THE INITDEV ENTRY POINT THAT DOES NOT ENABLE/DISABLE INTS! JP LPT_INITDEVX ; IMPLEMENT IT AND RETURN ; -; -; -LPT_INIT: - LD B,LPT_CFGCNT ; COUNT OF POSSIBLE LPT UNITS - LD IY,LPT_CFG ; POINT TO START OF CFG TABLE -LPT_INIT1: - PUSH BC ; SAVE LOOP CONTROL - LD A,(IY+1) ; GET LPT TYPE - OR A ; SET FLAGS - CALL NZ,LPT_PRTCFG ; PRINT IF NOT ZERO - POP BC ; RESTORE LOOP CONTROL - LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY - ADD IY,DE ; BUMP IY TO NEXT ENTRY - DJNZ LPT_INIT1 ; LOOP TILL DONE -; - XOR A ; SIGNAL SUCCESS - RET ; DONE -; ; DRIVER FUNCTION TABLE ; LPT_FNTBL: @@ -166,6 +168,7 @@ LPT_OUT: CALL LPT_OST ; READY TO SEND? JR Z,LPT_OUT ; LOOP IF NOT LD C,(IY+3) ; PORT 0 (DATA) + EZ80_IO OUT (C),E ; OUTPUT DATA TO PORT #IF (LPTMODE == LPTMODE_SPP) LD A,%00001101 ; SELECT & STROBE, LEDS OFF @@ -173,8 +176,17 @@ LPT_OUT: #IF (LPTMODE == LPTMODE_MG014) LD A,%00000100 ; SELECT & STROBE, LED OFF #ENDIF +#IF (LPTMODE == LPTMODE_S100) + LD A,%00000000 ; STROBE +#ENDIF +#IF ((LPTMODE == LPTMODE_SPP) | (LPTMODE == LPTMODE_MG014)) INC C ; PUT CONTROL PORT IN C INC C +#ENDIF +#IF (LPTMODE == LPTMODE_S100) + DEC C ; PUT CONTROL PORT IN C +#ENDIF + EZ80_IO OUT (C),A ; OUTPUT DATA TO PORT CALL DELAY #IF (LPTMODE == LPTMODE_SPP) @@ -183,6 +195,10 @@ LPT_OUT: #IF (LPTMODE == LPTMODE_MG014) LD A,%00000101 ; SELECT, LED OFF #ENDIF +#IF (LPTMODE == LPTMODE_S100) + LD A,%11111111 ; STROBE +#ENDIF + EZ80_IO OUT (C),A ; OUTPUT DATA TO PORT CALL DELAY XOR A ; SIGNAL SUCCESS @@ -199,7 +215,13 @@ LPT_IST: ; LPT_OST: LD C,(IY+3) ; BASE PORT +#IF ((LPTMODE == LPTMODE_SPP) | (LPTMODE == LPTMODE_MG014)) INC C ; SELECT STATUS PORT +#ENDIF +#IF (LPTMODE == LPTMODE_S100) + DEC C ; SELECT STATUS PORT +#ENDIF + EZ80_IO IN A,(C) ; GET STATUS INFO #IF (LPTMODE == LPTMODE_SPP) AND %10000000 ; ISOLATE /BUSY @@ -227,13 +249,16 @@ LPT_INITDEVX: ; LD C,(IY+3) ; PORT 0 (DATA) XOR A ; CLEAR ACCUM + EZ80_IO OUT (C),A ; SEND IT INC C ; BUMP TO INC C ; ... PORT 2 LD A,%00001000 ; SELECT AND ASSERT RESET, LEDS OFF + EZ80_IO OUT (C),A ; SEND IT CALL LDELAY ; HALF SECOND DELAY LD A,%00001100 ; SELECT AND DEASSERT RESET, LEDS OFF + EZ80_IO OUT (C),A ; SEND IT XOR A ; SIGNAL SUCCESS RET ; RETURN @@ -245,17 +270,29 @@ LPT_INITDEVX: ADD A,3 ; BUMP TO CONTROL PORT LD C,A ; MOVE TO C FOR I/O LD A,$82 ; CONFIG A OUT, B IN, C OUT + EZ80_IO OUT (C),A ; DO IT DEC C ; OUTPUT PORT LD A,$81 ; STROBE OFF, SELECT ON, RES ON, LED ON + EZ80_IO OUT (C),A ; SEND IT CALL LDELAY ; HALF SECOND DELAY LD A,$05 ; STROBE OFF, SELECT ON, RES OFF, LED OFF + EZ80_IO OUT (C),A ; SEND IT XOR A ; SIGNAL SUCCESS RET ; RETURN #ENDIF ; +#IF (LPTMODE == LPTMODE_S100) + LD C,(IY+3) ; BASE PORT + DEC C ; DEC TO CONTROL PORT + LD A,$FF ; INIT VALUE + EZ80_IO + OUT (C),A ; DO IT + RET ; RETURN +#ENDIF +; ; ; LPT_QUERY: @@ -304,6 +341,7 @@ LPT_DETECT2: INC C ; PORT C FOR I/O INC C ; ... XOR A ; DEFAULT VALUE (TRI-STATE OFF) + EZ80_IO OUT (C),A ; SEND IT ; ;IN A,(C) ; READ IT @@ -319,7 +357,9 @@ LPT_DETECT2: DEC C ; BACK TO BASE PORT DEC C ; ... LD A,$A5 ; TEST VALUE + EZ80_IO OUT (C),A ; SEND IT + EZ80_IO IN A,(C) ; READ IT BACK CP $A5 ; CORRECT? RET ; RETURN (ZF SET CORRECTLY) @@ -340,11 +380,14 @@ LPT_DETECT: ADD A,3 ; BUMP TO CONTROL PORT LD C,A ; PUT IN C LD A,$80 ; SET PORT A TO WRITE + EZ80_IO OUT (C),A ; WRITE IT ; LD C,(IY+3) ; PPI PORT A LD A,$A5 ; TEST VALUE + EZ80_IO OUT (C),A ; PUSH VALUE TO PORT + EZ80_IO IN A,(C) ; GET PORT VALUE #IF (LPTTRACE >= 3) CALL PC_SPACE @@ -361,6 +404,13 @@ LPT_DETECT1: RET ; DONE #ENDIF ; +#IF (LPTMODE == LPTMODE_S100) +LPT_DETECT: + ; PORT ALWAYS EXISTS ON FPGA + LD A,LPTMODE_S100 ; RETURN CHIP TYPE + RET ; DONE +#ENDIF +; ; ; LPT_PRTCFG: @@ -400,10 +450,12 @@ LPT_TYPE_MAP: .DW LPT_STR_NONE .DW LPT_STR_SPP .DW LPT_STR_MG014 + .DW LPT_STR_S100 ; LPT_STR_NONE .DB "$" LPT_STR_SPP .DB "SPP$" LPT_STR_MG014 .DB "MG014$" +LPT_STR_S100 .DB "S100$" ; ; WORKING VARIABLES ; @@ -427,6 +479,9 @@ LPT0_CFG: #ENDIF #IF (LPTMODE == LPTMODE_MG014) DEVECHO "MG014" + #ENDIF + #IF (LPTMODE == LPTMODE_S100) + DEVECHO "S100" #ENDIF DEVECHO ", IO=" DEVECHO LPT0BASE @@ -450,6 +505,9 @@ LPT1_CFG: #ENDIF #IF (LPTMODE == LPTMODE_MG014) DEVECHO "MG014" + #ENDIF + #IF (LPTMODE == LPTMODE_S100) + DEVECHO "S100" #ENDIF DEVECHO ", IO=" DEVECHO LPT1BASE diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 0d8b3378..e7e7fcea 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -64,6 +64,8 @@ MD_DEVCNT .EQU ($ - MD_CFGTBL) / MD_CFGSIZ ; ; ; + + MD_INIT: #IF (MDFFENABLE) CALL MD_FINIT ; PROBE FLASH CAPABILITY @@ -301,13 +303,13 @@ MD_RW: MD_RW1: PUSH BC ; SAVE COUNTERS ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,MD_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; LD HL,(MD_RWFNADR) ; GET PENDING IO FUNCTION ADDRESS #IF (MDFFENABLE) diff --git a/Source/HBIOS/mky.asm b/Source/HBIOS/mky.asm index 34650e82..3d32c00e 100644 --- a/Source/HBIOS/mky.asm +++ b/Source/HBIOS/mky.asm @@ -211,9 +211,19 @@ MKY_INIT: ; C - OUTPUT (ROW LINE SELECTION) LD A, PPICMD_COMMAND | PPICMD_GA_MODE_0 | PPICMD_GB_MODE_0 | PPICMD_A_IN | PPICMD_B_IN | PPICMD_CLOW_OUT | PPICMD_CHIGH_OUT + EZ80_IO OUT (MKY_REGCMD), A LD A, 64 ; CAPS OFF + EZ80_IO OUT (MKY_REGC), A + + ; INSTALL INTERRUPT HANDLER + LD HL, (VEC_TICK+1) + LD (VEC_TICK_MKY+1), HL + + LD HL, MKY_INT + LD (VEC_TICK+1), HL + RET ; ;__________________________________________________________________________________________________ @@ -368,8 +378,10 @@ MKY_SETLEDS: ; TURN THE CAPS LED LIGHT ON ; MKY_LEDCAPSON: + EZ80_IO IN A, (MKY_REGC) RES 6, A + EZ80_IO OUT (MKY_REGC), A RET ; @@ -378,8 +390,10 @@ MKY_LEDCAPSON: ; TURN THE CAPS LED LIGHT OFF ; MKY_LEDCAPSOFF: + EZ80_IO IN A, (MKY_REGC) SET 6, A + EZ80_IO OUT (MKY_REGC), A RET @@ -733,13 +747,14 @@ MKY_INTSCAN1: LD A, (MKY_SCNCNT) ; SCAN THE KEYBOARD EVERY 'SCAN_INT_PERIOD' INTERRUPTS. DEC A LD (MKY_SCNCNT), A - RET NZ + JR NZ, VEC_TICK_MKY LD A, SCAN_INT_PERIOD LD (MKY_SCNCNT), A ; SCAN KEYBOARD AND STORE ALL COLUMN RESULTS PER ROW AT MKY_NEWKEY ; + EZ80_IO IN A, (MKY_REGC) ; READ AND MASK THE CURRENT STATE OF PPI PORT C AND $F0 LD D, A @@ -747,7 +762,9 @@ MKY_INTSCAN1: LD HL, MKY_NEWKEY LD C, MKY_REGC MKY_SCAN_LP: + EZ80_IO OUT (C), D ; SET ACTIVE ROW + EZ80_IO IN A, (MKY_REGB) ; READ ACTIVE COLUMN DATA LD (HL), A ; STORE COLUMN READ VALUE INC HL @@ -756,7 +773,9 @@ MKY_SCAN_LP: LD A, $FF ; NOTE THAT A SCAN HAS BEEN DONE LD (MKY_SCANNED), A - RET + +VEC_TICK_MKY: + JP HB_TICK ; ;__________________________________________________________________________________________________ diff --git a/Source/HBIOS/nabu.asm b/Source/HBIOS/nabu.asm index bb4db4f4..f9f3f8bd 100644 --- a/Source/HBIOS/nabu.asm +++ b/Source/HBIOS/nabu.asm @@ -1,15 +1,12 @@ ; ;================================================================================================== -; NABU INTERRUPT INTERCEPTOR +; NABU HARDWARE DRIVER ;================================================================================================== ; -NABU_INT1CLR .EQU $68 -NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B -; ; NABU INTERRUPT ENABLE PORT AND STATUS PORTS ARE MANAGED BY THE ; PSG IO PORTS. ; -; INTERRUPT ENABLE (OUTPUT) - PSG PORT A +; NABU CONTROL PORT - INTERRUPT ENABLE (OUTPUT) - PSG PORT A ; ; D7 - HCCA Receive ; D6 - HCCA Send @@ -20,7 +17,13 @@ NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B ; D1 - Option Card 2 (J11) ; DO - Option Card 3 (J12) ; -; STATUS BYTE (INPUT) - PSG PORT B +; THE CONTROL PORT IS WRITE ONLY AND THE BITS NEED TO BE MANAGED IN +; MULTIPLE DRIVERS. BELOW, WE ALLOCATE NBAU_CTLVAL AS A SHADOW +; REGISTER FOR THE CONTROL PORT. IT IS INITIALIZED TO ZERO HERE +; (ALL INTS DISABLED). THE INDIVIDUAL BITS ARE SET AS APPROPIATE IN +; THE DRIVERS THAT WANT THE INTERRUPTS ENABLED (NABUKB, TMS). +; +; NABU STATUS PORT - STATUS BYTE (INPUT) - PSG PORT B ; ; D7 - N.C. ; D6 - Overrun Error (HCCA UART) @@ -33,91 +36,54 @@ NABU_TICCNT .EQU $FFEA ; TICCNT AT $FFEA IS COPIED DOWN TO $000B ; ; PORTS TO MANAGE PSG ; -NABU_RSEL .EQU $41 ; SELECT PSG REGISTER -NABU_RDAT .EQU $40 ; WRITE TO SELECTED REGISTER -NABU_RIN .EQU $40 ; READ FROM SELECTED REGISTER +NABU_BASE .EQU $40 ; BASE PORT FOR NABU PSG +NABU_RSEL .EQU NABU_BASE + 1 ; SELECT PSG REGISTER +NABU_RDAT .EQU NABU_BASE + 0 ; WRITE TO SELECTED REGISTER +NABU_RIN .EQU NABU_BASE + 0 ; READ FROM SELECTED REGISTER ; DEVECHO "NABU: IO=" - DEVECHO NABU_INT1CLR + DEVECHO NABU_BASE DEVECHO "\n" ; -; ; HARDWARE RESET PRIOR TO ROMWBW CONSOLE INITIALIZATION ; NABU_PREINIT: - ; INITIALIZE THE NABU PSG I/O PORTS - ; PORT A IN WRITE MODE AND SET ALL BITS TO ZERO - ; PORT B IN READ MODE -; - CALL NABU_SETPSG ; -;#IF (INTMODE == 1) -; ; ADD TO INTERRUPT CHAIN -; LD HL,NABU_STAT -; CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST -;#ENDIF + ; RESET SHADOW REGISTER IN CASE WE ARE DOING AN HBIOS + ; RESTART IN PLACE + XOR A ; ALL INTERRUPTS DISABLED + LD (NABU_CTLVAL),A ; SAVE IT ; -;#IF (INTMODE == 2) -; LD HL,NABU_STAT -; LD (IVT(INT_NABUKB)),HL ; IVT INDEX -;#ENDIF -; RET -; -NABU_INIT: - CALL NEWLINE ; FORMATTING - PRTS("NABU: INT1$") -; XOR A -; OUT (NABU_INT1CLR),A - RET ; DONE + ; INITIALIZE THE NABU PSG I/O PORTS + ; PORT A (CONTROL PORT) IN WRITE MODE + ; PORT B (STATUS PORT) IN READ MODE + ; INITIALIZE THE CONTROL REGISTER ; -NABU_SETPSG: ; SET I/O PORT MODES LD A,7 ; PSG R7 (ENABLE REG) OUT (NABU_RSEL),A ; SELECT IT - LD A,%01111111 ; PORT B INPUT, PORT A OUPUT + LD A,%01111111 ; PORT B INPUT, PORT A OUPUT, AUDIO CHANNELS DISABLED OUT (NABU_RDAT),A ; SET IT ; - ; SET PORT A TO VALUE 0 + ; INITIALIZE PORT A VALUE LD A,14 ; PSG R14 (PORT A DATA) OUT (NABU_RSEL),A ; SELECT IT -#IF (INTMODE > 0) - #IF (TMSTIMENABLE == TRUE) - LD A,%00110000 ; ENABLE NABU KB & VDP INTS - #ELSE - LD A,%00100000 ; ENABLE NABU KB INTS - #ENDIF -#ELSE - XOR A -#ENDIF - OUT (NABU_RDAT),A ; SET IT + LD A,(NABU_CTLVAL) ; GET CTL VALUE SHADOW REG + OUT (NABU_RDAT),A ; WRITE TO HARDWARE +; + XOR A ; SIGNAL SUCCESS + RET ; DONE +; +; POST CONSOLE INITIALIZATION +; +NABU_INIT: + CALL NEWLINE ; FORMATTING + PRTS("NABU: IO=$") + LD A,NABU_BASE + CALL PRTHEXBYTE + XOR A ; SIGNAL SUCCESS + RET ; DONE ; - LD A,15 - OUT (NABU_RSEL),A - IN A,(NABU_RIN) - RET -; -; INTERRUPT ENTRY POINT -; -NABU_STAT: -; CALL NABU_SETPSG -; XOR A -; OUT (NABU_INT1CLR),A ; CLEAR THE INTERRUPT - LD HL,(NABU_TICCNT) ; INCREMENT NABU TICK COUNTER - - - INC HL ; ... IN HBIOS PROXY - LD (NABU_TICCNT),HL -; LD A,(NABU_HBTICK) ; INCREMENT INTERNAL TICK CTR -; INC A -; LD (NABU_HBTICK),A -; CP $0A ; CALL HB_TICK EVERY 10 INTERRUPTS (50HZ) -; RET NZ ; NOT TIME THEN JUST RETURN - CALL HB_TICK ; DO NORMAL HBIOS TICK - XOR A -; LD (NABU_HBTICK),A ; RESET HBTICK COUNTER - INC A ; INTERRUPT HANDLED - RET -; -NABU_HBTICK: - .DB 0 ; INTERNAL TICK CTR +; DATA STORAGE ; +NABU_CTLVAL .DB 0 ; SHADOW VAL FOR NABU CONTROL REGISTER diff --git a/Source/HBIOS/nabukb.asm b/Source/HBIOS/nabukb.asm index 5d949032..2a5d79a9 100644 --- a/Source/HBIOS/nabukb.asm +++ b/Source/HBIOS/nabukb.asm @@ -21,52 +21,16 @@ ; WILL TRANSLATE SPECIAL KEYS ($E0-$FF) TO ROMWBW EQUIVALENTS. ALL ; OTHER KEYS WILL BE PASSED THROUGH AS IS. ; -; KBPORT EQU $90 -; -; POLL FOR INPUT -; KBLOOP: -; IN A,(KBPORT+1) -; BIT 1,A -; JR Z,KBLOOP -; IN A,(KBPORT) -; -; INIT: -; XOR A -; CALL SUB12 -; CALL SUB12 -; CALL SUB12 -; CALL SUB12 -; CALL SUB12 -; LD A,40H -; CALL SUB12 -; LD A,4EH -; CALL SUB12 -; LD A,04H -; CALL SUB12 -; NABUKB_IODAT .EQU $90 ; KEYBOARD DATA (READ) NABUKB_IOSTAT .EQU $91 ; STATUS (READ), CMD (WRITE) +; +; +NABUKB_BUFSZ .EQU 16 ; RECEIVE RING BUFFER SIZE ; DEVECHO "NABUKB: IO=" DEVECHO NABUKB_IODAT DEVECHO "\n" ; -; SETUP INTERRUPT HANDLING, IF ENABLED -; -NABUKB_PREINIT: -#IF (INTMODE == 1) - ; ADD TO INTERRUPT CHAIN - LD HL,NABUKB_INT - CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST -#ENDIF -; -#IF (INTMODE == 2) - ; INSTALL VECTOR - LD HL,NABUKB_INT - LD (IVT(INT_NABUKB)),HL ; IVT INDEX -#ENDIF - RET -; ; INITIALZIZE THE KEYBOARD CONTROLLER. ; NABUKB_INIT: @@ -87,6 +51,28 @@ NABUKB_INIT: CALL NABUKB_PUT LD A,$04 ; ENABLE RECV CALL NABUKB_PUT +; +#IF (INTMODE == 1) + ; ADD TO INTERRUPT CHAIN + LD HL,NABUKB_INT + CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST +#ENDIF +; +#IF (INTMODE == 2) + ; INSTALL VECTOR + LD HL,NABUKB_INT + LD (IVT(INT_NABUKB)),HL ; IVT INDEX +#ENDIF +; +#IF (INTMODE > 0) + ; ENABLE KEYBOARD INTERRUPTS ON NABU INTERRUPT CONTROLLER + LD A,14 ; PSG R14 (PORT A DATA) + OUT (NABU_RSEL),A ; SELECT IT + LD A,(NABU_CTLVAL) ; GET NABU CTL PORT SHADOW REG + SET 5,A ; ENABLE VDP INTERRUPTS + LD (NABU_CTLVAL),A ; UPDATE SHADOW REG + OUT (NABU_RDAT),A ; WRITE TO HARDWARE +#ENDIF ; XOR A RET @@ -105,96 +91,149 @@ NABUKB_INT: ; ;CALL PC_LT ; *DEBUG* IN A,(NABUKB_IODAT) ; GET THE KEY - LD E,A ; STASH IN REG E + ;CALL PRTHEXBYTE ; *DEBUG* + ;CALL PC_COMMA ; *DEBUG* + CALL NABUKB_XB ; TRANSLATE THE KEY ;CALL PRTHEXBYTE ; *DEBUG* ;CALL PC_GT ; *DEBUG* -; - LD A,(NABUKB_KSTAT) ; GET KEY BUFFER STAT - OR A ; SET FLAGS - RET NZ ; BUFFER FULL, BAIL OUT W/ NZ (INT HANDLED), KEY DISCARDED -; - LD A,E ; RECOVER THE KEY CODE - CALL NABUKB_XB ; TRANSLATE AND BUFFER KEY - OR $FF ; SIGNAL INT HANDLED - RET ; DONE + JR C,NABUKB_INTRCV4 ; ABORT IF UNUSABLE KEY + LD B,A ; SAVE BYTE READ + LD HL,NABUKB_RCVBUF ; SET HL TO START OF BUF STRUCT + LD A,(HL) ; GET COUNT + CP NABUKB_BUFSZ ; COMPARE TO BUFFER SIZE + JR Z,NABUKB_INTRCV4 ; BAIL OUT IF BUFFER FULL, RCV BYTE DISCARDED + INC A ; INCREMENT THE COUNT + LD (HL),A ; AND SAVE IT + INC HL ; HL NOW HAS ADR OF HEAD PTR + PUSH HL ; SAVE ADR OF HEAD PTR + LD A,(HL) ; DEREFERENCE HL + INC HL + LD H,(HL) + LD L,A ; HL IS NOW ACTUAL HEAD PTR + LD (HL),B ; SAVE CHARACTER RECEIVED IN BUFFER AT HEAD + INC HL ; BUMP HEAD POINTER + POP DE ; RECOVER ADR OF HEAD PTR + LD A,L ; GET LOW BYTE OF HEAD PTR + SUB NABUKB_BUFSZ+4 ; SUBTRACT SIZE OF BUFFER AND POINTER + CP E ; IF EQUAL TO START, HEAD PTR IS PAST BUF END + JR NZ,NABUKB_INTRCV3 ; IF NOT, BYPASS + LD H,D ; SET HL TO + LD L,E ; ... HEAD PTR ADR + INC HL ; BUMP PAST HEAD PTR + INC HL + INC HL + INC HL ; ... SO HL NOW HAS ADR OF ACTUAL BUFFER START +NABUKB_INTRCV3: + EX DE,HL ; DE := HEAD PTR VAL, HL := ADR OF HEAD PTR + LD (HL),E ; SAVE UPDATED HEAD PTR + INC HL + LD (HL),D +NABUKB_INTRCV4: + OR $FF ; NZ SET TO INDICATE INT HANDLED + RET ; AND RETURN ; #ENDIF ; ; NORMAL HBIOS CHAR INPUT STATUS. IF INTERRUPTS ARE NOT ACTIVE, THEN ; KEYBOARD POLLING IS IMPLEMENTED HERE. ; +#IF (INTMODE == 0) NABUKB_STAT: LD A,(NABUKB_KSTAT) ; GET KEY WAITING STATUS OR A ; SET FLAGS -#IF (INTMODE > 0) - JR Z,NABUKB_STATX ; BAIL OUT W/ Z (NO KEY) - RET ; KEY WAITING, ALL SET -#ELSE RET NZ ; KEY WAITING, ALL SET IN A,(NABUKB_IOSTAT) ; GET KBD STATUS AND $02 ; CHECK DATA RDY BIT JR Z,NABUKB_STATX ; BAIL OUT W/ Z (NO KEY) IN A,(NABUKB_IODAT) ; GET THE KEY - CALL NABUKB_XB ; TRANSLATE AND BUFFER KEY - LD A,(NABUKB_KSTAT) ; GET NEW KEY WAITING STATUS + CALL NABUKB_XB ; TRANSLATE/FILTER + JR C,NABUKB_STATX ; IF CF SET, IGNORE + LD (NABUKB_KEY),A ; BUFFER IT + LD A,1 ; SIGNAL KEY WAITING + LD (NABUKB_KSTAT),A ; SAVE IT OR A ; SET FLAGS RET ; DONE -#ENDIF ; NABUKB_STATX: XOR A ; SIGNAL NO CHAR READY JP CIO_IDLE ; RETURN VIA IDLE PROCESSOR ; -; ROUTINE TO TRANSLATE AND BUFFER INCOMING NABU KEYBOARD KEYCODES +#ELSE +NABUKB_STAT: + LD A,(NABUKB_BUFCNT) ; GET BUFFER UTILIZATION COUNT + OR A ; SET FLAGS + JP Z,CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING + RET ; DONE +#ENDIF +; +; ROUTINE TO FILTER AND TRANSLATE INCOMING NABU KEYBOARD KEYCODES +; ENTER WITH RAW KEY CODE IN A +; RESULT IN A, CF SET IF THE KEY SHOULD BE DISCARDED ; NABUKB_XB: + ; $00 - $7F ARE NORMAL ASCII CHARS (PASS THROUGH) BIT 7,A ; HIGH BIT IS SPECIAL CHAR - JR Z,NABUKB_XB2 ; IF NORMAL CHAR, BUFFER IT - CP $90 ; START OF ERR CODES - JR C,NABUKB_XB1 ; NOT ERR CODE, CONTINUE + JR Z,NABUKB_XB2 ; IF NORMAL CHAR, RETURN W/ CF CLEAR + ; $80-$8F ARE JOSYSTICK PREFIXES (PASS THESE THROUGH) + CP $90 ; END OF JOYSTICK PREFIXES + JR C,NABUKB_XB2 ; IF JOY PRE, RETURN W/ CF CLEAR + ; $90-$9F ARE KEYBOARD ERROR CODES (IGNORE THESE) CP $A0 ; END OF ERR CODES - JR NC,NABUKB_XB1 ; NOT ERR CODE, CONTINUE - RET ; DISCARD ERR CODE AND RETURN -NABUKB_XB1: - CP $E0 ; SPECIAL CHARACTER? - JR C,NABUKB_XB2 ; IF NOT, SKIP XLAT, BUFFER KEY - CALL NABUKB_XLAT ; IF SO, TRANSLATE IT - RET C ; CF INDICATES INVALID, DISCARD AND RETURN -NABUKB_XB2: - LD (NABUKB_KEY),A ; BUFFER IT - LD A,1 ; SIGNAL KEY WAITING - LD (NABUKB_KSTAT),A ; SAVE IT - RET ; DONE -; -; ROUTINE TO TRANSLATE SPECIAL NABU KEYBOARD KEY CODES -; -NABUKB_XLAT: + JR C,NABUKB_XB1 ; IF ERR CODE, RETURN W/ CF SET + ; $A0-$BF ARE JOYSTICK DATA (PASS THESE THROUGH) + CP $C0 ; END OF JOYSTICK DATA + JR C,NABUKB_XB2 ; IF JOY DATA, RETURN W/ CF CLEAR + ; $C0-$DF ARE UNUSED CODES (IGNORE THESE) + CP $E0 ; END OF UNUSED CODES + JR C,NABUKB_XB1 ; IF UNUSED CODE, RETURN W/ CF SET ; NABU KEYBOARD USES $E0-$FF FOR SPECIAL KEYS ; HERE WE TRANSLATE TO ROMWBW SPECIAL KEYS AS BEST WE CAN - ; CF IS SET ON RETURN IF KEY IS INVALID (NO TRANSLATION) SUB $E0 ; ZERO OFFSET - RET C ; ABORT IF < $E0, CF SET! LD HL,NABUKB_XTBL ; POINT TO XLAT TABLE CALL ADDHLA ; OFFSET BY SPECIAL KEY VAL LD A,(HL) ; GET TRANSLATED VALUE OR A ; CHECK FOR N/A (0) RET NZ ; XLAT OK, RET W/ CF CLEAR - SCF ; SIGNAL INVALID +NABUKB_XB1: + ; RETURN W/ CF SET (DISCARD RESULT) + SCF ; ELSE SIGNAL INVALID RET ; DONE -; -NABUKB_XLAT1: - SCF ; SIGNAL INVALID - RET ; AND DONE +NABUKB_XB2: + ; RETURN W/ CF CLEAR (KEEP RESULT) + OR A ; CLEAR CF + RET ; RETURN, CF CLEAR ; ; FLUSH KEYBOARD BUFFER ; NABUKB_FLUSH: +#IF (INTMODE == 0) XOR A LD (NABUKB_KSTAT),A +#ELSE + ; RESET THE RECEIVE BUFFER + LD DE,NABUKB_RCVBUF ; DE := CNT + XOR A ; A := 0 + LD (DE),A ; _CNT = 0 + INC DE ; DE := ADR OF _HD + PUSH DE ; SAVE IT + INC DE + INC DE + INC DE + INC DE ; DE := ADR OF _BUF + POP HL ; HL := ADR OF _HD + LD (HL),E + INC HL + LD (HL),D ; _HD := _BUF + INC HL + LD (HL),E + INC HL + LD (HL),D ; _TL := _BUF +#ENDIF RET ; ; WAIT FOR A KEY TO BE READY AND RETURN IT. ; +#IF (INTMODE == 0) NABUKB_READ: CALL NABUKB_STAT ; CHECK FOR KEY READY JR Z,NABUKB_READ ; LOOP TIL ONE IS READY @@ -205,6 +244,46 @@ NABUKB_READ: LD D,A ; NO KEYSTATE LD (NABUKB_KSTAT),A ; CLEAR KEY WAITING STATUS RET ; AND RETURN +#ELSE +; +NABUKB_READ: + CALL NABUKB_STAT ; SEE IF CHAR AVAILABLE + JR Z,NABUKB_READ ; LOOP UNTIL SO + HB_DI ; AVOID COLLISION WITH INT HANDLER + LD HL,NABUKB_RCVBUF ; SET HL TO START OF BUF STRUCT + LD A,(HL) ; GET COUNT + DEC A ; DECREMENT COUNT + LD (HL),A ; SAVE UPDATED COUNT + INC HL ; HL := ADR OF TAIL PTR + INC HL ; " + INC HL ; " + PUSH HL ; SAVE ADR OF TAIL PTR + LD A,(HL) ; DEREFERENCE HL + INC HL + LD H,(HL) + LD L,A ; HL IS NOW ACTUAL TAIL PTR + LD C,(HL) ; C := CHAR TO BE RETURNED + INC HL ; BUMP TAIL PTR + POP DE ; RECOVER ADR OF TAIL PTR + LD A,L ; GET LOW BYTE OF TAIL PTR + SUB NABUKB_BUFSZ+2 ; SUBTRACT SIZE OF BUFFER AND POINTER + CP E ; IF EQUAL TO START, TAIL PTR IS PAST BUF END + JR NZ,NABUKB_READ2 ; IF NOT, BYPASS + LD H,D ; SET HL TO + LD L,E ; ... TAIL PTR ADR + INC HL ; BUMP PAST TAIL PTR + INC HL ; ... SO HL NOW HAS ADR OF ACTUAL BUFFER START +NABUKB_READ2: + EX DE,HL ; DE := TAIL PTR VAL, HL := ADR OF TAIL PTR + LD (HL),E ; SAVE UPDATED TAIL PTR + INC HL ; " + LD (HL),D ; " + LD E,C ; MOVE CHAR TO RETURN TO E + HB_EI ; INTERRUPTS OK AGAIN + XOR A ; SIGNAL SUCCESS + RET ; AND DONE +; +#ENDIF ; ; HELPER ROUTINE TO WRITE ; @@ -219,8 +298,20 @@ NABUKB_PUT: ; ; ; -NABUKB_KSTAT .DB 0 ; KEY STATUS -NABUKB_KEY .DB 0 ; KEY BUFFER +#IF (INTMODE == 0) +NABUKB_KSTAT .DB 0 ; KEY STATUS +NABUKB_KEY .DB 0 ; KEY BUFFER +#ELSE +; +; RECEIVE BUFFER +; +NABUKB_RCVBUF: +NABUKB_BUFCNT .DB 0 ; CHARACTERS IN RING BUFFER +NABUKB_HD .DW NABUKB_BUF ; BUFFER HEAD POINTER +NABUKB_TL .DW NABUKB_BUF ; BUFFER TAIL POINTER +NABUKB_BUF .FILL NABUKB_BUFSZ,0 ; RECEIVE RING BUFFER +NABUKB_BUFEND .EQU $ ; END OF BUFFER +#ENDIF ; ; THIS TABLE TRANSLATES THE NABU KEYBOARD SPECIAL CHARS INTO ; ANALOGOUS ROMWBW STANDARD SPECIAL CHARACTERS. THE TABLE STARTS WITH diff --git a/Source/HBIOS/pkd.asm b/Source/HBIOS/pkd.asm index 5da7dda4..b89d794c 100644 --- a/Source/HBIOS/pkd.asm +++ b/Source/HBIOS/pkd.asm @@ -21,12 +21,13 @@ ; |+-------- SHIFT ; +--------- CONTROL ; -; 00 08 10 18 23 -; 01 09 11 19 22 -; 02 0A 12 1A 21 -; 03 0B 13 1B 20 -; 04 0C 14 1C SHIFT -; 05 0D 15 1D CTRL +; _____C0_________C1_________C2_________C3__________C4____ +; R0 | $00 [D] $08 [E] $10 [F] $18 [BO] $20 [F4] +; R1 | $01 [A] $09 [B] $11 [C] $19 [GO] $21 [F3] +; R2 | $02 [7] $0A [8] $12 [9] $1A [EX] $22 [F2] +; R3 | $03 [4] $0B [5] $13 [6] $1B [DE] $23 [F1] +; R5 | $04 [1] $0C [2] $14 [3] $1C [EN] +$40 [SH] +; R6 | $05 [FW] $0D [0] $15 [BK] $1D [CL] +$80 [CTL] ; ; LED BIT MAP (BIT VALUES) ; @@ -34,18 +35,21 @@ ; --- --- --- --- --- --- --- --- ; 01 01 01 01 01 ; 02 02 02 02 02 -; 04 04 04 04 04 -; 08 08 08 08 08 -; 10 10 10 10 10 -; 20 20 20 20 20 L1 L2 BUZZ +; 04 04 04 04 04 +; 08 08 08 08 08 +; 10 10 10 10 10 +; 20 20 20 20 20 L1 L2 BUZZ ; PKD_PPIA .EQU PKDPPIBASE + 0 ; PORT A PKD_PPIB .EQU PKDPPIBASE + 1 ; PORT B PKD_PPIC .EQU PKDPPIBASE + 2 ; PORT C PKD_PPIX .EQU PKDPPIBASE + 3 ; PPI CONTROL PORT ; -PKD_PPIX_RD: .EQU %10010010 ; PPIX VALUE FOR READS -PKD_PPIX_WR: .EQU %10000010 ; PPIX VALUE FOR WRITES +PKD_PPIX_RD .EQU %10010010 ; PPIX VALUE FOR READS +PKD_PPIX_WR .EQU %10000010 ; PPIX VALUE FOR WRITES +; +PKD_ROWS .EQU 1 ; DISPLAY ROWS +PKD_COLS .EQU 8 ; DISPLAY COLUMNS ; ; PIO CHANNEL C: ; @@ -68,20 +72,25 @@ PKD_PRESCL .EQU PKDOSC/100000 ; PRESCALER ; DEVECHO "PKD: IO=" DEVECHO PKDPPIBASE + DEVECHO ", SIZE=" + DEVECHO PKD_COLS + DEVECHO "X" + DEVECHO PKD_ROWS DEVECHO "\n" ; -;__PKD_PREINIT_______________________________________________________________________________________ +;__PKD_PREINIT_____________________________________________________________________________________ ; ; CONFIGURE PARALLEL PORT AND INITIALIZE 8279 -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; ; ; HARDWARE RESET 8279 BY PULSING RESET LINE ; PKD_PREINIT: - LD A,(DSKY_DISPACT) ; DSKY DISPATCHER ALREADY SET? - OR A ; SET FLAGS - RET NZ ; IF ALREADY ACTIVE, ABORT +; + ; RESET PRESENCE FLAG + XOR A ; ASSUME NOT PRESENT + LD (PKD_PRESENT),A ; SAVE IT ; ; CHECK FOR PPI CALL PKD_PPIDETECT ; TEST FOR PPI HARDWARE @@ -117,6 +126,8 @@ PKD_PREINIT: ; REGISTER DRIVER WITH HBIOS LD BC,PKD_DISPATCH CALL DSKY_SETDISP +; + CALL PKD_SHOWVER ; RET ; @@ -127,10 +138,35 @@ PKD_REINIT: CALL PKD_CMD JP PKD_RESET ; -;__PKD_INIT__________________________________________________________________________________________ +PKD_SHOWVER: + LD HL,PKD_VERSTR + LD DE,PKD_BUF + LD BC,PKD_COLS + LDIR + LD HL,PKD_BUF + 5 + LD A,RMJ + LD A,(PKD_SEGMAP + RMJ) + OR $80 + LD (HL),A + INC HL + LD A,(PKD_SEGMAP + RMN) + OR $80 + LD (HL),A + INC HL + LD A,(PKD_SEGMAP + RUP) + LD (HL),A +; + ; DISPLAY VERSION ON PKD + LD C,0 + LD B,8 + LD HL,PKD_BUF + CALL PKD_PUTSTR + RET +; +;__PKD_INIT________________________________________________________________________________________ ; ; DISPLAY DSKY INFO -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; PKD_INIT: CALL NEWLINE ; FORMATTING @@ -142,9 +178,19 @@ PKD_INIT: ; LD A,(PKD_PRESENT) ; PRESENT? OR A ; SET FLAGS - RET NZ ; YES, ALL DONE + JR NZ,PKD_INIT1 ; YES, CONTINUE PRTS(" NOT PRESENT$") ; NOT PRESENT - RET ; DONE + RET +; +PKD_INIT1: + CALL PC_SPACE + LD A,PKD_COLS + CALL PRTDEC8 + LD A,'X' + CALL COUT + LD A,PKD_ROWS + CALL PRTDEC8 + RET ; ; DSKY DEVICE FUNCTION DISPATCH ENTRY ; A: RESULT (OUT), 0=OK, Z=OK, NZ=ERR @@ -170,6 +216,10 @@ PKD_DISPATCH: JP Z,PKD_BEEP ; BEEP DSKY SPEAKER DEC A JP Z,PKD_DEVICE ; DEVICE INFO + DEC A + JP Z,PKD_MESSAGE ; HANDLE MESSAGE + DEC A + JP Z,PKD_EVENT ; HANDLE EVENT SYSCHKERR(ERR_NOFUNC) RET ; @@ -198,9 +248,6 @@ PKD_RESET2: ; CHECK FOR KEY PRESS, SAVE RAW VALUE, RETURN STATUS ; PKD_STAT: - LD A,(PKD_PRESENT) ; DOES IT EXIST? - OR A ; SET FLAGS - RET Z ; ABORT WITH A=0 IF NOT THERE CALL PKD_ST AND $0F ; ISOLATE THE CUR FIFO LEN RET @@ -208,9 +255,6 @@ PKD_STAT: ; WAIT FOR A DSKY KEYPRESS AND RETURN ; PKD_GETKEY: - LD A,(PKD_PRESENT) ; DOES IT EXIST? - OR A ; SET FLAGS - JR Z,PKD_GETKEY1A ; ABORT IF NOT PRESENT CALL PKD_STAT JR Z,PKD_GETKEY ; LOOP IF NOTHING THERE LD A,PKD_CMD_FIFO @@ -229,7 +273,6 @@ PKD_GETKEY1: INC C ; BUMP INDEX DJNZ PKD_GETKEY1 ; LOOP UNTIL EOT POP AF ; FIX STACK -PKD_GETKEY1A: LD A,$FF ; NOT FOUND ERR, RETURN $FF RET PKD_GETKEY2: @@ -245,19 +288,47 @@ PKD_GETKEY2: ; DISPLAY HEX VALUE FROM DE:HL ; PKD_SHOWHEX: - LD BC,DSKY_HEXBUF ; POINT TO HEX BUFFER + LD BC,PKD_TMP32 ; POINT TO HEX BUFFER CALL ST32 ; STORE 32-BIT BINARY THERE - LD HL,DSKY_HEXBUF ; FROM: BINARY VALUE (HL) - LD DE,DSKY_BUF ; TO: SEGMENT BUFFER (DE) - CALL DSKY_BIN2SEG ; CONVERT - LD HL,DSKY_BUF ; POINT TO SEGMENT BUFFER - ; AND FALL THRU TO DISPLAY IT -; + LD HL,PKD_TMP32 ; FROM: BINARY VALUE (HL) + LD DE,PKD_BUF ; TO: SEGMENT BUFFER (DE) + CALL PKD_BIN2SEG ; CONVERT + LD HL,PKD_BUF ; POINT TO SEGMENT BUFFER + LD B,PKD_COLS ; LENGTH TO DISPLAY + LD C,0 ; STARTING POSITION + CALL PKD_PUTSTR ; DO IT + XOR A ; SUCCESS + RET ; AND RETURN ; +; DRAW DISPLAY USING DEBUG ALPHABET +; HL = SOURCE BUFFER ; PKD_SHOWSEG: + ; CONVERT FROM DBG ALPHABET TO SEG CODES + LD B,PKD_COLS ; DO FOR ALL CHARS + LD DE,PKD_BUF ; DESTINATION BUFFER +PKD_SHOWSEG1: + LD A,(HL) ; GET SOURCE VALUE + INC HL ; BUMP FOR NEXT TIME + PUSH AF ; SAVE IT + AND $80 ; ISOLATE HI BIT (DP) + LD C,A ; SAVE IN C + POP AF ; RECOVER ORIGINAL + AND $7F ; REMOVE HI BIT (DP) + PUSH HL ; SAVE IT + LD HL,PKD_SEGMAP ; POINT TO XLAT MAP + CALL ADDHLA ; OFFSET BY VALUE + LD A,(HL) ; GET NEW VALUE + OR C ; RECOMBINE WITH DP BIT + LD (DE),A ; SAVE IT + INC DE ; BUMP PTR + POP HL ; RESTORE SOURCE PTR + DJNZ PKD_SHOWSEG1 ; LOOP TILL DONE +; + ; DISPLAY CONVERTED BUFFER LD C,0 ; STARTING DISPLAY POSITION - LD B,DSKY_BUFLEN ; NUMBER OF CHARS + LD B,PKD_COLS ; NUMBER OF CHARS + LD HL,PKD_BUF ; BUFFER CALL PKD_PUTSTR ; DO IT XOR A ; SIGNAL SUCCESS RET @@ -309,7 +380,7 @@ PKD_BEEP: ; ; TIMER PUSH HL - LD hl,$8FFF + LD HL,$8FFF PKD_BEEP1: DEC HL LD A,H @@ -335,10 +406,80 @@ PKD_DEVICE: XOR A ; SIGNAL SUCCESS RET ; -;__PKD_PPIDETECT_____________________________________________________________________________________ +; MESSAGE HANDLER +; +PKD_MESSAGE: + LD A,C ; GET MESSAGE ID + ADD A,A ; WORD OFFSET + LD HL,PKD_MSGTBL ; START OF MESSAGE TABLE + CALL ADDHLA ; ADD OFFSET + LD A,(HL) ; SAVE LSB + INC HL ; BUMP TO MSB + LD H,(HL) ; GET MSB + LD L,A ; GET LSB +; + ; HL HAS POINTER TO MESSAGE + LD C,0 ; STARTING DISPLAY POSITION + LD B,PKD_COLS ; NUMBER OF CHARS + CALL PKD_PUTSTR ; DISPLAY IT + XOR A ; SIGNAL SUCCESS + RET +; +; EVENT HANDLER +; +PKD_EVENT: + LD A,C ; EVENT ID + OR A ; 0=CPUSPD + JR Z,PKD_EVT_CPUSPD ; HANDLE CPU SPD CHANGE + DEC A ; 1=DSKACT + JR Z,PKD_EVT_DSKACT ; HANDLE DISK ACTIVITY + XOR A + RET +; +; CPU SPEED CHANGE +; +PKD_EVT_CPUSPD: + XOR A + RET +; +; DISK ACTIVITY +; +PKD_EVT_DSKACT: +; + ; USE DISK UNIT NUMBER FOR MSB + LD A,(HB_DSKUNIT) ; GET DISK UNIT NUM + LD (HB_DSKADR+3),A ; REPLACE HIGH BYTE W/ DISK # +; + ; CONVERT TO SEGMENT DISPLAY + LD HL,HB_DSKADR ; INPUT POINTER + LD DE,PKD_BUF ; BUF FOR OUTPUT + CALL PKD_BIN2SEG ; CONVERT TO SEG DISPLAY +; + ; DECIMAL POINT FOR DISK UNIT SEPARATION + LD HL,PKD_BUF+1 ; SECOND CHAR OF DISP + SET 7,(HL) ; TURN ON DECIMAL PT +; + ; DECIMAL POINT TO INDICATE WRITE ACTION + LD A,(HB_DSKFUNC) ; GET CURRENT I/O FUNCTION + CP BF_DIOWRITE ; IS IT A WRITE? + JR NZ,PKD_EVT_DSKACT2 ; IF NOT, SKIP + LD HL,PKD_BUF+7 ; POINT TO CHAR 7 + SET 7,(HL) ; SET WRITE DOT +; +PKD_EVT_DSKACT2: + ; UPDATE DISPLAY + LD HL,PKD_BUF ; SEG DISPLAY BUF TO HL + LD B,PKD_COLS + LD C,0 + CALL PKD_PUTSTR +; + XOR A + RET +; +;__PKD_PPIDETECT___________________________________________________________________________________ ; ; PROBE FOR PPI HARDWARE -;____________________________________________________________________________________________________ +;__________________________________________________________________________________________________ ; PKD_PPIDETECT: ; @@ -357,7 +498,7 @@ PKD_PPIDETECT: OR A ; SET FLAGS RET ; AND RETURN ; -;_KEYMAP_TABLE_____________________________________________________________________________________________________________ +;__KEYMAP_TABLE____________________________________________________________________________________ ; PKD_KEYMAP: ; POS $00 $01 $02 $03 $04 $05 $06 $07 @@ -667,10 +808,74 @@ PKD_PPIIDLE: ; UTILTITY FUNCTIONS ;================================================================================================== ; +; CONVERT 32 BIT BINARY TO 8 BYTE HEX SEGMENT DISPLAY +; +; HL: ADR OF 32 BIT BINARY +; DE: ADR OF DEST LED SEGMENT DISPLAY BUFFER (8 BYTES) +; +PKD_BIN2SEG: + LD B,4 ; 4 BYTES OF INPUT + LD A,B ; PUT IN ACCUM + CALL ADDHLA ; PROCESS FROM END (LITTLE ENDIAN) +PKD_BIN2SEG1: + DEC HL ; DEC PTR (LITTLE ENDIAN) + LD A,(HL) ; HIGH NIBBLE + RRCA \ RRCA \ RRCA \ RRCA ; ROTATE BITS + CALL PKD_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF + LD A,(HL) ; LOW NIBBLE + CALL PKD_BIN2SEG_NIB ; CONVERT NIBBLE INTO OUTPUT BUF + DJNZ PKD_BIN2SEG1 ; LOOP FOR ALL INPUT BYTES + RET ; DONE +; +PKD_BIN2SEG_NIB: + PUSH HL ; SAVE HL + LD HL,PKD_SEGMAP ; POINT TO SEG MAP TABLE + AND $0F ; ISOLATE LOW NIBBLE + CALL ADDHLA ; OFFSET INTO TABLE + LD A,(HL) ; LOAD VALUE FROM TABLE + POP HL ; RESTORE HL + LD (DE),A ; SAVE VALUE TO OUTPUT BUF + INC DE ; BUMP TO NEXT OUTPUT BYTE + RET ; DONE ; ;================================================================================================== ; STORAGE ;================================================================================================== ; -PKD_PPIX_VAL .DB 0 ; PPIX SHADOW REG -PKD_PRESENT .DB 0 ; HARDWARE PRESENT FLAG +PKD_PPIX_VAL .DB 0 ; PPIX SHADOW REG +PKD_PRESENT .DB 0 ; HARDWARE PRESENT FLAG +PKD_BUF .FILL PKD_COLS +PKD_TMP32 .FILL 4,0 ; TEMP DWORD +; +PKD_VERSTR .DB $76,$7F,$30,$3F,$6D,$00,$00,$00 ; "HBIOS " +; +PKD_SEGMAP: +; + ; POS $00 $01 $02 $03 $04 $05 $06 $07 + ; GLYPH '0' '1' '2' '3' '4' '5' '6' '7' + + .DB $3F, $06, $5B, $4F, $66, $6D, $7D, $07 +; + ; POS $08 $09 $0A $0B $0C $0D $0E $0F + ; GLYPH '8' '9' 'A' 'B' 'C' 'D' 'E' 'F' + .DB $7F, $67, $77, $7C, $39, $5E, $79, $71 +; + ; POS $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $1A + ; GLYPH ' ' '-' '.' 'P' 'o' 'r' 't' 'A' 'd' 'r' 'G' + .DB $00, $40, $00, $73, $5C, $50, $78, $77, $5E, $50, $3D + +; +PKD_MSGTBL: + .DW PKD_MSG_LDR_SEL + .DW PKD_MSG_LDR_BOOT + .DW PKD_MSG_LDR_LOAD + .DW PKD_MSG_LDR_GO + .DW PKD_MSG_MON_RDY + .DW PKD_MSG_MON_BOOT +; +PKD_MSG_LDR_SEL .DB $7F,$5C,$5C,$78,$53,$00,$00,$00 ; "Boot? " +PKD_MSG_LDR_BOOT .DB $7F,$5C,$5C,$78,$80,$80,$80,$00 ; "Boot... " +PKD_MSG_LDR_LOAD .DB $38,$5C,$5F,$5E,$80,$80,$80,$00 ; "Load... " +PKD_MSG_LDR_GO .DB $3D,$5C,$80,$80,$80,$00,$00,$00 ; "Go... " +PKD_MSG_MON_RDY .DB $40,$39,$73,$3E,$00,$3E,$73,$40 ; "-CPU UP-" +PKD_MSG_MON_BOOT .DB $7F,$5C,$5C,$78,$82,$00,$00,$00 ; "Boot! " diff --git a/Source/HBIOS/ppa.asm b/Source/HBIOS/ppa.asm index 0b6da099..ec8505f6 100644 --- a/Source/HBIOS/ppa.asm +++ b/Source/HBIOS/ppa.asm @@ -243,6 +243,7 @@ PPA_DETECT: ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT LD C,A ; MOVE TO C FOR I/O LD A,$82 ; CONFIG A OUT, B IN, C OUT + EZ80_IO OUT (C),A ; DO IT CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE #ENDIF @@ -339,13 +340,13 @@ PPA_IO: ; LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,PPA_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; SETUP LBA ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN @@ -476,6 +477,7 @@ PPA_GEOM: ; PPA_WRITEDATA: LD C,(IY+PPA_IOBASE) ; DATA PORT IS AT IOBASE + EZ80_IO OUT (C),A ; WRITE THE BYTE ;CALL DELAY ; IS THIS NEEDED??? RET ; DONE @@ -493,6 +495,7 @@ PPA_WRITECTRL: LD C,(IY+PPA_IOBASE) ; GET BASE IO ADDRESS INC C ; BUMP TO CONTROL PORT INC C + EZ80_IO OUT (C),A ; WRITE TO CONTROL PORT ;CALL DELAY ; IS THIS NEEDED? RET ; DONE @@ -511,6 +514,7 @@ PPA_WRITECTRL: PPA_READSTATUS: LD C,(IY+PPA_IOBASE) ; IOBASE TO C INC C ; BUMP TO STATUS PORT + EZ80_IO IN A,(C) ; READ IT ; #IF (PPAMODE == PPAMODE_MG014 @@ -855,9 +859,11 @@ PPA_GETBLOCK: ; PPA_GETBLOCK1: EXX ; ALT REGS + EZ80_IO OUT (C),D ; SEND FIRST CLOCK -PPA_GETBLOCK_A .EQU $+1 + EZ80_IO IN A,($FF) ; GET HIGH NIBBLE +PPA_GETBLOCK_A .EQU $-1 #IF (PPAMODE == PPAMODE_MG014) AND $0F ; RELEVANT BITS ONLY ADD A,MG014_STATMAPHI & $FF ; HIGH BYTE OF MAP PTR @@ -869,9 +875,11 @@ PPA_GETBLOCK_A .EQU $+1 AND $F0 ; RELEVANT BITS ONLY LD L,A ; SAVE NIBBLE IN L #ENDIF + EZ80_IO OUT (C),E ; SEND SECOND CLOCK -PPA_GETBLOCK_B .EQU $+1 + EZ80_IO IN A,($FF) ; GET LOW NIBBLE +PPA_GETBLOCK_B .EQU $-1 #IF (PPAMODE == PPAMODE_MG014) AND $0F ; RELEVANT BITS ONLY ADD A,MG014_STATMAPLO & $FF ; LOW BYTE OF MAP PTR @@ -964,9 +972,12 @@ PPA_PUTBLOCK: PPA_PUTBLOCK1: LD A,(DE) ; GET NEXT BYTE PPA_PUTBLOCK_A .EQU $+1 + EZ80_IO OUT ($FF),A ; PUT ON BUS INC DE ; INCREMENT BUF POS + EZ80_IO OUT (C),H ; FIRST CLOCK + EZ80_IO OUT (C),L ; SECOND CLOCK DJNZ PPA_PUTBLOCK1 ; LOOP RET ; DONE @@ -1147,6 +1158,7 @@ PPA_INITDEV: ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT LD C,A ; MOVE TO C FOR I/O LD A,$82 ; CONFIG A OUT, B IN, C OUT + EZ80_IO OUT (C),A ; DO IT CALL DELAY ; SHORT DELAY FOR BUS SETTLE #ENDIF diff --git a/Source/HBIOS/ppide.asm b/Source/HBIOS/ppide.asm index de956828..d44d4f58 100644 --- a/Source/HBIOS/ppide.asm +++ b/Source/HBIOS/ppide.asm @@ -351,7 +351,8 @@ PPIDE_DEV2S: ; DEVICE 2, SLAVE ; BASED ON REAL WORLD EXPERIENCE. ; PPIDE_TOSLOW .EQU 200 ; SLOW TIMEOUT IS 20 SECS -PPIDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.5 SECS +;PPIDE_TONORM .EQU 5 ; NORMAL TIMEOUT IS 0.5 SECS +PPIDE_TONORM .EQU 200 ; NORMAL TIMEOUT IS 0.5 SECS ; ;============================================================================= ; INITIALIZATION ENTRY POINT @@ -487,11 +488,14 @@ PPIDE_DETECT: ; LD A,PPIDE_DIR_WRITE ; SET DATA BUS DIRECTION TO WRITE LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT ; LD C,(IY+PPIDE_DATALO) ; PPI PORT A, DATALO LD A,$A5 ; TEST VALUE + EZ80_IO OUT (C),A ; PUSH VALUE TO PORT + EZ80_IO IN A,(C) ; GET PORT VALUE #IF (PPIDETRACE >= 3) CALL PC_SPACE @@ -829,13 +833,13 @@ PPIDE_PKT_RDSEC: #ENDIF ; SETUP LBA ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,PPIDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) @@ -898,13 +902,13 @@ PPIDE_PKT_WRSEC: #ENDIF ; SETUP LBA ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,PPIDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN LD HL,PPIDE_PKTCMD_RW10+3 ; START OF LBA FIELD IN CDB (MSB) @@ -930,13 +934,13 @@ PPIDE_PKT_WRSEC: ; PPIDE_SETADDR: ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,PPIDE_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; SEND 3 LOWEST BYTES OF LBA IN REVERSE ORDER ; IDE_REG_LBA3 HAS ALREADY BEEN SET ; HSTLBA2-0 --> IDE_REG_LBA2-0 @@ -1131,12 +1135,14 @@ PPIDE_GET: LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT ; ; SELECT READ/WRITE IDE REGISTER LD A,PPIDE_REG_DATA ; DATA REGISTER ;OUT (PPIDE_REG_CTL),A ; DO IT LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS + EZ80_IO OUT (C),A ; DO IT LD E,A ; E := READ UNASSERTED XOR PPIDE_CTL_DIOR ; SWAP THE READ LINE BIT @@ -1159,19 +1165,25 @@ PPIDE_GET2: ; PPIDE_GET8: ; 8 BIT WIDE READ LOOP ; ENTER W/ C = PPIDE_REG_CTL + EZ80_IO OUT (C),D ; ASSERT READ DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO INI ; READ FROM LSB INC C ; LSB -> MSB INC C ; MSB -> CTL + EZ80_IO OUT (C),E ; DEASSERT READ + EZ80_IO OUT (C),D ; ASSERT READ DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO INI ; READ FROM LSB INC C ; LSB -> MSB INC C ; MSB -> CTL + EZ80_IO OUT (C),E ; DEASSERT READ DEC A JR NZ,PPIDE_GET8 ; LOOP UNTIL DONE @@ -1179,13 +1191,17 @@ PPIDE_GET8: ; 8 BIT WIDE READ LOOP ; PPIDE_GET16: ; 16 BIT WIDE READ LOOP ; ENTER W/ C = PPIDE_REG_CTL + EZ80_IO OUT (C),D ; ASSERT READ DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO INI ; READ FROM LSB INC C ; LSB -> MSB + EZ80_IO INI ; READ MSB FOR 16 BIT INC C ; MSB -> CTL + EZ80_IO OUT (C),E ; DEASSERT READ DEC A JR NZ,PPIDE_GET16 ; LOOP UNTIL DONE @@ -1217,12 +1233,14 @@ PPIDE_PUT: LD A,PPIDE_DIR_WRITE ; SET DATA BUS DIRECTION TO WRITE ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT ; ; SELECT READ/WRITE IDE REGISTER LD A,PPIDE_REG_DATA ; DATA REGISTER ;OUT (PPIDE_REG_CTL),A ; DO IT LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS + EZ80_IO OUT (C),A ; DO IT LD E,A ; E := WRITE UNASSERTED XOR PPIDE_CTL_DIOW ; SWAP THE READ LINE BIT @@ -1247,17 +1265,23 @@ PPIDE_PUT2: PPIDE_PUT8: ; 8 BIT WIDE WRITE LOOP DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO OUTI ; WRITE NEXT BYTE (LSB) INC C ; LSB -> MSB INC C ; MSB -> CTL + EZ80_IO OUT (C),D ; ASSERT WRITE + EZ80_IO OUT (C),E ; DEASSERT WRITE DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO OUTI ; WRITE NEXT BYTE (LSB) INC C ; LSB -> MSB INC C ; MSB -> CTL + EZ80_IO OUT (C),D ; ASSERT WRITE + EZ80_IO OUT (C),E ; DEASSERT WRITE DEC A JR NZ,PPIDE_PUT8 ; LOOP UNTIL DONE @@ -1266,11 +1290,15 @@ PPIDE_PUT8: ; 8 BIT WIDE WRITE LOOP PPIDE_PUT16: ; 16 BIT WIDE WRITE LOOP DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO OUTI ; WRITE NEXT BYTE (LSB) INC C ; LSB -> MSB + EZ80_IO OUTI ; WRITE NEXT BYTE (MSB) INC C ; MSB -> CTL + EZ80_IO OUT (C),D ; ASSERT WRITE + EZ80_IO OUT (C),E ; DEASSERT WRITE DEC A JR NZ,PPIDE_PUT16 ; LOOP UNTIL DONE @@ -1320,6 +1348,7 @@ PPIDE_RESET: LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT ; ; IF A DSKYNG IS ACTIVE AND IS ON THE SAME PPI PORT AS THE PPIDE BEING @@ -1328,18 +1357,19 @@ PPIDE_RESET: ; THERE IS NO CHECK FOR THE SPECIFIC PPI PORT SINCE IT DOES NO HARM ; IF THE DSKYNG IS SAVED AND RESTORED. ; -; THIS DOES NOT TEST THAT A DSKYNG IS ACTUALLY PRESENT -; AND OPERATING -- COULD CAUSE PROBLEMS -; -#IF (DSKYENABLE) - #IF (PKDENABLE) +;;;#IF (DSKYENABLE) +#IF (PKDENABLE) ; SAVE CONTENTS OF DSKYNG DISPLAY ACROSS RESET - LD B,8 - LD C,0 - LD HL,DSKY_BUF - CALL PKD_GETSTR - #ENDIF + LD A,(PKD_PRESENT) ; GET PKD PRESENCE FLAG + OR A ; TEST FOR ZERO + JR Z,PPIDE_RESET_PKD1 ; IF ZERO, NOT THERE, BYPASS + LD B,8 ; LENGTH + LD C,0 ; START + LD HL,PKD_BUF ; BUFFER + CALL PKD_GETSTR ; GET CURRENT DISPLAY TO BUF +PPIDE_RESET_PKD1: #ENDIF +;;;#ENDIF ; ; PULSE IDE RESET LINE #IF (PPIDETRACE >= 3) @@ -1348,25 +1378,31 @@ PPIDE_RESET: LD A,PPIDE_CTL_RESET ;OUT (PPIDE_REG_CTL),A LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS + EZ80_IO OUT (C),A LD DE,20 ; DELAY 320US (SPEC IS >= 25US) CALL VDELAY XOR A ;OUT (PPIDE_REG_CTL),A + EZ80_IO OUT (C),A LD DE,20 CALL VDELAY ; -#IF (DSKYENABLE) - #IF (PKDENABLE) +;;;#IF (DSKYENABLE) +#IF (PKDENABLE) ; REININT DSKYNG AND RESTORE CONTENTS - CALL PKD_REINIT - LD B,8 - LD C,0 - LD HL,DSKY_BUF - CALL PKD_PUTSTR - #ENDIF -#ENDIF + LD A,(PKD_PRESENT) ; GET PKD PRESENCE FLAG + OR A ; TEST FOR ZERO + JR Z,PPIDE_RESET_PKD2 ; IF ZERO, NOT THERE, BYPASS + CALL PKD_REINIT ; REINIT PKD + LD B,8 ; LENGTH + LD C,0 ; START + LD HL,PKD_BUF ; BUFFER + CALL PKD_PUTSTR ; RESTORE DISPLAY CONTENTS +PPIDE_RESET_PKD2: +#ENDIF +;;;#ENDIF ; ; SOME CF CARDS AND CF CARD EMULATORS NEED A LITTLE TIME TO ; "BOOT" THEIR INTERNAL ELECTRONICS, SO THEY CANNOT ASSERT BUSY @@ -1506,6 +1542,13 @@ PPIDE_PROBE: ; WAIT FOR THE DEVICE TO BE READY. THIS WAIT IS MANDATORY BECAUSE ; SOME (IF NOT ALL) DEVICES WILL NOT PERSIST REGISTER VALUES UNTIL ; THE DRIVE IS READY. +; + ; FIRST, WRITE A $7F VALUE TO THE PPIDE STATUS REGISTER. IF + ; AN IDE DEVICE EXISTS, THIS WILL DO NO HARM. IF NOT, THIS + ; WILL HELP AVOID A FALSE POSITIVE (STALL). + LD A,$7F + CALL PPIDE_OUT + .DB PPIDE_REG_DATA ; CALL PPIDE_IN .DB PPIDE_REG_STAT @@ -1889,24 +1932,29 @@ PPIDE_IN: LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ; 7TS ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD ; 19TS + EZ80_IO OUT (C),A ; WRITE IT ; 12TS ; LD B,(HL) ; GET CTL PORT VALUE ; 7TS ;LD C,PPIDE_REG_CTL ; SETUP PORT TO WRITE ;LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS DEC C ; SET IDE ADDRESS ; 4TS + EZ80_IO OUT (C),B ; SET ADDRESS LINES ; 12TS SET 6,B ; TURN ON READ BIT ; 8TS + EZ80_IO OUT (C),B ; ASSERT READ LINE ; 12TS ; ;IN A,(PPIDE_REG_DATALO) ; GET DATA VALUE FROM DEVICE DEC C ; 4TS DEC C ; 4TS + EZ80_IO IN A,(C) ; GET DATA VALUE FROM DEVICE ; 12 INC C ; 4TS INC C ; 4TS ; RES 6,B ; CLEAR READ BIT ; 8TS + EZ80_IO OUT (C),B ; DEASSERT READ LINE ; 12TS POP BC ; RECOVER INCOMING BC ; 10TS INC HL ; POINT PAST PARM ; 6TS @@ -1923,6 +1971,7 @@ PPIDE_OUT: LD A,PPIDE_DIR_WRITE ; SET DATA BUS DIRECTION TO WRITE ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT POP AF ; RECOVER VALUE TO WRITE ; @@ -1930,18 +1979,22 @@ PPIDE_OUT: ;LD C,PPIDE_REG_CTL ; SETUP PORT TO WRITE ;LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS DEC C ; SET IDE ADDRESS + EZ80_IO OUT (C),B ; SET ADDRESS LINES SET 5,B ; TURN ON WRITE BIT + EZ80_IO OUT (C),B ; ASSERT WRITE LINE ; DEC C DEC C ;OUT (PPIDE_REG_DATALO),A ; SEND DATA VALUE TO DEVICE + EZ80_IO OUT (C),A ; SEND DATA VALUE TO DEVICE INC C INC C ; RES 5,B ; CLEAR WRITE BIT + EZ80_IO OUT (C),B ; DEASSERT WRITE LINE POP BC ; RECOVER INCOMING BC INC HL ; POINT PAST PARM @@ -2084,6 +2137,7 @@ PPIDE_REGDUMP: LD A,PPIDE_DIR_READ ; SET DATA BUS DIRECTION TO READ ;OUT (PPIDE_REG_PPI),A ; DO IT LD C,(IY+PPIDE_PPI) ; PPI CONTROL WORD + EZ80_IO OUT (C),A ; WRITE IT LD C,(IY+PPIDE_CTL) ; SET IDE ADDRESS LD E,PPIDE_REG_CMD @@ -2091,19 +2145,23 @@ PPIDE_REGDUMP: PPIDE_REGDUMP1: LD A,E ; REGISTER ADDRESS ;OUT (PPIDE_REG_CTL),A ; SET IT + EZ80_IO OUT (C),A ; REGISTER ADDRESS XOR PPIDE_CTL_DIOR ; SET BIT TO ASSERT READ LINE ;OUT (PPIDE_REG_CTL),A ; ASSERT READ + EZ80_IO OUT (C),A ; ASSERT READ ;IN A,(PPIDE_REG_DATALO) ; GET VALUE DEC C ; CTL -> MSB DEC C ; MSB -> LSB + EZ80_IO IN A,(C) ; GET VALUE INC C ; LSB -> MSB INC C ; MSB -> CTL CALL PRTHEXBYTE ; DISPLAY IT ;LD A,C ; RELOAD ADDRESS W/ READ UNASSERTED ;OUT (PPIDE_REG_CTL),A ; AND SET IT + EZ80_IO OUT (C),E ; RELOAD ADDRESS W/ READ UNASSERTED ;DEC C ; NEXT LOWER REGISTER DEC E ; NEXT LOWER REGISTER diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 9b1c1301..a4afb9e5 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -276,7 +276,8 @@ PPPCON_INIT: LD E,CIODEV_PPPCON ; DEVICE TYPE LD BC,PPPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A RET @@ -948,11 +949,11 @@ PPPSD_SENDBLK: LD A,PPPSD_LBA ; OFFSET OF LBA CALL LDHLIYA ; HL := IY + A, REG A TRASHED -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF LD B,4 PPPSD_SENDBLK1: LD A,(HL) diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index 6cc98ff2..f00557ed 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -150,7 +150,8 @@ PRPCON_INIT: LD E,CIODEV_PRPCON ; DEVICE TYPE LD BC,PRPCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A ; SIGNAL SUCCESS RET @@ -882,11 +883,11 @@ PRPSD_SETBLK: LD B,4 ; 4 BYTES LD A,PRPSD_LBA ; OFFSET OF LBA CALL LDHLIYA ; HL := IY + A, REG A TRASHED -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF OTIR RET ; diff --git a/Source/HBIOS/rf.asm b/Source/HBIOS/rf.asm index cd804074..6d80fc81 100644 --- a/Source/HBIOS/rf.asm +++ b/Source/HBIOS/rf.asm @@ -333,13 +333,13 @@ RF_SETIO: ; RF_SETADR: ; -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) LD A,RF_LBA CALL LDHLIYA CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF ; LD A,(RF_IO) ; OUTPUT THE LOGICAL BLOCK OR RF_AL ; ADDRESS TO THE diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 4d4395d8..8d256b70 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -31,7 +31,7 @@ ; avoid the problem where the code is overlaid during the loading of ; the desired executable image. ; -#INCLUDE "std.asm" ; standard RomWBW constants +#include "std.asm" ; standard RomWBW constants ; #ifndef BOOT_DEFAULT #define BOOT_DEFAULT "H" @@ -47,7 +47,6 @@ cmdbuf .equ $80 ; cmd buf is in second half of page zero cmdmax .equ 60 ; max cmd len (arbitrary), must be < bufsiz bufsiz .equ $80 ; size of cmd buf ; -;;int_im1 .equ $FF00 ; IM1 vector target for RomWBW HBIOS proxy hbx_int .equ $FF60 ; IM1 vector target for RomWBW HBIOS proxy ; bid_cur .equ -1 ; used below to indicate current bank @@ -132,16 +131,22 @@ start: di #endif ; -; Switch to user RAM bank +; Switch to user RAM bank and establish boot mode ; #if (BIOS == BIOS_WBW) + ; Get the boot mode + ld b,BF_SYSPEEK ; HBIOS func: PEEK + ld d,BID_BIOS ; BIOS bank + ld hl,HCB_LOC + HCB_BOOTMODE ; boot mode byte + rst 08 + ld a,e ; put in A + ld (bootmode),a ; save it +; ld b,BF_SYSSETBNK ; HBIOS func: set bank ld c,BID_USR ; select user bank rst 08 ; do it ld a,c ; previous bank to A ld (bid_ldr),a ; save previous bank for later - ;;;bit 7,a ; starting from ROM? - cp BID_IMG0 ; ROM startup? #endif ; #if (BIOS == BIOS_UNA) @@ -149,16 +154,22 @@ start: ld de,BID_USR ; select user bank rst 08 ; do it ld (bid_ldr),de ; save previous bank for later +; + ld a,BM_ROMBOOT ; assume ROM boot bit 7,d ; starting from ROM? + jr z,start1 ; if so, skip ahead + ld a,BM_APPBOOT ; else this is APP boot +start1: + ld (bootmode),a ; save it #endif ; ; For app mode startup, use alternate table - ld hl,ra_tbl ; assume ROM startup - jr z,start1 ; if so, ra_tbl OK, skip ahead - ld hl,ra_tbl_app ; not ROM boot, get app tbl loc - ld a,$ff ; signal for app boot - ld (appboot),a ; ... goes in flag -start1: + ld hl,ra_tbl ; assume ROM application table + ld a,(bootmode) ; get boot mode + cp BM_ROMBOOT ; ROM boot? + jr z,start2 ; if so, ra_tbl OK, skip ahead + ld hl,ra_tbl_app ; switch to RAM application table +start2: ld (ra_tbl_loc),hl ; and overlay pointer ; ; Copy original page zero into user page zero @@ -178,9 +189,9 @@ start1: ; #if (BIOS == BIOS_WBW) ; Get the current console unit - ld b,BF_SYSPEEK ; HBIOS func: POKE + ld b,BF_SYSPEEK ; HBIOS func: PEEK ld d,BID_BIOS ; BIOS bank - ld hl,HCB_LOC + HCB_CONDEV ; Con unit num in HCB + ld hl,HCB_LOC + HCB_CONDEV ; console unit num in HCB rst 08 ; do it ld a,e ; put in A ld (curcon),a ; save it @@ -208,10 +219,10 @@ start1: call nl2 ; formatting ld hl,str_banner ; display boot banner call pstr ; do it - ld a,(appboot) ; get app boot flag - or a ; set flags + ld a,(bootmode) ; get app boot flag + cp BM_APPBOOT ; APP boot? ld hl,str_appboot ; signal application boot mode - call nz,pstr ; print if app boot active + call z,pstr ; print if APP boot call clrbuf ; zero fill the cmd buffer ; #if ((BIOS == BIOS_WBW) & FPSW_ENABLE) @@ -260,13 +271,15 @@ prompt: ld hl,reprompt ; adr of prompt restart routine push hl ; put it on stack call nl2 ; formatting - ld hl,str_prompt ; display boot prompt + ld hl,str_prompt ; display boot prompt "Boot [H=Help]:" call pstr ; do it call clrbuf ; zero fill the cmd buffer ; + ;ld hl,msg_sel ; boot select msg + ;call dsky_show ; show on DSKY + ld c,DSKY_MSG_LDR_SEL ; boot select msg + call dsky_msg ; show on DSKY #if (DSKYENABLE) - ld hl,msg_sel ; boot select msg - call dsky_show ; show on DSKY call dsky_highlightallkeys call dsky_beep call dsky_l2on @@ -292,6 +305,7 @@ wtkey: ; wait for a key or timeout call cst ; check for keyboard key jr nz,concmd ; if pending, do console command + ; NOTE Above is like a CALL, with a RET to reprompt: (manually pushed) ; #if (DSKYENABLE) call dsky_stat ; check DSKY for keypress @@ -301,7 +315,7 @@ wtkey: #if (BIOS == BIOS_WBW) #if (AUTOCON) call conpoll ; poll for console takeover - jp nz,docon ; if requested, takeover + jp nz,docon ; if requested, takeover #endif #endif ; @@ -740,54 +754,15 @@ setcon: call skipws ; skip whitespace call isnum ; do we have a number? jp nz,docon ; if no we don't change baudrate - call getbnum ; return in HL:BC -; - ld e,32 ; search baud rate table - push de ; for a matching entry - ld de,tbl_baud -nextbaud: - ex de,hl ; hl = tbl_baud, de = msw - ld a,d ; check all four bytes - cp (hl) ; against HL:BC - inc hl ; exit to next table - jr nz,mm1 ; entry on mismatch - ld a,e - cp (hl) - inc hl - jr nz,mm2 - ld a,b - cp (hl) - inc hl - jr nz,mm3 - ld a,c - cp (hl) - inc hl - jr nz,mm4 -; - ; we have a match - pop de ; get our count value - ld a,32 - sub e - jr setspd -; -mm1: inc hl -mm2: inc hl -mm3: inc hl -mm4: ex (sp),hl ; hl = count value, stack = tbl_baud, de = msw - dec l - ex (sp),hl ; hl = tbl_baud, stack= count - ex de,hl ; hl = msw, de = tbl_baud - jr nz,nextbaud -; - ; Failed to match - pop de - jp err_invcmd -; -setspd: ld (newspeed),a ; save validated baud rate -; - ld hl,str_chspeed ; notify user - call pstr ; to change - call cin ; speed + push de ; move char ptr + pop ix ; ... to IX + call getnum32 ; get 32-bit number + jp c,err_invcmd ; handle overflow + ld c,75 ; Constant for baud rate encode + call encode ; encode into C:4-0 + jp nz,err_invcmd ; handle encoding error + ld a,c ; move encoded value to A + ld (newspeed),a ; save validated baud rate ; ; Get the current settings for chosen console ld b,BF_CIOQUERY ; BIOS serial device query @@ -801,12 +776,18 @@ setspd: ld (newspeed),a ; save validated baud rate ld hl,newspeed ; and load in new or (hl) ; baud rate ld d,a +; + ld hl,str_chspeed ; notify user + call pstr ; to change speed + call ldelay ; time for line to flush ; ld b,BF_CIOINIT ; BIOS serial init ld a,(newcon) ; get serial device unit ld c,a ; ... into C rst 08 ; call HBIOS jp nz,err_invcmd ; handle error +; + call cin ; wait for char at new speed ; ; Notify user, we're outta here.... docon: ld hl,str_newcon ; new console msg @@ -828,90 +809,6 @@ docon: ld hl,str_newcon ; new console msg call pstr ; do it ret ; -;======================================================================= -; Get numeric chars at DE and convert to BCD number returned in HL:BC -;======================================================================= -; -getbnum:ld bc,0 ; lsw - ld hl,0 ; msw -getbnum1: - ld a,(de) ; get the active char - cp '0' ; compare to ascii '0' - jr c,getbnum2 ; abort if below - cp '9' + 1 ; compare to ascii '9' - jr nc,getbnum2 ; abort if above -; - sub '0' ; convert '0'-'9' to 0-9 -; - push de ; save char posn - push hl ; save hl bcd -; - ld hl,tmpbcd ; rotate 1 nyble in A - ld (hl),c ; through HL:BC - rld - ld c,(hl) - ld (hl),b - rld - ld b,(hl) - pop de ; get hl bcd - ld (hl),e - rld - ld e,(hl) - ld (hl),d - rld - ld d,(hl) - ld h,d - ld l,e -; - pop de ; get char posn - inc de ; bump to next char - jr getbnum1 ; loop -; -getbnum2: - or a ; with flags set, CF is cleared - ret -; -tmpbcd: .db 0 -; -#DEFINE PACK(a,b,c,d,e,f,g) \ -#DEFCONT \ .db (16*('0'-'0'))+(a-'0')) -#DEFCONT \ .db (16*(b-'0'))+(c-'0')) -#DEFCONT \ .db (16*(d-'0'))+(e-'0')) -#DEFCONT \ .db (16*(f-'0'))+(g-'0')) -; -tbl_baud: - PACK('0','0','0','0','0','7','5') ; 75 0 > 0 - PACK('0','0','0','0','1','5','0') ; 150 1 > 1 - PACK('0','0','0','0','3','0','0') ; 300 3 > 2 - PACK('0','0','0','0','6','0','0') ; 600 5 > 3 - PACK('0','0','0','1','2','0','0') ; 1200 7 > 4 - PACK('0','0','0','2','4','0','0') ; 2400 9 > 5 - PACK('0','0','0','4','8','0','0') ; 4800 11 > 6 - PACK('0','0','0','9','6','0','0') ; 9600 13 > 7 - PACK('0','0','1','9','2','0','0') ; 19200 15 > 8 - PACK('0','0','3','8','4','0','0') ; 38400 17 > 9 - PACK('0','0','7','6','8','0','0') ; 76800 19 > 10 - PACK('0','1','5','3','6','0','0') ; 153600 21 > 11 - PACK('0','3','0','7','2','0','0') ; 307200 23 > 12 - PACK('0','6','1','4','4','0','0') ; 614400 25 > 13 - PACK('1','2','2','8','8','0','0') ; 1228800 27 > 14 - PACK('2','4','5','7','6','0','0') ; 2457600 29 > 15 - PACK('0','0','0','0','2','2','5') ; 225 2 > 16 - PACK('0','0','0','0','4','5','0') ; 450 4 > 17 - PACK('0','0','0','0','9','0','0') ; 900 6 > 18 - PACK('0','0','0','1','8','0','0') ; 1800 8 > 19 - PACK('0','0','0','3','6','0','0') ; 3600 10 > 20 - PACK('0','0','0','7','2','0','0') ; 7200 12 > 21 - PACK('0','0','1','4','4','0','0') ; 14400 14 > 22 - PACK('0','0','2','8','8','0','0') ; 28800 16 > 23 - PACK('0','0','5','7','6','0','0') ; 57600 18 > 24 - PACK('0','1','1','5','2','0','0') ; 115200 20 > 25 - PACK('0','2','3','0','4','0','0') ; 230400 22 > 26 - PACK('0','4','6','0','8','0','0') ; 460800 24 > 27 - PACK('0','9','2','1','6','0','0') ; 921600 26 > 28 - PACK('1','8','4','3','2','0','0') ; 1843200 28 > 29 - PACK('3','6','8','6','4','0','0') ; 3686400 30 > 30 - PACK('7','3','7','2','8','0','0') ; 7372800 31 > 31 #endif ; ; Set RomWBW HBIOS Diagnostic Level @@ -961,10 +858,10 @@ reboot: ; #if (BIOS == BIOS_WBW) ; -#if (DSKYENABLE) - ld hl,msg_boot ; point to boot message - call dsky_show ; display message -#endif + ;ld hl,msg_boot ; point to boot message + ;call dsky_show ; display message + ld c,DSKY_MSG_LDR_BOOT ; point to boot message + call dsky_msg ; display message ; ; cold boot system ld b,BF_SYSRESET ; system restart @@ -993,10 +890,10 @@ romload: ld h,(ix+ra_name+1) call pstr ; -#if (DSKYENABLE) - ld hl,msg_load ; point to load message - call dsky_show ; display message -#endif + ;ld hl,msg_load ; point to load message + ;call dsky_show ; display message + ld c,DSKY_MSG_LDR_LOAD ; point to load message + call dsky_msg ; display message ; #if (BIOS == BIOS_WBW) ; @@ -1077,10 +974,10 @@ romload1: ; #endif ; -#if (DSKYENABLE) - ld hl,msg_go ; point to go message - call dsky_show ; display message -#endif + ;ld hl,msg_go ; point to go message + ;call dsky_show ; display message + ld c,DSKY_MSG_LDR_GO ; point to go message + call dsky_msg ; display message ; ld l,(ix+ra_ent) ; HL := app entry address ld h,(ix+ra_ent+1) ; ... @@ -1093,50 +990,42 @@ romload1: diskboot: ; ; Notify user - ld hl,str_boot1 + ld hl,str_boot1 ; "Booting Disk Unit" call pstr ld a,(bootunit) call prtdecb - ld hl,str_boot2 + ld hl,str_boot2 ; "Slice" call pstr ld a,(bootslice) call prtdecb ; -#if (DSKYENABLE) - ld hl,msg_load ; point to load message - call dsky_show ; display message -#endif + ;ld hl,msg_load ; point to load message + ;call dsky_show ; display message + ld c,DSKY_MSG_LDR_LOAD ; point to load message + call dsky_msg ; display message ; #if (BIOS == BIOS_WBW) ; - ; Check that drive actually exists - ld b,BF_SYSGET ; HBIOS func: sys get - ld c,BF_SYSGET_DIOCNT ; HBIOS sub-func: disk count - rst 08 ; do it, E=disk count - ld a,(bootunit) ; get boot disk unit - cp e ; compare to count - jp nc,err_nodisk ; handle no disk err -; - ; If non-zero slice requested, confirm device can handle it - ld a,(bootslice) ; get slice - or a ; set flags - jr z,diskboot0 ; slice 0, skip slice check - ld a,(bootunit) ; get disk unit - ld c,a ; put in C for func call - ld b,BF_DIODEVICE ; HBIOS func: device info + ; Get Extended information for the Device, and Slice + ld b,BF_EXTSLICE ; HBIOS func: SLICE CALC + ld a,(bootunit) ; passing boot unit + ld d,a + ld a,(bootslice) ; and slice + ld e,a rst 08 ; do it - bit 5,c ; high capacity device? - jp z,err_noslice ; no such slice, handle err +; + ; Check errors from the Function + cp ERR_NOUNIT ; compare to no unit error + jp z,err_nodisk ; handle no disk err + cp ERR_NOMEDIA ; no media in the device + jp z,err_nomedia ; handle the error + cp ERR_RANGE ; slice is invalid + jp z,err_badslice ; bad slice, handle err + or a ; any other error + jp nz,err_diskio ; handle as general IO error ; diskboot0: - ; Sense media - ld a,(bootunit) ; get boot disk unit - ld c,a ; put in C for func call - ld b,BF_DIOMEDIA ; HBIOS func: media - ld e,1 ; enable media check/discovery - rst 08 ; do it - jp nz,err_diskio ; handle error - ld a,e ; media id to A + ld a,c ; media id to A ld (mediaid),a ; save media id ; #endif @@ -1173,8 +1062,6 @@ diskboot0: ld a,4 ; assume legacy hard disk ld (mediaid),a ; save media id ; -#endif -; diskboot1: ; Initialize working LBA value ld hl,0 ; zero HL @@ -1249,13 +1136,15 @@ diskboot6: dec a ; dec loop downcounter jr diskboot5 ; and loop ; +#endif +; diskboot7: ld (lba),hl ; update lba, low word ld (lba+2),de ; update lba, high word ; diskboot8: ; Note that we could be coming from diskboot1! - ld hl,str_ldsec ; display prefix + ld hl,str_ldsec ; display prefix "Sector Ox" call pstr ; do it ld hl,(lba) ; recover lba loword ld de,(lba+2) ; recover lba hiword @@ -1386,15 +1275,17 @@ diskboot10: ; call pdot ; show progress ; -#if (DSKYENABLE) - ld hl,msg_go ; point to go message - call dsky_show ; display message -#endif + ;ld hl,msg_go ; point to go message + ;call dsky_show ; display message + ld c,DSKY_MSG_LDR_GO ; point to go message + call dsky_msg ; display message ; ; Jump to entry vector ld hl,(bb_cpment) ; get entry vector jp (hl) ; and go there ; +;----------------------------------------------------------------------- +; ; Read disk sector(s) ; DE:HL is LBA, B is sector count, C is disk unit ; @@ -1506,10 +1397,13 @@ pvol1: nl2: call nl ; double newline nl: + push af ld a,cr ; cr call cout ; send it ld a,lf ; lf - jp cout ; send it and return + call cout ; send it and return + pop af + ret ; ; Print a dot on console ; @@ -1921,6 +1815,110 @@ hexconv: daa ret ; +#if (BIOS == BIOS_WBW) +; +; Get numeric chars and convert to 32-bit number returned in DE:HL +; IX points to start of char buffer +; Carry flag set on overflow +; +getnum32: + ld de,0 ; Initialize DE:HL + ld hl,0 ; ... to zero +getnum32a: + ld a,(ix) ; get the active char + cp '0' ; compare to ascii '0' + jr c,getnum32c ; abort if below + cp '9' + 1 ; compare to ascii '9' + jr nc,getnum32c ; abort if above +; + ; valid digit, multiply DE:HL by 10 + ; X * 10 = (((x * 2 * 2) + x)) * 2 + push de + push hl +; + call getnum32e ; DE:HL *= 2 + jr c,getnum32d ; if overflow, ret w/ CF & stack pop +; + call getnum32e ; DE:HL *= 2 + jr c,getnum32d ; if overflow, ret w/ CF & stack pop +; + pop bc ; DE:HL += X + add hl,bc + ex de,hl + pop bc + adc hl,bc + ex de,hl + ret c ; if overflow, ret w/ CF +; + call getnum32e ; DE:HL *= 2 + ret c ; if overflow, ret w/ CF +; + ; now add in new digit + ld a,(ix) ; get the active char + sub '0' ; make it binary + add a,l ; add to L, CF updated + ld l,a ; back to L + jr nc,getnum32b ; if no carry, done + inc h ; otherwise, bump H + jr nz,getnum32b ; if no overflow, done + inc e ; otherwise, bump E + jr nz,getnum32b ; if no overflow, done + inc d ; otherwise, bump D + jr nz,getnum32b ; if no overflow, done + scf ; set carry flag to indicate overflow + ret ; and return +; +getnum32b: + inc ix ; bump to next char + jr getnum32a ; loop +; +getnum32c: + ; successful completion + xor a ; clear flags + ret ; and return +; +getnum32d: + ; special overflow exit with stack fixup + pop hl ; burn 2 + pop hl ; ... stack entries + ret ; and return +; +getnum32e: + ; DE:HL := DE:HL * 2 + sla l + rl h + rl e + rl d + ret +; +; Integer divide DE:HL by C +; result in DE:HL, remainder in A +; clobbers F, B +; +div32x8: + xor a + ld b,32 +div32x8a: + add hl,hl + rl e + rl d + rla + cp c + jr c,div32x8b + sub c + inc l +div32x8b: + djnz div32x8a + ret +; +DIV32X8 .equ div32x8 +; +#include "encode.asm" ; baud rate encoding routine +; +encode .equ ENCODE +; +#endif +; ;======================================================================= ; Console character I/O helper routines (registers preserved) ;======================================================================= @@ -2214,14 +2212,20 @@ dsky_highlightkeysoff: ld hl,dsky_highlightkeyledsoff jr dsky_putled ; +#endif +; +dsky_msg: +#if (BIOS == BIOS_WBW) + ld b,BF_DSKYMESSAGE + jr dsky_hbcall +; dsky_hbcall: ld a,(dskyact) or a ret z rst 08 - ret -; #endif + ret ; ;======================================================================= ; Error handlers @@ -2235,10 +2239,17 @@ err_nodisk: ld hl,str_err_nodisk jr err ; +err_nomedia: + ld hl,str_err_nomedia + jr err +; err_noslice: ld hl,str_err_noslice jr err ; +err_badslice: + ld hl,str_err_badslice + jr err err_nocon: ld hl,str_err_nocon jr err @@ -2272,7 +2283,9 @@ err: str_err_prefix .db bel,"\r\n\r\n*** ",0 str_err_invcmd .db "Invalid command",0 str_err_nodisk .db "Disk unit not available",0 +str_err_nomedia .db "Media not present",0 str_err_noslice .db "Disk unit does not support slices",0 +str_err_badslice .db "Slice specified is illegal",0 str_err_nocon .db "Invalid character unit specification",0 str_err_diskio .db "Disk I/O failure",0 str_err_sig .db "No system image on disk",0 @@ -2325,13 +2338,22 @@ str_help .db "\r\n" #endif .db "\r\n [.] - Boot Disk Unit/Slice" .db 0 -; -#if (DSKYENABLE) -msg_sel .db $7f,$5c,$5c,$78,$53,$00,$00,$00 ; "boot? " -msg_boot .db $7f,$5c,$5c,$78,$80,$80,$80,$00 ; "boot... " -msg_load .db $38,$5c,$5f,$5e,$80,$80,$80,$00 ; "load... " -msg_go .db $3d,$5c,$80,$80,$80,$00,$00,$00 ; "go... " -#endif +;;;; +;;;#if (DSKYENABLE) +;;; #if (GM7303ENABLE) +;;; ; The GM7303 has an ASCII LCD display +;;;msg_sel .db "Boot?", $00 +;;;msg_boot .db "Boot...", $00 +;;;msg_load .db "Load...", $00 +;;;msg_go .db "Go...", $00 +;;; #else +;;; ; Other DSKY devices use 7 segment LEDs +;;;msg_sel .db $7f,$5c,$5c,$78,$53,$00,$00,$00 ; "boot? " +;;;msg_boot .db $7f,$5c,$5c,$78,$80,$80,$80,$00 ; "boot... " +;;;msg_load .db $38,$5c,$5f,$5e,$80,$80,$80,$00 ; "load... " +;;;msg_go .db $3d,$5c,$80,$80,$80,$00,$00,$00 ; "go... " +;;; #endif +;;;#endif ; ;======================================================================= ; DSKY keypad led matrix masks @@ -2404,8 +2426,8 @@ ra_ent .equ 12 ; ; Note: The loadable ROM images are placed in ROM banks BID_IMG0 and ; BID_IMG1. However, RomWBW supports a mechanism to load a complete -; new system dynamically as a runnable application (see appboot and -; imgboot in hbios.asm). In this case, the contents of BID_IMG0 will +; new system dynamically as a runnable application (see appboot +; in hbios.asm). In this case, the contents of BID_IMG0 will ; be pre-loaded into the currently executing ram bank thereby allowing ; those images to be dynamically loaded as well. To support this ; concept, a pseudo-bank called bid_cur is used to specify the images @@ -2425,21 +2447,22 @@ ra_entsiz .equ $ - ra_tbl ra_ent(str_smon, 'S', $FF, bid_cur , $8000, $8000, $0001, s100mon) #endif #endif -ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) ra_ent(str_cpm22, 'C', KY_BK, BID_IMG0, CPM_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) +ra_ent(str_zsys, 'Z', KY_FW, BID_IMG0, ZSYS_IMGLOC, CPM_LOC, CPM_SIZ, CPM_ENT) #if (BIOS == BIOS_WBW) -ra_ent(str_fth, 'F', KY_EX, BID_IMG1, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LOC) ra_ent(str_bas, 'B', KY_DE, BID_IMG1, BAS_IMGLOC, BAS_LOC, BAS_SIZ, BAS_LOC) ra_ent(str_tbas, 'T', KY_EN, BID_IMG1, TBC_IMGLOC, TBC_LOC, TBC_SIZ, TBC_LOC) +ra_ent(str_fth, 'F', KY_EX, BID_IMG1, FTH_IMGLOC, FTH_LOC, FTH_SIZ, FTH_LOC) ra_ent(str_play, 'P', $FF, BID_IMG1, GAM_IMGLOC, GAM_LOC, GAM_SIZ, GAM_LOC) -ra_ent(str_egg, 'E'+$80, $FF, BID_IMG1, EGG_IMGLOC, EGG_LOC, EGG_SIZ, EGG_LOC) ra_ent(str_net, 'N', $FF, BID_IMG1, NET_IMGLOC, NET_LOC, NET_SIZ, NET_LOC) ra_ent(str_upd, 'X', $FF, BID_IMG1, UPD_IMGLOC, UPD_LOC, UPD_SIZ, UPD_LOC) +ra_ent(str_nvr, 'W', $FF, BID_IMG1, NVR_IMGLOC, NVR_LOC, NVR_SIZ, NVR_LOC) ra_ent(str_user, 'U', $FF, BID_IMG1, USR_IMGLOC, USR_LOC, USR_SIZ, USR_LOC) #endif #if (DSKYENABLE) ra_ent(str_dsky, 'Y'+$80, KY_GO, BID_IMG0, MON_IMGLOC, MON_LOC, MON_SIZ, MON_DSKY) #endif +ra_ent(str_egg, 'E'+$80, $FF, BID_IMG1, EGG_IMGLOC, EGG_LOC, EGG_SIZ, EGG_LOC) .dw 0 ; table terminator ; ra_tbl_app: @@ -2462,6 +2485,7 @@ str_bas .db "BASIC",0 str_tbas .db "Tasty BASIC",0 str_play .db "Play a Game",0 str_upd .db "XModem Flash Updater",0 +str_nvr .db "RomWBW Configure", 0 str_user .db "User App",0 str_egg .db "",0 str_net .db "Network Boot",0 @@ -2488,7 +2512,7 @@ dma .dw 0 ; address for load sps .dw 0 ; sectors per slice mediaid .db 0 ; media id ; -appboot .db 0 ; app boot if != 0 +bootmode .db 0 ; ROM, APP, or IMG boot ra_tbl_loc .dw 0 ; points to active ra_tbl bootunit .db 0 ; boot disk unit bootslice .db 0 ; boot disk slice @@ -2503,7 +2527,6 @@ ciocnt .db 1 ; count of char units savcon .db 0 ; con save for conpoll conpend .db $ff ; pending con unit (first pressed) #endif - ; ;======================================================================= ; Pad remainder of ROM Loader diff --git a/Source/HBIOS/rp5rtc.asm b/Source/HBIOS/rp5rtc.asm index 66753fcc..2a7b99a6 100644 --- a/Source/HBIOS/rp5rtc.asm +++ b/Source/HBIOS/rp5rtc.asm @@ -83,9 +83,11 @@ RP5RTC_INIT: RP5RTC_INIT1: ; ENSURE DEVICE IS RESET AND NOT IN TEST MODE LD A, REG_TEST ; SELECT TEST REGISTER + EZ80_IO OUT (RP5RTC_REG), A CALL DLY16 XOR A + EZ80_IO OUT (RP5RTC_DAT), A ; TURN OFF ALL TEST MODE BITS LD B, MODE_ALRMST @@ -94,8 +96,10 @@ RP5RTC_INIT1: CALL RP5RTC_ENTIME LD A, REG_12_24 ; SET TO 24 HOUR CLOCK + EZ80_IO OUT (RP5RTC_REG), A LD A, 1 + EZ80_IO OUT (RP5RTC_DAT), A CALL RP5RTC_RDTIM @@ -179,7 +183,9 @@ RP5RTC_GETBYT: LD B, MODE_RAM0 CALL RP5RTC_SETMD LD A, C ; SELECT NVRAM INDEX + EZ80_IO OUT (RP5RTC_REG), A + EZ80_IO IN A, (RP5RTC_DAT) AND $0F ; RETRIEVE UNIT NIBBLE LD E, A @@ -187,7 +193,9 @@ RP5RTC_GETBYT: LD B, MODE_RAM1 CALL RP5RTC_SETMD LD A, C ; SELECT NVRAM INDEX + EZ80_IO OUT (RP5RTC_REG), A + EZ80_IO IN A, (RP5RTC_DAT) AND $0F ; RETRIEVE UNIT NIBBLE RLCA @@ -218,14 +226,17 @@ RP5RTC_SETBYT: LD B, MODE_RAM0 CALL RP5RTC_SETMD LD A, C ; SELECT NVRAM INDEX + EZ80_IO OUT (RP5RTC_REG), A LD A, E AND $0F + EZ80_IO OUT (RP5RTC_DAT), A LD B, MODE_RAM1 CALL RP5RTC_SETMD LD A, C ; SELECT NVRAM INDEX + EZ80_IO OUT (RP5RTC_REG), A LD A, E AND $F0 @@ -233,6 +244,7 @@ RP5RTC_SETBYT: RRCA RRCA RRCA + EZ80_IO OUT (RP5RTC_DAT), A XOR A ; SIGNAL SUCCESS @@ -285,7 +297,7 @@ RP5RTC_SETTIM: LD (HB_DSTBNK),A ; SET IT LD DE,RP5RTC_BCDBUF ; DEST ADR LD BC,RP5RTC_BUFSIZ ; LENGTH - CALL HB_BNKCPY ; COPY THE CLOCK DATA + CALL HB_BNKCPY ; COPY THE RPC DATA ; LD B, MODE_TIMEST CALL RP5RTC_SETMD @@ -374,11 +386,14 @@ RP5RTC_RDTIM: ; MODE IN B (MODE_TIMEST, MODE_ALRMST, MODE_RAM0, MODE_RAM1) RP5RTC_SETMD: LD A, REG_MODE ; SELECT MODE REGISTER + EZ80_IO OUT (RP5RTC_REG), A + EZ80_IO IN A, (RP5RTC_DAT) AND MD_TIME | MD_ALRM OR B + EZ80_IO OUT (RP5RTC_DAT), A ; ASSIGN MODE RET @@ -391,14 +406,18 @@ RP5RTC_ENTIME: ; REGISTER IN B RP5RTC_RDVL: LD A, B ; SELECT UNIT REGISTER + EZ80_IO OUT (RP5RTC_REG), A + EZ80_IO IN A, (RP5RTC_DAT) AND $0F ; RETRIEVE UNIT NIBBLE LD L, A INC B LD A, B ; SELECT TENS REGISTER + EZ80_IO OUT (RP5RTC_REG), A + EZ80_IO IN A, (RP5RTC_DAT) AND $0F RLCA @@ -416,13 +435,16 @@ RP5RTC_RDVL: RP5RTC_WRVL: LD C, A LD A, B ; SELECT UNIT REGISTER + EZ80_IO OUT (RP5RTC_REG), A LD A, C ; WRITE C (ONLY LOW NIBBLE WILL BE USED) + EZ80_IO OUT (RP5RTC_DAT), A INC B LD A, B ; SELECT TENS REGISTER + EZ80_IO OUT (RP5RTC_REG), A LD A, C ; SHIFT TOP NIBBLE TO LOW NIBBLE @@ -430,6 +452,7 @@ RP5RTC_WRVL: RRCA RRCA RRCA + EZ80_IO OUT (RP5RTC_DAT), A ; WRITE IT RET diff --git a/Source/HBIOS/scon.asm b/Source/HBIOS/scon.asm index 1d3b4a5d..9d8452de 100644 --- a/Source/HBIOS/scon.asm +++ b/Source/HBIOS/scon.asm @@ -5,7 +5,7 @@ ; ; TODO: ; -SCON_IOBASE .EQU $00 +SCON_IOBASE .EQU $0000 ; NOTE: 16-BIT I/O ; SCON_STATUS .EQU SCON_IOBASE SCON_DATA .EQU SCON_IOBASE + 1 @@ -25,6 +25,9 @@ SCON_ROWS .EQU 40 SCON_INIT: CALL NEWLINE PRTS("SCON:$") + PRTS(" IO=0x$") ; FORMATTING + LD A,SCON_IOBASE + CALL PRTHEXBYTE ; ; DISPLAY CONSOLE DIMENSIONS CALL PC_SPACE @@ -43,7 +46,8 @@ SCON_INIT: LD E,CIODEV_SCON ; DEVICE TYPE LD BC,SCON_FNTBL ; BC := FUNCTION TABLE ADDRESS CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; XOR A ; SIGNAL SUCCESS RET @@ -67,14 +71,18 @@ SCON_FNTBL: SCON_IN: CALL SCON_IST ; CHECK FOR CHAR PENDING JR Z,SCON_IN ; WAIT FOR IT IF NECESSARY - IN0 A,(SCON_DATA) ; READ THE CHAR FROM PROPIO + ;IN0 A,(SCON_DATA) ; READ THE CHAR FROM PROPIO + LD BC,SCON_DATA ; DATA PORT (16 BIT I/O) + IN A,(C) ; READ THE CHAR FROM PROPIO LD E,A RET ; ; ; SCON_IST: - IN0 A,(SCON_STATUS) ; READ LINE STATUS REGISTER + ;IN0 A,(SCON_STATUS) ; READ LINE STATUS REGISTER + LD BC,SCON_STATUS ; STATUS PORT (16-BIT I/O) + IN A,(C) ; READ LINE STATUS REGISTER AND SCON_KBDRDY ; ISOLATE KBDRDY JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING OR $FF ; SET A=$FF TO SIGNAL READY @@ -86,13 +94,17 @@ SCON_OUT: CALL SCON_OST ; CHECK FOR OUTPUT READY JR Z,SCON_OUT ; WAIT IF NECESSARY LD A,E ; RECOVER THE CHAR TO WRITE - OUT0 (SCON_DATA),A ; WRITE THE CHAR TO PROPIO + ;OUT0 (SCON_DATA),A ; WRITE THE CHAR TO PROPIO + LD BC,SCON_DATA ; DATA PORT (16 BIT I/O) + OUT (C),A ; WRITE THE CHAR TO PROPIO RET ; ; ; SCON_OST: - IN0 A,(SCON_STATUS) ; READ LINE STATUS REGISTER + ;IN0 A,(SCON_STATUS) ; READ LINE STATUS REGISTER + LD BC,SCON_STATUS ; STATUS PORT (16-BIT I/O) + IN A,(C) ; READ LINE STATUS REGISTER AND SCON_DSPRDY ; ISOLATE DSPRDY JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING OR $FF ; SET A=$FF TO SIGNAL READY diff --git a/Source/HBIOS/sd.asm b/Source/HBIOS/sd.asm index f96abca5..3873e36e 100644 --- a/Source/HBIOS/sd.asm +++ b/Source/HBIOS/sd.asm @@ -125,8 +125,8 @@ SD_OPRREG .EQU RTCIO ; USES RTC LATCHES FOR OPERATION SD_OPRDEF .EQU %00000001 ; QUIESCENT STATE SD_OPRMSK .EQU %10000111 ; MASK FOR BITS WE OWN IN RTC LATCH PORT SD_INPREG .EQU RTCIO ; INPUT REGISTER IS RTC -SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT -SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK +SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT +SD_CLK .EQU %00000010 ; RTC:1 IS CLOCK SD_DI .EQU %00000001 ; RTC:0 IS DATA IN (CARD <- CPU) SD_DO .EQU %10000000 ; RTC:7 IS DATA OUT (CARD -> CPU) SD_IOBASE .EQU SD_OPRREG ; IOBASE @@ -242,7 +242,21 @@ SD_TRDR .EQU Z180_TRDR SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU TRUE ; INVERT CS DEVECHO "SC" +RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE +#ENDIF ; +#IF (SDMODE == SDMODE_GM) ; GM +SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS) +SD_OPRREG .EQU RTCIO ; USES RTC LATCHES FOR OPERATION +SD_OPRDEF .EQU %00000100 ; QUIESCENT STATE (/CS1 & /CS2 DEASSERTED) +SD_OPRMSK .EQU %00000100 ; MASK FOR BITS WE OWN IN RTC LATCH PORT +SD_CS0 .EQU %00000100 ; RTC:2 IS SELECT FOR PRIMARY SPI CARD +SD_CS1 .EQU %00000000 ; RTC:3 IS SELECT FOR SECONDARY SPI CARD +SD_CNTR .EQU Z180_CNTR +SD_TRDR .EQU Z180_TRDR +SD_IOBASE .EQU SD_OPRREG ; IOBASE +SD_INVCS .EQU TRUE ; INVERT CS + DEVECHO "GM" RTCDEF .SET RTCDEF | SD_OPRDEF ; SET DEFAULT IN HBIOS MAINLINE #ENDIF ; @@ -294,7 +308,7 @@ SD_CS1 .EQU %00010000 ; IN/OUT:SD_OPREG:4 = CS1, SDCARD1 CS, IN=1 Card present #ENDIF SD_IOBASE .EQU SD_BASE ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS - DEVECHO "DUO" + DEVECHO "MT" #ENDIF ; ; @@ -372,10 +386,10 @@ SD_CS0 .EQU %00000100 ; SELECT SD_DI .EQU %00000001 ; DATA IN (CARD <- CPU) MOSI SD_DO .EQU %00000001 ; DATA OUT (CARD -> CPU) MISO SD_CINIT .EQU FALSE ; INITIALIZE OUTPUT PORT -SD_INVCS .EQU FALSE ; INVERT CS +SD_INVCS .EQU TRUE ; INVERT CS DEVECHO "Z80R" #ENDIF - +; ; FOR NOW WE JUST HOOK UP ONE UNIT. THERE ARE EIGHT PORTS FOR DIFFERENT ; THINGS BUT THIS WILL GET US GOING #IF (SDMODE == SDMODE_EPITX) ; Z180 ITX - CSIO, 82C55 for CS @@ -389,6 +403,39 @@ SD_IOBASE .EQU SD_OPRREG ; IOBASE SD_INVCS .EQU FALSE ; INVERT CS DEVECHO "EPITX" #ENDIF +; +; S100 FPGA Z80 SPI-BASED SD CARD +; +; BASE PORT: $6C +; BASE + 0: DATA IN/OUT +; BASE + 1: SPI CLOCK SPEED (0=LOW 4KHZ, 1=HIGH 10MHZ) +; BASE + 2: SELECT (W), STATUS (R) +; BASE + 3: START READ (IN OPCODE), START WRITE (OUT OPCODE), ANY VALUE +; +; STATUS BITS: +; 7: BUSY (1=BUSY) +; 0: PRIMARY DEVICE SELECT STATUS (1=SELECTED) +; 1: SECONDARY DEVICE SELECT STATUS (1=SELECTED) +; +; SELECT BITS (INVERTED!!!): +; 0: PRIMARY DEVICE, USE VALUE ~$01 +; 1: SECONDARY DEVICE, USE VALUE ~$02 +; +#IF (SDMODE == SDMODE_FZ80) ; S100 FPGA Z80 +SD_IOBASE .EQU $6C ; IOBASE +SD_DATA .EQU SD_IOBASE + 0 ; DATA IN/OUT PORT +SD_CLKSEL .EQU SD_IOBASE + 1 ; CLOCK SPEED SELECT PORT +SD_SELSTAT .EQU SD_IOBASE + 2 ; DEVICE SELECT PORT (W) / STATUS (R) +SD_ACTION .EQU SD_IOBASE + 3 ; INITIATE R/W ACTION VIA IN/OUT +; +SD_DEVMAX .EQU 2 ; NUMBER OF PHYSICAL UNITS (SOCKETS) +SD_OPRREG .EQU SD_SELSTAT ; SELECT/STATUS PORT +SD_OPRDEF .EQU $FF ; QUIESCENT STATE +SD_CS0 .EQU %00000001 ; PRIMARY DEVICE SELECT BIT +SD_CS1 .EQU %00000010 ; SECONDARY DEVICE SELECT BIT +SD_INVCS .EQU TRUE ; INVERT CS + DEVECHO "FZ80" +#ENDIF ; DEVECHO ", IO=" DEVECHO SD_IOBASE @@ -413,6 +460,7 @@ SD_CMD_READ_SNGL_BLK .EQU $40 + 17 ; $51, CMD17 -> R1 SD_CMD_WRITE_BLOCK .EQU $40 + 24 ; $58, CMD24 -> R1 SD_CMD_APP_CMD .EQU $40 + 55 ; $77, CMD55 -> R1 SD_CMD_READ_OCR .EQU $40 + 58 ; $7A, CMD58 -> R3 +SD_CMD_CRC_ON_OFF .EQU $40 + 59 ; $7B, CMD59 -> R1 ; ; SD CARD APPLICATION COMMANDS (PRECEDED BY APP_CMD COMMAND) ; @@ -574,7 +622,7 @@ SD_INIT: CALL PRTHEXBYTE #ENDIF ; -#IF (SDMODE == SDMODE_SC) +#IF ((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) PRTS(" MODE=SC$") #IF (SDCSIOFAST) PRTS(" FAST$") @@ -640,6 +688,13 @@ SD_INIT: LD A,SD_TRDR CALL PRTHEXBYTE #ENDIF +; +#IF (SDMODE == SDMODE_FZ80) + PRTS(" MODE=FZ80$") + PRTS(" IO=0x$") + LD A,SD_IOBASE + CALL PRTHEXBYTE +#ENDIF ; CALL SD_PROBE ; CHECK FOR HARDWARE JR Z,SD_INIT00 ; CONTINUE IF PRESENT @@ -901,19 +956,12 @@ SD_IO: OR A ; SET FLAGS RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 ; -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) - ; CONSIDER CAPTURING CURRENT CNTR VALUE HERE AND USE IT - ; IN SD_CSIO_DEF - ; SET CSIO FOR HIGH SPEED OPERATION - CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING - CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT - XOR A ; ZERO MEANS MAX SPEED - OUT0 (SD_CNTR),A ; NOW SET CSIO PORT + CALL SD_SPD_FAST +; ; HOOK RETURN TO RESTORE CSIO TO DEFAULT SPEED - LD HL,SD_CSIO_DEF ; ROUTE RETURN + LD HL,SD_SPD_STD ; ROUTE RETURN PUSH HL ; ... THRU CSIO RESTORE -#ENDIF ; #IF (SDTRACE == 1) LD HL,SD_PRTERR ; SET UP SD_PRTERR @@ -1005,6 +1053,9 @@ SD_MEDIA: JR NZ,SD_MEDIA1 ; ERROR ACTIVE, GO RIGHT TO RESET ; ; USE SEND_CSD TO CHECK CARD + ;;;LD A,'C' ;;; + ;;;CALL COUT ;;; + CALL SD_SPD_FAST ; GO FAST FOR COMPATIBILITY CALL SD_SELUNIT ; SET CUR UNIT LD A,SD_CMD_SEND_CSD ; SEND_CSD CALL SD_INITCMD ; SETUP COMMAND BUFFER @@ -1017,9 +1068,14 @@ SD_MEDIA: JR Z,SD_MEDIA2 ; IF SUCCESS, BYPASS RESET ; SD_MEDIA1: + ;;;LD A,'R' ;;; + ;;;CALL COUT ;;; CALL SD_RESET ; RESET CARD ; SD_MEDIA2: + ;;;LD A,'D' ;;; + ;;;CALL COUT ;;; + CALL SD_SPD_STD ; BACK TO STD SPEED LD A,(IY+SD_STAT) ; GET STATUS OR A ; SET FLAGS LD D,0 ; NO MEDIA CHANGE DETECTED @@ -1032,7 +1088,6 @@ SD_MEDIA2: ; ; ; -; SD_SEEK: BIT 7,D ; CHECK FOR LBA FLAG CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA @@ -1080,9 +1135,7 @@ SD_INITCARD: CALL SD_CHKCD ; CHECK CARD DETECT JP Z,SD_NOMEDIA ; Z=NO MEDIA, HANDLE IF SO ; -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) - CALL SD_CSIO_DEF ; ENSURE CSIO AT DEFAULT SPEED -#ENDIF + CALL SD_SPD_SLOW ; SET SLOW SPEED FOR INIT ; ; WAKE UP THE CARD, KEEP DIN HI (ASSERTED) AND /CS HI (DEASSERTED) LD B,$10 ; MIN 74 CLOCKS REQUIRED, WE USE 128 ($10 * 8) @@ -1093,8 +1146,8 @@ SD_INITCARD1: POP BC ; RESTORE LOOP CONTROL DJNZ SD_INITCARD1 ; LOOP AS NEEDED ; - ; MAKE SURE WE FINISH SENDING -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM) | (SDMODE == SDMODE_EPITX)) + ; MAKE SURE CSIO IS DONE SENDING DATA CALL SD_WAITTX ; WAIT FOR TE TO CLEAR CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT #ENDIF @@ -1189,9 +1242,28 @@ SD_INITCARD4: CALL SD_INITCMD ; SETUP COMMAND BUFFER CALL SD_EXECCMD ; EXECUTE COMMAND RET NZ ; ABORT ON ERROR - ; CMD58 WORKED, GET OCR DATA AND SET CARD TYPE - CALL SD_GET ; BITS 31-24 + ; CMD58 WORKED, GET OCR DATA + LD B,4 ; 4 BYTES OF OCR + LD HL,SD_BUF ; PUT IN OUR PRIVATE BUFFER +SD_INITCARD4B: + PUSH BC ; SAVE LOOP CONTROL + CALL SD_GET ; GET NEXT BYTE + POP BC ; RESTORE LOOP CONTROL + LD (HL),A ; SAVE IT + INC HL ; BUMP BUF PTR + DJNZ SD_INITCARD4B ; LOOP AS NEEDED CALL SD_DONE ; FINISH THE TRANSACTION +; +#IF (SDTRACE >= 3) + ; IF TRACING, DUMP THE OCR CONTENTS + CALL SD_PRTPREFIX + LD DE,SD_STR_OCR + CALL WRITESTR + LD DE,SD_BUF + LD A,4 + CALL PRTHEXBUF +#ENDIF + LD A,(SD_BUF) ; FIRST BYTE OF BUF (BITS 31-24 OF OCR) AND $40 ; ISOLATE BIT 30 (CCS) LD C,SD_TYPESDSC ; ASSUME V1 CARD JR Z,SD_INITCARD5 ; IF BIT NOT SET, THIS IS SDSC CARD @@ -1254,7 +1326,7 @@ SD_INITCARD5: ; HIGH SPEED CSIO OPERATION IS NOW SET AT THE START OF SD_IO ; -;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC)) +;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) ; ; PER SPEC, THE CARD SHOULD NOW BE ABLE TO HANDLE FULL SPEED OPERATION ; ; SO, FOR CSIO OPERATION, WE SET CSIO TO MAXIMUM SPEED ; CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING @@ -1439,11 +1511,11 @@ SD_SETADDR: PUSH AF ; SAVE IT LD A,SD_LBA ; OFFSET OF LBA VALUE CALL LDHLIYA ; HL := IY + A, REG A TRASHED -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF CALL LD32 ; LOAD IT TO DE:HL, AF IS TRASHED POP AF ; GET CARD TYPE BACK CP SD_TYPESDHC ; IS IT V2 OR BETTER? @@ -1486,8 +1558,10 @@ SD_GOIDLE: ; SD_GOIDLE1: ; SEEMS TO HELP SOME CARDS? - ;CALL SD_SELECT ; ASSERT CS - ;CALL SD_DONE ; SEND 8 CLOCKS AND DEASSERT CS + ;;; DEBUG + CALL SD_SELECT ; ASSERT CS + CALL SD_DONE ; SEND 8 CLOCKS AND DEASSERT CS + ;;; DEBUG ; SMALL DELAY HERE HELPS SOME CARDS ;;LD DE,300 ; 16US * 300 = ~5MS @@ -1699,8 +1773,11 @@ SD_GETDATA3: LD A,D OR E JR NZ,SD_GETDATA3 ; LOOP FOR ALL BYTES + ;;;CALL PC_SPACE CALL SD_GET ; DISCARD CRC BYTE 1 + ;;;CALL PRTHEXBYTE CALL SD_GET ; DISCARD CRC BYTE 2 + ;;;CALL PRTHEXBYTE #ENDIF XOR A ; RESULT IS ZERO SD_GETDATA4: @@ -1811,6 +1888,11 @@ SD_DONE: PUSH AF LD A,$FF CALL SD_PUT +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) + ; MAKE SURE CSIO IS DONE SENDING DATA + CALL SD_WAITTX ; WAIT FOR TE TO CLEAR + CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT +#ENDIF CALL SD_DESELECT POP AF RET @@ -1830,14 +1912,14 @@ SD_SETUP: OUT (SD_PPIX),A #ENDIF ; -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) ; CSIO SETUP FOR Z180 CSIO ; LD A,2 ; DIV 80, 225KHZ @ 18MHZ CLK LD A,6 ; DIV 1280, 14KHZ @ 18MHZ CLK OUT0 (SD_CNTR),A #ENDIF ; -#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_N8) | (SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_SC)) +#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_N8) | (SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) LD A,(HB_RTCVAL) LD (SD_OPRVAL),A OUT (SD_OPRREG),A @@ -1884,6 +1966,15 @@ SD_SETUP: LD (SD_OPRVAL),A OUT (SD_OPRREG),A #ENDIF +; +#IF (SDMODE == SDMODE_FZ80) + LD A,SD_OPRDEF ; DEFAULT SELECT VALUE + LD (SD_OPRVAL),A ; PUT IN SHADOW + OUT (SD_OPRREG),A ; WRITE TO PORT + XOR A ; LOW SPEED OPERATION + LD (SD_CLKSEL),A ; DO IT + CALL SD_DESELECT ; MAKE SURE CARD(S) ARE NOT SELECTED +#ENDIF ; XOR A RET @@ -1927,11 +2018,11 @@ SD_CHKWP: ; SD_SELECT: ; ; FINISH SENDING BEFORE ASSERTING CS! -;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC)) +;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) ; CALL SD_WAITTX ;#ENDIF ; -#IF ((SDMODE == SDMODE_SC) | SDMODE == SDMODE_MT)) +#IF ((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_MT) | (SDMODE == SDMODE_FZ80) | (SDMODE == SDMODE_GM)) LD A,(IY+SD_DEV) ; GET CURRENT DEVICE OR A ; SET FLAGS LD A,(SD_OPRVAL) ; GET CURRENT OPRVAL BACK @@ -1949,21 +2040,21 @@ SD_SELECT1: OR SD_CS1 #ENDIF #ELSE -#IF (SDMODE == SDMODE_EPITX) + #IF (SDMODE == SDMODE_EPITX) LD A,(SD_OPRVAL) AND $F8 OR SD_CS0 ; WILL DO 1-7 LATER -#ELSE + #ELSE LD A,(SD_OPRVAL) ; GET CURRENT OPRVAL BACK OR SD_CS0 -#ENDIF + #ENDIF #ENDIF ; SD_SELECT2: ; ADJUST BIT(S) FOR INTERFACES USING INVERTED CS BITS -;#IF ((SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_SC)) +;#IF ((SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) #IF (SD_INVCS) - #IF ((SDMODE == SDMODE_SC) & (SD_DEVCNT > 1)) + #IF (((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_FZ80) | (SDMODE == SDMODE_GM)) & (SD_DEVCNT > 1)) XOR SD_CS0 | SD_CS1 #ELSE XOR SD_CS0 @@ -1972,7 +2063,7 @@ SD_SELECT2: LD (SD_OPRVAL),A OUT (SD_OPRREG),A ;; -;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC)) +;#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_GM)) ; CALL DLY32 ; DELAY FOR FINAL BIT ;#ENDIF ; @@ -1981,7 +2072,7 @@ SD_SELECT2: ; DESELECT CARD ; SD_DESELECT: -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) ; DON'T REMOVE CS UNTIL WE ARE DONE SENDING! CALL SD_WAITTX ; WAIT FOR TE TO CLEAR ; @@ -1994,20 +2085,24 @@ SD_DESELECT: ; TRACES. CALL DLY32 ; DELAY FOR FINAL BIT #ENDIF +; +#IF (SDMODE == SDMODE_FZ80) + ;;;CALL SD_WAITBSY +#ENDIF ; LD A,(SD_OPRVAL) -#IF (((SDMODE == SDMODE_SC) | (SDMODE_MT)) & (SD_DEVCNT > 1)) +#IF (((SDMODE == SDMODE_SC) | (SDMODE_MT) | (SDMODE == SDMODE_GM)) & (SD_DEVCNT > 1)) AND ~(SD_CS0 | SD_CS1) #ELSE -#if (SDMODE == SDMODE_EPITX) +#IF (SDMODE == SDMODE_EPITX) OR 7 ; CHAN 7 IS USED FOR DESELECTS #ELSE AND ~SD_CS0 #ENDIF #ENDIF ; ADJUST BIT(S) FOR INTERFACES USING INVERTED CS BITS -#IF ((SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_PIO) | (SDMODE == SDMODE_Z80R)) - #IF ((SDMODE == SDMODE_SC) & (SD_DEVCNT > 1)) +#IF (SD_INVCS) + #IF (((SDMODE == SDMODE_SC) | (SDMODE == SDMODE_FZ80) | (SDMODE == SDMODE_GM)) & (SD_DEVCNT > 1)) XOR SD_CS0 | SD_CS1 #ELSE XOR SD_CS0 @@ -2017,7 +2112,7 @@ SD_DESELECT: OUT (SD_OPRREG),A RET ; -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) ; ; CSIO WAIT FOR TRANSMIT READY (TX REGISTER EMPTY) ; @@ -2037,24 +2132,38 @@ SD_WAITRX: ; #ENDIF ; +#IF (SDMODE == SDMODE_FZ80) +; +; WAIT WHILE FPGA SPI INTERFACE IS BUSY SENDING OR RECEIVING +; +SD_WAITBSY: + PUSH AF +SD_WAITBSY1: + IN A,(SD_SELSTAT) + BIT 7,A + JR NZ,SD_WAITBSY1 + POP AF + RET +#ENDIF +; ; SEND ONE BYTE ; SD_PUT: ; #IF (SDMODE == SDMODE_MT) OUT (SD_WRTR),A -#ELSE +#ENDIF ; - #IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) CALL MIRROR ; MSB<-->LSB MIRROR BITS, RESULT IN C CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING OUT0 (SD_TRDR),C ; PUT BYTE IN BUFFER IN0 A,(SD_CNTR) SET 4,A ; SET TRANSMIT ENABLE OUT0 (SD_CNTR),A - #ELSE - - #IF (SDMODE == SDMODE_Z80R) +#ENDIF +; +#IF (SDMODE == SDMODE_Z80R) ; USE C - THE CALLING CODE FOR COMMAND SEND FAILS TO SAVE HL/DE ; WHILST THE OTHER PATHS DO ? LD C,A @@ -2090,8 +2199,9 @@ SD_PUT: RLA OUT (SD_IOREG),A OUT (SD_IOCLK),A - #ELSE - +#ENDIF +; +#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_N8) | (SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_DSD) | (SDMODE == SDMODE_USR) | (SDMODE == SDMODE_PIO)) #IF (SDMODE == SDMODE_UART) XOR $FF ; DI IS INVERTED ON UART #ENDIF @@ -2110,8 +2220,15 @@ SD_PUT1: DJNZ SD_PUT1 ; REPEAT FOR ALL 8 BITS LD A,(SD_OPRVAL) ; LOAD CURRENT OPR VALUE OUT (SD_OPRREG),A ; LEAVE WITH CLOCK LOW - #ENDIF - #ENDIF +#ENDIF +; +#IF (SDMODE == SDMODE_FZ80) + ;;;CALL SD_WAITBSY ; WAIT FOR PENDING ACTIVITY + OUT (SD_DATA),A ; POST THE VALUE + OUT (SD_ACTION),A ; INITIATE THE WRITE + ;;;CALL PC_SPACE ; *DEBUG* + ;;;CALL PC_GT ; *DEBUG* + ;;;CALL PRTHEXBYTE ; *DEBUG* #ENDIF RET ; DONE ; @@ -2122,8 +2239,9 @@ SD_GET: ; #IF (SDMODE == SDMODE_MT) IN A,(SD_RDTR) -#ELSE - #IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +#ENDIF +; +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING IN0 A,(SD_CNTR) ; GET CSIO STATUS SET 5,A ; START RECEIVER @@ -2132,8 +2250,9 @@ SD_GET: IN0 A,(SD_TRDR) ; GET RECEIVED BYTE CALL MIRROR ; MSB<-->LSB MIRROR BITS LD A,C ; KEEP RESULT - #ELSE - #IF (SDMODE == SDMODE_Z80R) +#ENDIF +; +#IF (SDMODE == SDMODE_Z80R) ; MUST PRESERVE HL,DE PUSH DE LD A,1 @@ -2180,46 +2299,68 @@ SD_GET: RL E LD A,E POP DE - #ELSE +#ENDIF +; +#IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_N8) | (SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_UART) | (SDMODE == SDMODE_DSD) | (SDMODE == SDMODE_USR) | (SDMODE == SDMODE_PIO)) LD B,8 ; RECEIVE 8 BITS (LOOP 8 TIMES) LD A,(SD_OPRVAL) ; LOAD CURRENT OPR VALUE SD_GET1: XOR SD_CLK ; TOGGLE CLOCK OUT (SD_OPRREG),A ; UPDATE CLOCK IN A,(SD_INPREG) ; READ THE DATA WHILE CLOCK IS ACTIVE - #IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_PIO)) + #IF ((SDMODE == SDMODE_JUHA) | (SDMODE == SDMODE_PPI) | (SDMODE == SDMODE_PIO)) RLA ; ROTATE INP:7 INTO CF - #ENDIF - #IF (SDMODE == SDMODE_N8) + #ENDIF + #IF (SDMODE == SDMODE_N8) RLA ; ROTATE INP:6 INTO CF RLA ; " - #ENDIF - #IF (SDMODE == SDMODE_UART) + #ENDIF + #IF (SDMODE == SDMODE_UART) RLA ; ROTATE INP:5 INTO CF RLA ; " RLA ; " - #ENDIF - #IF (SDMODE == SDMODE_DSD) + #ENDIF + #IF (SDMODE == SDMODE_DSD) RRA ; ROTATE INP:0 INTO CF - #ENDIF + #ENDIF RL C ; ROTATE CF INTO C:0 LD A,(SD_OPRVAL) ; BACK TO INITIAL VALUES (TOGGLE CLOCK) OUT (SD_OPRREG),A ; DO IT DJNZ SD_GET1 ; REPEAT FOR ALL 8 BITS LD A,C ; GET BYTE RECEIVED INTO A - #IF (SDMODE == SDMODE_UART) + #IF (SDMODE == SDMODE_UART) XOR $FF ; DO IS INVERTED ON UART - #ENDIF - #ENDIF #ENDIF +#ENDIF +; +#IF (SDMODE == SDMODE_FZ80) + ;;;CALL SD_WAITBSY ; WAIT FOR PENDING ACTIVITY + IN A,(SD_ACTION) ; INITIATE READ + ;;;CALL SD_WAITBSY ; WAIT FOR DONE + IN A,(SD_DATA) ; GET THE VALUE +#ENDIF + RET +; +; SET STANDARD SPEED (RESTORE SPI INTERFACE TO DEFAULTS) +; +SD_SPD_STD: +; +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) + ; SET CSIO FOR DEFAULT OPERATION + PUSH AF ; PRESERVE AF + CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING + CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT + LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK + OUT0 (SD_CNTR),A ; DO IT + POP AF ; RESTORE AF #ENDIF RET ; -; SET CSIO TO DEFAULT SPEED +; SET SLOW SPEED ; -#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) +SD_SPD_SLOW: ; -SD_CSIO_DEF: +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) ; SET CSIO FOR DEFAULT OPERATION PUSH AF ; PRESERVE AF CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING @@ -2227,9 +2368,23 @@ SD_CSIO_DEF: LD A,Z180_CNTR_DEF ; DIV 1280, 14KHZ @ 18MHZ CLK OUT0 (SD_CNTR),A ; DO IT POP AF ; RESTORE AF +#ENDIF RET ; +; SET FAST SPEED +; +SD_SPD_FAST: +; +#IF ((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) + ; SET CSIO FOR HIGH SPEED OPERATION + PUSH AF ; PRESERVE AF + CALL SD_WAITTX ; MAKE SURE WE ARE DONE SENDING + CALL DLY32 ; WAIT A BIT MORE FOR FINAL BIT + XOR A ; 0 IS HIGHEST CLOCK SPEED + OUT0 (SD_CNTR),A ; DO IT + POP AF ; RESTORE AF #ENDIF + RET ; ; ;============================================================================= @@ -2419,6 +2574,7 @@ SD_STR_TOK .TEXT " TOK=$" SD_STR_CSD .TEXT " CSD =$" SD_STR_CID .TEXT " CID =$" SD_STR_SCR .TEXT " SCR =$" +SD_STR_OCR .TEXT " OCR =$" SD_STR_SDTYPE .TEXT " SD CARD TYPE ID=$" ; SD_STR_STOK .TEXT "OK$" @@ -2470,7 +2626,7 @@ SD_DSKBUF .DW 0 ; ADR OF ACTIVE DISK BUFFER ; MSB<-->LSB MIRROR BITS IN A, RESULT IN C ; MIRROR: -#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) & SDCSIOFAST) +#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) & SDCSIOFAST) ; FASTEST BUT USES MOST CODE SPACE LD BC,MIRTAB ; 256 BYTE MIRROR TABLE ADD A,C ; ADD OFFSET @@ -2503,7 +2659,7 @@ MIRROR2: ; ; LOOKUP TABLE TO MIRROR BITS IN A BYTE ; -#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX)) & SDCSIOFAST) +#IF (((SDMODE == SDMODE_CSIO) | (SDMODE == SDMODE_MK4) | (SDMODE == SDMODE_SC) | (SDMODE == SDMODE_EPITX) | (SDMODE == SDMODE_GM)) & SDCSIOFAST) MIRTAB .DB 00H, 80H, 40H, 0C0H, 20H, 0A0H, 60H, 0E0H, 10H, 90H, 50H, 0D0H, 30H, 0B0H, 70H, 0F0H .DB 08H, 88H, 48H, 0C8H, 28H, 0A8H, 68H, 0E8H, 18H, 98H, 58H, 0D8H, 38H, 0B8H, 78H, 0F8H diff --git a/Source/HBIOS/sio.asm b/Source/HBIOS/sio.asm index 0274a66e..c7e23e01 100644 --- a/Source/HBIOS/sio.asm +++ b/Source/HBIOS/sio.asm @@ -24,13 +24,13 @@ SIO_SIO .EQU 1 SIO_RTSON .EQU $EA SIO_RTSOFF .EQU $E8 ; -#IF (INTMODE == 0) -SIO_WR1VAL .EQU $00 ; WR1 VALUE FOR NO INTS -#ELSE +#IF ((SIOINTS) & (INTMODE > 0)) SIO_WR1VAL .EQU $18 ; WR1 VALUE FOR INT ON RECEIVED CHARS +#ELSE +SIO_WR1VAL .EQU $00 ; WR1 VALUE FOR NO INTS #ENDIF ; -#IF ((INTMODE == 2) | (INTMODE == 3)) +#IF ((SIOINTS) & (INTMODE >= 2)) ; SIO0_IVT .EQU IVT(INT_SIO0) SIO1_IVT .EQU IVT(INT_SIO1) @@ -146,7 +146,7 @@ SIO_PREINIT2: ADD IY,DE ; BUMP IY TO NEXT ENTRY DJNZ SIO_PREINIT0 ; LOOP UNTIL DONE ; -#IF (INTMODE >= 1) +#IF ((SIOINTS) & (INTMODE > 0)) ; SETUP INT VECTORS AS APPROPRIATE LD A,(SIO_DEV) ; GET DEVICE COUNT OR A ; SET FLAGS @@ -223,7 +223,7 @@ SIO_INIT1: ; ; RECEIVE INTERRUPT HANDLER ; -#IF (INTMODE > 0) +#IF ((SIOINTS) & (INTMODE > 0)) ; ; IM1 ENTRY POINT ; @@ -354,17 +354,7 @@ SIO_FNTBL: ; ; ; -#IF (INTMODE == 0) -; -SIO_IN: - CALL SIO_IST ; CHAR WAITING? - JR Z,SIO_IN ; LOOP IF NOT - LD C,(IY+4) ; DATA PORT - IN E,(C) ; GET CHAR - XOR A ; SIGNAL SUCCESS - RET -; -#ELSE +#IF ((SIOINTS) & (INTMODE > 0)) ; SIO_IN: CALL SIO_IST ; SEE IF CHAR AVAILABLE @@ -411,6 +401,17 @@ SIO_IN2: HB_EI ; INTERRUPTS OK AGAIN XOR A ; SIGNAL SUCCESS RET ; AND DONE +; +#ELSE +; +SIO_IN: + CALL SIO_IST ; CHAR WAITING? + JR Z,SIO_IN ; LOOP IF NOT + LD C,(IY+4) ; DATA PORT + IN E,(C) ; GET CHAR + XOR A ; SIGNAL SUCCESS + RET +; #ENDIF ; ; @@ -425,7 +426,17 @@ SIO_OUT: ; ; ; -#IF (INTMODE == 0) +#IF ((SIOINTS) & (INTMODE > 0)) +; +SIO_IST: + LD L,(IY+7) ; GET ADDRESS + LD H,(IY+8) ; ... OF RECEIVE BUFFER + LD A,(HL) ; BUFFER UTILIZATION COUNT + OR A ; SET FLAGS + JP Z,CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING + RET +; +#ELSE ; SIO_IST: LD C,(IY+3) ; CMD PORT @@ -438,16 +449,6 @@ SIO_IST: INC A ; ASCCUM := 1 TO SIGNAL 1 CHAR WAITING RET ; DONE ; -#ELSE -; -SIO_IST: - LD L,(IY+7) ; GET ADDRESS - LD H,(IY+8) ; ... OF RECEIVE BUFFER - LD A,(HL) ; BUFFER UTILIZATION COUNT - OR A ; SET FLAGS - JP Z,CIO_IDLE ; NOT READY, RETURN VIA IDLE PROCESSING - RET -; #ENDIF ; ; @@ -853,7 +854,7 @@ SIO_INITGO: ; ; SET INTERRUPT VECTOR OFFSET WR2 ; -#IF ((INTMODE == 2) | (INTMODE == 3)) +#IF ((SIOINTS) & (INTMODE >= 2)) LD A,(IY+2) ; CHIP / CHANNEL SRL A ; SHIFT AWAY CHANNEL BIT LD L,SIO0_VEC ; ASSUME CHIP 0 @@ -893,7 +894,7 @@ SIO_INITPRT: LD B,SIO_INITLEN ; COUNT OF BYTES TO WRITE OTIR ; WRITE ALL VALUES ; -#IF (INTMODE > 0) +#IF ((SIOINTS) & (INTMODE > 0)) ; ; RESET THE RECEIVE BUFFER LD E,(IY+7) @@ -1108,17 +1109,7 @@ SIO_STR_SIO .DB "SIO$" SIO_DEV .DB 0 ; DEVICE NUM USED DURING INIT SIO_MAP .DB 0 ; CHIP PRESENCE BITMAP ; -#IF (INTMODE == 0) -; -SIO0A_RCVBUF .EQU 0 -SIO0B_RCVBUF .EQU 0 -; - #IF (SIOCNT >= 2) -SIO1A_RCVBUF .EQU 0 -SIO1B_RCVBUF .EQU 0 - #ENDIF -; -#ELSE +#IF ((SIOINTS) & (INTMODE > 0)) ; ; SIO0 CHANNEL A RECEIVE BUFFER SIO0A_RCVBUF: @@ -1152,6 +1143,16 @@ SIO1B_BUF .FILL SIO_BUFSZ,0 ; RECEIVE RING BUFFER ; #ENDIF ; +#ELSE +; +SIO0A_RCVBUF .EQU 0 +SIO0B_RCVBUF .EQU 0 +; + #IF (SIOCNT >= 2) +SIO1A_RCVBUF .EQU 0 +SIO1B_RCVBUF .EQU 0 + #ENDIF +; #ENDIF ; ; SIO PORT TABLE @@ -1191,9 +1192,9 @@ SIO0A_CFG: DEVECHO ", IO=" DEVECHO SIO0BASE DEVECHO ", CHANNEL A" - #IF (INTMODE > 0) +#IF ((SIOINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" - #ENDIF +#ENDIF DEVECHO "\n" ; SIO_CFGSIZ .EQU $ - SIO_CFG ; SIZE OF ONE CFG TABLE ENTRY @@ -1231,9 +1232,9 @@ SIO0B_CFG: DEVECHO ", IO=" DEVECHO SIO0BASE DEVECHO ", CHANNEL B" - #IF (INTMODE > 0) +#IF ((SIOINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" - #ENDIF +#ENDIF DEVECHO "\n" ; #IF (SIOCNT >= 2) @@ -1253,26 +1254,26 @@ SIO1A_CFG: .DB SIO1MODE ; MODE ; DEVECHO "SIO MODE=" -#IF (SIO1MODE == SIOMODE_STD) + #IF (SIO1MODE == SIOMODE_STD) DEVECHO "STD" -#ENDIF -#IF (SIO1MODE == SIOMODE_RC) + #ENDIF + #IF (SIO1MODE == SIOMODE_RC) DEVECHO "RC" -#ENDIF - -#IF (SIO1MODE == SIOMODE_SMB) + #ENDIF +; + #IF (SIO1MODE == SIOMODE_SMB) DEVECHO "SMB" -#ENDIF -#IF (SIO1MODE == SIOMODE_ZP) + #ENDIF + #IF (SIO1MODE == SIOMODE_ZP) DEVECHO "ZP" -#ENDIF -#IF (SIO1MODE == SIOMODE_Z80R) + #ENDIF + #IF (SIO1MODE == SIOMODE_Z80R) DEVECHO "Z80R" -#ENDIF + #ENDIF DEVECHO ", IO=" DEVECHO SIO1BASE DEVECHO ", CHANNEL A" - #IF (INTMODE > 0) + #IF ((SIOINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" #ENDIF DEVECHO "\n" @@ -1292,25 +1293,25 @@ SIO1B_CFG: .DB SIO1MODE ; MODE ; DEVECHO "SIO MODE=" -#IF (SIO1MODE == SIOMODE_STD) + #IF (SIO1MODE == SIOMODE_STD) DEVECHO "STD" -#ENDIF -#IF (SIO1MODE == SIOMODE_RC) + #ENDIF + #IF (SIO1MODE == SIOMODE_RC) DEVECHO "RC" -#ENDIF -#IF (SIO1MODE == SIOMODE_SMB) + #ENDIF + #IF (SIO1MODE == SIOMODE_SMB) DEVECHO "SMB" -#ENDIF -#IF (SIO1MODE == SIOMODE_ZP) + #ENDIF + #IF (SIO1MODE == SIOMODE_ZP) DEVECHO "ZP" -#ENDIF -#IF (SIO1MODE == SIOMODE_Z80R) + #ENDIF + #IF (SIO1MODE == SIOMODE_Z80R) DEVECHO "Z80R" -#ENDIF + #ENDIF DEVECHO ", IO=" DEVECHO SIO1BASE DEVECHO ", CHANNEL B" - #IF (INTMODE > 0) + #IF ((SIOINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" #ENDIF DEVECHO "\n" diff --git a/Source/HBIOS/sn76489.asm b/Source/HBIOS/sn76489.asm index 6f31de33..c6e8c42c 100644 --- a/Source/HBIOS/sn76489.asm +++ b/Source/HBIOS/sn76489.asm @@ -49,10 +49,6 @@ SN7_IDAT .EQU 0 SN7_TONECNT .EQU 3 ; COUNT NUMBER OF TONE CHANNELS SN7_NOISECNT .EQU 1 ; COUNT NUMBER OF NOISE CHANNELS SN7_CHCNT .EQU SN7_TONECNT + SN7_NOISECNT -CHANNEL_0_SILENT .EQU $9F -CHANNEL_1_SILENT .EQU $BF -CHANNEL_2_SILENT .EQU $DF -CHANNEL_3_SILENT .EQU $FF ; #INCLUDE "audio.inc" ; @@ -78,52 +74,71 @@ SN76489_INIT: LD A, SN76489_PORT_RIGHT CALL PRTHEXBYTE - CALL SN7_VOLUME_OFF + CALL SN7_RESET XOR A ; SIGNAL SUCCESS RET - +; ;====================================================================== -; SN76489 DRIVER - SOUND ADAPTER (SND) FUNCTIONS +; INITIALIZE DEVICE ;====================================================================== ; -SN7_RESET: - AUDTRACE(SNT_INIT) - CALL SN7_VOLUME_OFF - XOR A ; SIGNAL SUCCESS - RET - -SN7_VOLUME_OFF: - AUDTRACE(SNT_VOLOFF) - - +SN7_INIT: +; #IFDEF SBCV2004 LD A,(HB_RTCVAL) OR %00001000 ; SBC-V2-004+ CHANGE + EZ80_IO OUT (RTCIO),A ; TO HALF CLOCK SPEED #ENDIF - - LD A, CHANNEL_0_SILENT - OUT (SN76489_PORT_LEFT), A - OUT (SN76489_PORT_RIGHT), A - - LD A, CHANNEL_1_SILENT - OUT (SN76489_PORT_LEFT), A - OUT (SN76489_PORT_RIGHT), A - - LD A, CHANNEL_2_SILENT - OUT (SN76489_PORT_LEFT), A - OUT (SN76489_PORT_RIGHT), A - - LD A, CHANNEL_3_SILENT - OUT (SN76489_PORT_LEFT), A - OUT (SN76489_PORT_RIGHT), A - +; + LD HL,SN7_REG_INIT ; POINT TO REG INIT TBL + LD B,SN7_REG_CNT ; BYTES IN TABLE +SN7_INIT1 + LD A,(HL) + INC HL ; BUMP FOR NEXT TIME + EZ80_IO + OUT (SN76489_PORT_LEFT), A ; WRITE LEFT PORT + EZ80_IO + OUT (SN76489_PORT_RIGHT), A ; WRITE RIGHT PORT + DJNZ SN7_INIT1 ; LOOP TILL DONE +; #IFDEF SBCV2004 LD A,(HB_RTCVAL) AND %11110111 ; SBC-V2-004+ CHANGE TO + EZ80_IO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF - +; + RET +; +SN7_REG_INIT: + .DB $80,$00 ; TONE 1 FREQ (2 BYTES) + .DB $9F ; TONE 1 ATTENTUATION + .DB $A0,$00 ; TONE 2 FREQ (2 BYTES) + .DB $BF ; TONE 2 ATTENTUATION + .DB $C0,$00 ; TONE 3 FREQ (2 BYTES) + .DB $DF ; TONE 3 ATTENTUATION + .DB $E0 ; NOISE CONTROL + .DB $FF ; NOISE ATTENTUATION +SN7_REG_CNT .EQU $ - SN7_REG_INIT +; +;====================================================================== +; SN76489 DRIVER - SOUND ADAPTER (SND) FUNCTIONS +;====================================================================== +; +SN7_RESET: + AUDTRACE(SNT_INIT) +; + CALL SN7_INIT ; HARDWARE INIT +; + ; RESET DEFAULTS IN CASE OF AN IN-PLACE HBIOS RESTART + LD HL,0 + LD (SN7_PENDING_PERIOD),HL + LD (SN7_PENDING_DURATION),HL + XOR A + LD (SN7_PENDING_VOLUME),A +; + XOR A RET ; BIT MAPPING @@ -277,16 +292,19 @@ SN7_APPLY_VOL: ; APPLY VOLUME TO BOTH LEFT AND RIGHT CHANNELS PUSH AF LD A,(HB_RTCVAL) OR %00001000 ; SBC-V2-004+ CHANGE + EZ80_IO OUT (RTCIO),A ; TO HALF CLOCK SPEED POP AF #ENDIF - + EZ80_IO OUT (SN76489_PORT_LEFT), A + EZ80_IO OUT (SN76489_PORT_RIGHT), A #IFDEF SBCV2004 LD A,(HB_RTCVAL) AND %11110111 ; SBC-V2-004+ CHANGE TO + EZ80_IO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF @@ -322,16 +340,19 @@ SN7_APPLY_PRD: PUSH AF LD A,(HB_RTCVAL) OR %00001000 ; SBC-V2-004+ CHANGE + EZ80_IO OUT (RTCIO),A ; TO HALF CLOCK SPEED POP AF #ENDIF - + EZ80_IO OUT (SN76489_PORT_LEFT), A + EZ80_IO OUT (SN76489_PORT_RIGHT), A #IFDEF SBCV2004 LD A,(HB_RTCVAL) AND %11110111 ; SBC-V2-004+ CHANGE TO + EZ80_IO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF @@ -359,16 +380,19 @@ SN7_APPLY_PRD: PUSH AF LD A,(HB_RTCVAL) OR %00001000 ; SBC-V2-004+ CHANGE + EZ80_IO OUT (RTCIO),A ; TO HALF CLOCK SPEED POP AF #ENDIF - + EZ80_IO OUT (SN76489_PORT_LEFT), A + EZ80_IO OUT (SN76489_PORT_RIGHT), A #IFDEF SBCV2004 LD A,(HB_RTCVAL) AND %11110111 ; SBC-V2-004+ CHANGE TO + EZ80_IO OUT (RTCIO),A ; NORMAL CLOCK SPEED #ENDIF @@ -391,6 +415,9 @@ SN7_DEVICE: XOR A RET +SN7_BEEP: + JP SND_BEEP ; DEFER TO GENERIC CODE IN HBIOS + SN7_FNTBL: .DW SN7_RESET .DW SN7_VOLUME @@ -400,18 +427,16 @@ SN7_FNTBL: .DW SN7_QUERY .DW SN7_DURATION .DW SN7_DEVICE + .DW SN7_BEEP ; #IF (($ - SN7_FNTBL) != (SND_FNCNT * 2)) .ECHO "*** INVALID SND FUNCTION TABLE ***\n" !!!!! #ENDIF -SN7_PENDING_PERIOD - .DW 0 ; PENDING PERIOD (10 BITS) -SN7_PENDING_VOLUME - .DB 0 ; PENDING VOL (8 BITS -> DOWNCONVERTED TO 4 BITS AND INVERTED) -SN7_PENDING_DURATION - .DW 0 ; PENDING DURATION (16 BITS) +SN7_PENDING_PERIOD .DW 0 ; PENDING PERIOD (10 BITS) +SN7_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS -> DOWNCONVERTED TO 4 BITS AND INVERTED) +SN7_PENDING_DURATION .DW 0 ; PENDING DURATION (16 BITS) STR_MESSAGELT .DB "\r\nSN76489: LEFT IO=0x$" STR_MESSAGERT .DB ", RIGHT IO=0x$" diff --git a/Source/HBIOS/spk.asm b/Source/HBIOS/spk.asm index 302a7990..3ceb148c 100644 --- a/Source/HBIOS/spk.asm +++ b/Source/HBIOS/spk.asm @@ -13,14 +13,15 @@ ; DRIVER FUNCTION TABLE AND INSTANCE DATA ; SP_FNTBL: - .DW SP_STUB ; SP_RESET - .DW SP_STUB ; SP_VOLUME + .DW SP_RESET + .DW SP_VOLUME .DW SP_PERIOD .DW SP_NOTE .DW SP_PLAY .DW SP_QUERY .DW SP_DURATION .DW SP_DEVICE + .DW SP_BEEP ; #IF (($ - SP_FNTBL) != (SND_FNCNT * 2)) .ECHO "*** INVALID SND FUNCTION TABLE ***\n" @@ -37,9 +38,10 @@ SP_RTCIOMSK .EQU 00000100B ; FOR OTHER DRIVERS, THE PERIOD VALUE FOR THE TONE IS STORED AT PENDING_PERIOD ; FOR THE SPK DRIVER THE ADDRESS IN THE TONE TABLE IS STORED IN PENDING_PERIOD ; -SP_PENDING_PERIOD .DW SP_NOTE_C8 ; PENDING PERIOD (16 BITS) -SP_PENDING_VOLUME .DB $FF ; PENDING VOL (8 BITS) +SP_PENDING_PERIOD .DW 0 ; PENDING PERIOD (16 BITS) +SP_PENDING_VOLUME .DB 0 ; PENDING VOL (8 BITS) SP_PENDING_DURATION .DW 0 ; PENDING DURATION (16 BITS) +SP_TBLRDY .DB 0 ; IF != 0, NOTE TABLE IS READY ; DEVECHO "SPK: IO=" DEVECHO RTCIO @@ -59,8 +61,10 @@ SP_INIT: PRTS("SPK: IO=0x$") LD A,RTCIO CALL PRTHEXBYTE +; CALL SP_SETTBL ; SETUP TONE TABLE - CALL SP_PLAY ; PLAY DEFAULT NOTE + CALL SP_RESET ; RESET PARAMETERS +; XOR A RET ; @@ -68,17 +72,24 @@ SP_INIT: ; SOUND DRIVER FUNCTION - RESET ;====================================================================== ; -;SP_RESET: -; XOR A ; SUCCESSFULL RESET -; RET +SP_RESET: + ; RESET DEFAULTS IN CASE OF AN IN-PLACE HBIOS RESTART + LD HL,0 + LD (SP_PENDING_PERIOD),HL ; SET TONE PERIOD TO ZERO + LD (SP_PENDING_DURATION),HL; SET DURATION TO ZERO + XOR A ; SIGNAL SUCCESS + LD (SP_PENDING_VOLUME),A ; SET VOLUME TO ZERO +; + XOR A ; SUCCESSFULL RESET + RET ; ;====================================================================== ; SOUND DRIVER FUNCTION - VOLUME ;====================================================================== ; -;SP_VOLUME: -; XOR A ; SIGNAL SUCCESS -; RET +SP_VOLUME: + XOR A ; SIGNAL SUCCESS + RET ; ;====================================================================== ; SOUND DRIVER FUNCTION - PERIOD @@ -86,7 +97,6 @@ SP_INIT: ; SP_PERIOD: LD (SP_PENDING_PERIOD), HL ; SAVE AND RETURN SUCCESSFUL -SP_STUB: XOR A RET ; @@ -164,6 +174,13 @@ SP_QUERY_DEV: ;====================================================================== ; SP_SETTBL: + ; IN CASE OF HBIOS RESTART IN PLACE, WE CHECK TO SEE IF THE + ; NOT TABLE IS ALREADY INITIALIZED (READY). IF SO, WE DON'T + ; WANT TO DO IT AGAIN. + LD A,(SP_TBLRDY) + OR A + RET NZ +; LD BC,(CB_CPUMHZ) ; GET MHZ CPU SPEED (IN C). ; SP_SETTBL3: @@ -202,6 +219,10 @@ SP_SETBL4: INC HL ; TO NEXT ; DJNZ SP_SETTBL2 ; NEXT NOTE +; + OR $FF ; SIGNAL TABLE READY + LD (SP_TBLRDY),A ; SAVE IT +; RET ; ;====================================================================== @@ -340,16 +361,40 @@ SP_DEVICE: RET ; ;====================================================================== +; SOUND DRIVER FUNCTION - BEEP +;====================================================================== +; +SP_BEEP: + LD HL,SP_NOTE_B5 ; B5 (CLOSE TO 1 KHZ) + LD (SP_PENDING_PERIOD),HL + ;LD A,$FF + ;LD (SP_PENDING_VOLUME),A + ;XOR A + ;LD (SP_PENDING_DURATION),A +; + CALL SP_PLAY ; PLAY DEFAULT NOTE + CALL SP_RESET ; RESET DRIVER +; + XOR A + RET +; +;====================================================================== ; ; STANDARD ONE SECOND TONE TABLES AT 1MHZ. ; FOR SP_BEEPER ROUTINE, FIRST WORD LOADED INTO DE, SECOND INTO HL +; THE PARAMETER TO SP_TONESET IS (FREQ * 100) +; DE: FREQUENCY IN HZ +; HL: T-STATES PER HALF-CYCL E / 4 AT 1 MHZ CPU SPEED +; EX. MIDDLE C IS 261.63 HZ, 523.26 HALF CYCLES PER SECOND +; 1,000,000 / 523.26 / 4 = 477 +; OR ALTERNATIVELY 12,500,000 / 26163 = 477 ; ;====================================================================== ; #DEFINE SP_TONESET(SP_FREQ) .DW SP_FREQ/100, 12500000/SP_FREQ ; SP_TUNTBL: - SP_TONESET(1635) ; C0 + SP_TONESET(1635) ; C0 ; DE=16, HL=7645 SP_TONESET(1732) ; C SP_TONESET(1835) ; D0 SP_TONESET(1945) ; D @@ -397,7 +442,7 @@ SP_TUNTBL: SP_TONESET(22000) ; A3 SP_TONESET(23308) ; A SP_TONESET(24694) ; B3 - SP_TONESET(26163) ; C4 + SP_TONESET(26163) ; C4 ; DE=261, HL=477 SP_TONESET(27718) ; C SP_TONESET(29366) ; D4 SP_TONESET(31113) ; D @@ -420,6 +465,7 @@ SP_TUNTBL: SP_TONESET(83061) ; G SP_TONESET(88000) ; A5 SP_TONESET(93233) ; A +SP_NOTE_B5: SP_TONESET(98777) ; B5 SP_TONESET(104650) ; C6 SP_TONESET(110873) ; C @@ -445,7 +491,6 @@ SP_TUNTBL: SP_TONESET(352000) ; A7 SP_TONESET(372931) ; A SP_TONESET(395107) ; B7 -SP_NOTE_C8: SP_TONESET(418601) ; C8 SP_TONESET(443492) ; C SP_TONESET(469863) ; D8 @@ -457,7 +502,7 @@ SP_NOTE_C8: SP_TONESET(664488) ; G SP_TONESET(704000) ; A8 SP_TONESET(745862) ; A - SP_TONESET(790213) ; B8 + SP_TONESET(790213) ; B8 ; DE=7902, HL=15 ; SP_NOTCNT .EQU ($-SP_TUNTBL) / 4 ; diff --git a/Source/HBIOS/sser.asm b/Source/HBIOS/sser.asm new file mode 100644 index 00000000..726b83e7 --- /dev/null +++ b/Source/HBIOS/sser.asm @@ -0,0 +1,116 @@ +; +;================================================================================================== +; SIMPLE SERIAL DRIVER +;================================================================================================== +; +; TODO: +; + DEVECHO "SSER: IO=" + DEVECHO SSERSTATUS + DEVECHO "\n" +; +; +; +SSER_PREINIT: +; +; ADD OURSELVES TO CIO DISPATCH TABLE +; + LD D,0 ; PHYSICAL UNIT IS ZERO + LD E,CIODEV_SSER ; DEVICE TYPE + LD BC,SSER_FNTBL ; BC := FUNCTION TABLE ADDRESS + CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED +; + XOR A + RET +; +; +; +SSER_INIT: + CALL NEWLINE + PRTS("SSER:$") + PRTS(" IO=0x$") ; FORMATTING + LD A,SSERSTATUS + CALL PRTHEXBYTE +; + XOR A ; SIGNAL SUCCESS + RET +; +; DRIVER FUNCTION TABLE +; +SSER_FNTBL: + .DW SSER_IN + .DW SSER_OUT + .DW SSER_IST + .DW SSER_OST + .DW SSER_INITDEV + .DW SSER_QUERY + .DW SSER_DEVICE +#IF (($ - SSER_FNTBL) != (CIO_FNCNT * 2)) + .ECHO "*** INVALID SSER FUNCTION TABLE ***\n" +#ENDIF +; +; +; +SSER_IN: + CALL SSER_IST ; CHECK FOR CHAR PENDING + JR Z,SSER_IN ; WAIT FOR IT IF NECESSARY + IN A,(SSERDATA) ; READ THE CHAR + LD E,A + RET +; +; +; +SSER_IST: + IN A,(SSERSTATUS) ; READ LINE STATUS REGISTER +#IF (SSERIINV) + CPL +#ENDIF + AND SSERIRDY ; ISOLATE DATA READY + JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING + OR $FF ; SET A=$FF TO SIGNAL READY + RET ; RETURN +; +; +; +SSER_OUT: + CALL SSER_OST ; CHECK FOR OUTPUT READY + JR Z,SSER_OUT ; WAIT IF NECESSARY + LD A,E ; RECOVER THE CHAR TO WRITE + OUT (SSERDATA),A ; WRITE THE CHAR + RET +; +; +; +SSER_OST: + IN A,(SSERSTATUS) ; READ LINE STATUS REGISTER +#IF (SSEROINV) + CPL +#ENDIF + AND SSERORDY ; ISOLATE OUTPUT RDY + JP Z,CIO_IDLE ; RETURN VIA IDLE PROCESSING + OR $FF ; SET A=$FF TO SIGNAL READY + RET ; RETURN +; +; +; +SSER_INITDEV: + SYSCHKERR(ERR_NOTIMPL) + RET +; +; +; +SSER_QUERY: + LD DE,SSERCFG + XOR A + RET +; +; +; +SSER_DEVICE: + LD D,CIODEV_SSER ; D := DEVICE TYPE + LD E,0 ; E := DEVICE NUM, ALWAYS 0 + LD C,$00 ; C := DEVICE TYPE, 0x00 IS RS-232 + LD H,0 ; H := 0, DRIVER HAS NO MODES + LD L,SSERSTATUS ; L := BASE I/O ADDRESS + XOR A ; SIGNAL SUCCESS + RET diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 6ee025ce..a582f19c 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -21,9 +21,12 @@ ; 17. DUO Andrew Lynch's Duodyne Computer ; 18. HEATH Les Bird's Heath Z80 Board ; 19. EPITX Alan Cox' Mini-ITX System -; 20. MON Jacques Pelletier's Monsputer -; 21. STDZ180 Genesis Z180 System +; 20. MON Jacques Pelletier's Monsputer +; 21. GMZ180 Doug Jacksons' Genesis Z180 System ; 22. NABU NABU w/ Les Bird's RomWBW Option Board +; 23. FZ80 S100 Computers FPGA Z80 +; 24. RCZ80 RCBus eZ80 +; ; ; INCLUDE BUILD VERSION ; @@ -63,6 +66,7 @@ CPU_NONE .EQU 0 ; NO CPU TYPE DEFINED CPU_Z80 .EQU 1 ; Z80 FAMILY CPU_Z180 .EQU 2 ; Z180 FAMILY CPU_Z280 .EQU 3 ; Z280 FAMILY +CPU_EZ80 .EQU 4 ; eZ280 FAMILY ; ; BIOS MODE ; @@ -70,6 +74,12 @@ BIOS_NONE .EQU 0 ; NO BIOS TYPE DEFINED BIOS_WBW .EQU 1 ; ROMWBW HBIOS BIOS_UNA .EQU 2 ; UNA UBIOS ; +; HBIOS BOOT MODES +; +BM_ROMBOOT .EQU 1 ; ROM BOOT +BM_APPBOOT .EQU 2 ; APPLICATION BOOT +BM_IMGBOOT .EQU 3 ; IMAGE BOOT (DEPRECATED) +; ; MEMORY MANAGERS ; MM_NONE .EQU 0 @@ -162,6 +172,21 @@ LEDMODE_NABU .EQU 4 DSKYMODE_NONE .EQU 0 DSKYMODE_V1 .EQU 1 DSKYMODE_NG .EQU 2 +DSKYMODE_GM7303 .EQU 3 +; +; DSKY MESSAGE IDS +; +DSKY_MSG_LDR_SEL .EQU 0 +DSKY_MSG_LDR_BOOT .EQU 1 +DSKY_MSG_LDR_LOAD .EQU 2 +DSKY_MSG_LDR_GO .EQU 3 +DSKY_MSG_MON_RDY .EQU 4 +DSKY_MSG_MON_BOOT .EQU 5 +; +; DSKY EVENT IDS +; +DSKY_EVT_CPUSPD .EQU 0 +DSKY_EVT_DSKACT .EQU 1 ; ; FD MODE SELECTIONS ; @@ -186,6 +211,7 @@ IDEMODE_DIO .EQU 1 ; DISKIO V1 IDEMODE_DIDE .EQU 2 ; DUAL IDE IDEMODE_MK4 .EQU 3 ; MARK IV ONBOARD IDE (8 BIT ONLY) IDEMODE_RC .EQU 4 ; RCBUS CF MODULE (8 BIT ONLY) +IDEMODE_GIDE .EQU 5 ; GENESIS MODULES STD BUS IDE CONTROLLER ; ; PPIDE MODE SELECTIONS ; @@ -214,6 +240,8 @@ SDMODE_USR .EQU 10 ; USER DEFINED (in sd.asm) (NOT COMPLETE) SDMODE_PIO .EQU 11 ; Z80 PIO bitbang SDMODE_Z80R .EQU 12 ; Z80 Retro SDMODE_EPITX .EQU 13 ; Mini ITX Z180 +SDMODE_FZ80 .EQU 14 ; S100 FPGA Z80 +SDMODE_GM .EQU 15 ; Genesis SD Driver ; ; AY SOUND CHIP MODE SELECTIONS ; @@ -235,19 +263,24 @@ SNMODE_RC .EQU 1 ; RCBUS SOUND MODULE SNMODE_VGM .EQU 2 ; VGM ECB BOARD SNMODE_DUO .EQU 3 ; DUODYNE MEDIA-IO BOARD ; +; SN SOUND MODULE CHANNEL SELECTION +; +SNCHAN_BOTH .EQU 0 ; BOTH LEFT & RIGHT CHANNELS GET SAME OUTPUT +SNCHAN_LEFT .EQU 1 ; LEFT CHANNEL ONLY +SNCHAN_RIGHT .EQU 2 ; RIGHT CHANNEL ONLY +; ; TMS VIDEO MODE SELECTIONS ; TMSMODE_NONE .EQU 0 TMSMODE_SCG .EQU 1 ; SCG ECB BOARD TMSMODE_N8 .EQU 2 ; N8 BUILT-IN VIDEO -TMSMODE_MSX .EQU 3 ; MSX PORT MAPPING -TMSMODE_MSX9958 .EQU 4 ; MSX PORTS, V9958 CHIP -TMSMODE_MSXKBD .EQU 5 ; MSX PORTS + PS2 KEYBOARD +TMSMODE_MSX .EQU 3 ; STD MSX PORTS +TMSMODE_MSXKBD .EQU 4 ; STD MSX PORTS + PS2 KEYBOARD +TMSMODE_MSXMKY .EQU 5 ; STD MSX PORTS + MSX KEYBAORD TMSMODE_MBC .EQU 6 ; MBC V9938/58 VIDEO BOARD TMSMODE_COLECO .EQU 7 ; COLECOVISION PORT MAPPING TMSMODE_DUO .EQU 8 ; DUODYNE PORT MAPPING -TMSMODE_NABU40 .EQU 9 ; NABU V9918 + NABU KBD -TMSMODE_NABU80 .EQU 10 ; NABU V9958 + NABU KBD +TMSMODE_NABU .EQU 9 ; NABU ; ; CVDU VIDEO MODE SELECTIONS ; @@ -272,6 +305,7 @@ GDCMODE_RPH .EQU 2 ; RPH GDC LPTMODE_NONE .EQU 0 ; NONE LPTMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP) LPTMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE +LPTMODE_S100 .EQU 3 ; S100 Z80 FPGA BUILT-IN PRINTER PORT ; ; PPA DRIVER MODE SELECTIONS ; @@ -313,6 +347,7 @@ DMAMODE_VDG .EQU 7 ; VELESOFT DATAGEAR KBDMODE_NONE .EQU 0 KBDMODE_PS2 .EQU 1 ; PS/2 KEYBOARD CONTROLLER KBDMODE_VRC .EQU 2 ; VGARC KEYBOARD CONTROLLER +KBDMODE_FV .EQU 3 ; FPGA VGA KEYBOARD CONTROLLER ; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; @@ -482,7 +517,9 @@ TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL AUTO-ENABLE IF A VDA IS ENABLE ; KBDENABLE .EQU FALSE ; PS/2 KEYBOARD DRIVER PPKENABLE .EQU FALSE ; PPK KEYBOARD DRIVER +MKYENABLE .EQU FALSE ; MSX KEYBOARD DRIVER NABUKBENABLE .EQU FALSE ; NABU KEYBOARD DRIVER +FVKBDENABLE .EQU FALSE ; FPGA KEYBOARD DRIVER ; ; VIDEO MODES ; @@ -535,6 +572,12 @@ SCSI_CMD_RDCAP .EQU $25 SCSI_CMD_READ10 .EQU $28 SCSI_CMD_WRITE10 .EQU $2A ; +; EZ80 BUS MODES +; +EZ80WSMD_CALC .EQU 0 +EZ80WSMD_CYCLES .EQU 1 +EZ80WSMD_WAIT .EQU 2 +; #INCLUDE "build.inc" ; INCLUDE USER CONFIG, ADD VARIANT, TIMESTAMP, & ROMSIZE ; ; INCLUDE Z180 REGISTER DEFINITIONS @@ -596,6 +639,7 @@ TM_TMS .EQU 2 TM_SIMH .EQU 3 TM_Z180 .EQU 4 TM_Z280 .EQU 5 +TM_EZ80 .EQU 6 ; SYSECHO "SYSTEM TIMER:" SYSTIM .EQU TM_NONE @@ -634,6 +678,13 @@ SYSTIM .SET TM_Z280 SYSECHO " Z280" #ENDIF #ENDIF +; + #IF (CPUFAM == CPU_EZ80) + #IF (EZ80TIMER == EZ80TMR_INT) +SYSTIM .SET TM_EZ80 + SYSECHO " EZ80" + #ENDIF + #ENDIF ; #IF SYSTIM == TM_NONE SYSECHO " NONE" @@ -856,7 +907,7 @@ APP_BNKS .SET 0 ;;;BID_ROMDN .EQU BID_ROMD0 + ROMD_BNKS - 1 ; LAST ROM DRIVE BANK ;;;BID_APPN .EQU BID_APP0 + APP_BNKS - 1 ; LAST APP BANK ; -#IF TRUE +#IFDEF SYSINFO .ECHO "------------- CAPACITY -----------------\n" .ECHO "ROMBANKS: " \ .ECHO ROMBANKS \ .ECHO "\n" .ECHO "RAMBANKS: " \ .ECHO RAMBANKS \ .ECHO "\n" @@ -887,187 +938,118 @@ APP_BNKS .SET 0 .ECHO "----------------------------------------\n" #ENDIF ; -; MEMORY LAYOUT +; --------------------------- +; Memory and ROM Bank Layouts +; --------------------------- +; +#INCLUDE "layout.inc" +; ; -SYS_SIZ .EQU $3000 ; COMBINED SIZE OF SYSTEM AREA (OS + HBIOS PROXY) -HBBUF_SIZ .EQU 1024 ; INVARIANT HBIOS PHYSICAL DISK BUFFER, 1K -HBX_SIZ .EQU $200 ; HBIOS PROXY SIZE (SUBJECT TO CHANGE) -CPM_SIZ .EQU SYS_SIZ - HBX_SIZ ; NET SIZE OF ALL OS COMPONENTS (EXCLUDING HBIOS PROXY) -CCP_SIZ .EQU $800 ; INVARIANT SIZE OF CCP -BDOS_SIZ .EQU $E00 ; INVARIANT SIZE OF BDOS -CBIOS_SIZ .EQU CPM_SIZ - CCP_SIZ - BDOS_SIZ ; CBIOS IS THE REMAINDER - -MEMTOP .EQU $10000 ; INVARIANT TOP OF Z80 ADDRESSABLE MEMORY -BNKTOP .EQU $8000 ; BANK MEMORY BARRIER - -HBX_IMG .EQU $200 ; LOC OF HBX IMAGE IN HBIOS IMAGE BANK - -HBBUF_END .EQU BNKTOP ; END OF PHYSICAL DISK BUFFER IN HBIOS -HBBUF_LOC .EQU HBBUF_END - HBBUF_SIZ ; START OF PHYSICAL DISK BUFFER -HBX_END .EQU MEMTOP ; END OF HBIOS PROXY -HBX_LOC .EQU HBX_END - HBX_SIZ ; START OF HBIOS PROXY -CPM_END .EQU HBX_LOC ; END OF CPM COMPONENTS (INCLUDING CBIOS) -CPM_LOC .EQU CPM_END - CPM_SIZ ; START OF CPM COMPONENTS -CBIOS_END .EQU HBX_LOC ; END OF CBIOS -CBIOS_LOC .EQU CBIOS_END - CBIOS_SIZ ; START OF CBIOS - -CPM_ENT .EQU CBIOS_LOC ; CPM ENTRY POINT (IN CBIOS) - -CPM_IMGSIZ .EQU $3000 - -; ROM BANK 1 - -LDR_LOC .EQU $0000 -LDR_SIZ .EQU $1000 -LDR_END .EQU LDR_LOC +LDR_SIZ -LDR_IMGLOC .EQU $0000 - -MON_LOC .EQU $EE00 ; LOCATION OF MONITOR FOR RUNNING SYSTEM -MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE -MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR -MON_IMGLOC .EQU LDR_IMGLOC + LDR_SIZ - -ZSYS_IMGLOC .EQU MON_IMGLOC + MON_SIZ - -CPM_IMGLOC .EQU ZSYS_IMGLOC + CPM_IMGSIZ - -; ROM BANK 2 - -FTH_LOC .EQU $0200 ; CAMEL FORTH -FTH_SIZ .EQU $1700 -FTH_END .EQU FTH_LOC + FTH_SIZ -FTH_IMGLOC .EQU $0000 - -BAS_LOC .EQU $0200 ; NASCOM BASIC -BAS_SIZ .EQU $2000 -BAS_END .EQU BAS_LOC + BAS_SIZ -BAS_IMGLOC .EQU FTH_IMGLOC + FTH_SIZ - -TBC_LOC .EQU $0A00 ; TASTYBASIC -TBC_SIZ .EQU $0A00 -TBC_END .EQU TBC_LOC + TBC_SIZ -TBC_IMGLOC .EQU BAS_IMGLOC + BAS_SIZ - -GAM_LOC .EQU $0200 ; GAME 2048 -GAM_SIZ .EQU $0900 -GAM_END .EQU GAM_LOC + GAM_SIZ -GAM_IMGLOC .EQU TBC_IMGLOC + TBC_SIZ - -EGG_LOC .EQU $F000 ; EASTER EGG -EGG_SIZ .EQU $0200 -EGG_END .EQU EGG_LOC + EGG_SIZ -EGG_IMGLOC .EQU GAM_IMGLOC + GAM_SIZ - -NET_LOC .EQU $0100 ; NETWORK BOOT -NET_SIZ .EQU $1000 -NET_END .EQU NET_LOC + NET_SIZ -NET_IMGLOC .EQU EGG_IMGLOC + EGG_SIZ - -UPD_LOC .EQU $0200 ; ROM UPDATER -UPD_SIZ .EQU $0D00 -UPD_END .EQU UPD_LOC + UPD_SIZ -UPD_IMGLOC .EQU NET_IMGLOC + NET_SIZ - -USR_LOC .EQU $0200 ; USER -USR_SIZ .EQU BNKTOP - UPD_IMGLOC - UPD_SIZ -USR_END .EQU USR_LOC + USR_SIZ -USR_IMGLOC .EQU UPD_IMGLOC + UPD_SIZ - MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY) MON_SERIAL .EQU MON_LOC + (1 * 3) ; MONITOR ENTRY (SERIAL PORT) ; ; INTERRUPT MODE 2 SLOT ASSIGNMENTS ; -#IF (((CPUFAM == CPU_Z180) | (CPUFAM == CPU_Z280)) & (INTMODE > 0)) - -; NOTE THAT Z180 PROCESSES ALL INTERNAL INTERRUPTS JUST LIKE -; IM2 EVEN WHEN CHIP IS IN IM1 MODE. SO WE INCLUDE THE IM2 -; INTERRUPT ASSIGNMENTS FOR IM1 BELOW. - -; Z180-BASED SYSTEMS -INT_INT1 .EQU 0 ; Z180 INT 1 -INT_INT2 .EQU 1 ; Z180 INT 2 -INT_TIM0 .EQU 2 ; Z180 TIMER 0 -INT_TIM1 .EQU 3 ; Z180 TIMER 1 -INT_DMA0 .EQU 4 ; Z180 DMA 0 -INT_DMA1 .EQU 5 ; Z180 DMA 1 -INT_CSIO .EQU 6 ; Z180 CSIO -INT_SER0 .EQU 7 ; Z180 SERIAL 0 -INT_SER1 .EQU 8 ; Z180 SERIAL 0 -INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A -INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B -INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A -INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B -INT_SIO0 .EQU 13 ; ZILOG SIO 0, CHANNEL A & B -INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B - -#ENDIF - #IF ((CPUFAM == CPU_Z80) & (INTMODE == 2)) #IF (PLATFORM == PLT_MBC) ; ; MBC Z80 INTERRUPTS ; -;INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A -;INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B -;INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C -;INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D INT_UART0 .EQU 4 ; UART 0 INT_UART1 .EQU 5 ; UART 1 -INT_INT6 .EQU 6 ; -INT_INT7 .EQU 7 ; INT_SIO0 .EQU 8 ; ZILOG SIO 0, CHANNEL A & B INT_SIO1 .EQU 9 ; ZILOG SIO 1, CHANNEL A & B +INT_PIO0A .EQU 10 ; ZILOG PIO 0, CHANNEL A +INT_PIO0B .EQU 11 ; ZILOG PIO 0, CHANNEL B INT_CTC0A .EQU 12 ; ZILOG CTC 0, CHANNEL A INT_CTC0B .EQU 13 ; ZILOG CTC 0, CHANNEL B INT_CTC0C .EQU 14 ; ZILOG CTC 0, CHANNEL C INT_CTC0D .EQU 15 ; ZILOG CTC 0, CHANNEL D -;INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A -;INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B -;INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A -;INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B - #ENDIF #IF (PLATFORM == PLT_DUO) ; ; DUO Z80 IM2 INTERRUPTS ; -INT_UART0 .EQU 7 ; UART 0 -INT_UART1 .EQU 6 ; UART 1 ????? +INT_UART0 .EQU 4 ; UART 0 +INT_UART1 .EQU 5 ; UART 1 +INT_SIO0 .EQU 8 ; ZILOG SIO 0, CHANNEL A & B +INT_SIO1 .EQU 9 ; ZILOG SIO 1, CHANNEL A & B +INT_PIO0A .EQU 10 ; ZILOG PIO 0, CHANNEL A +INT_PIO0B .EQU 11 ; ZILOG PIO 0, CHANNEL B +INT_CTC0A .EQU 12 ; ZILOG CTC 0, CHANNEL A +INT_CTC0B .EQU 13 ; ZILOG CTC 0, CHANNEL B +INT_CTC0C .EQU 14 ; ZILOG CTC 0, CHANNEL C +INT_CTC0D .EQU 15 ; ZILOG CTC 0, CHANNEL D + #ENDIF + + #IF (PLATFORM == PLT_NABU) +; +; NABU Z80 IM2 INTERRUPTS +; +INT_HCCARCV .EQU 0 ; CABLE ADAPTER RECEIVE +INT_HCCASND .EQU 1 ; CABLE ADAPTER SEND +INT_NABUKB .EQU 2 ; KEYBOARD RECEIVE +INT_VDP .EQU 3 ; VDP VERTICAL RETRACE +INT_OPTCRD0 .EQU 4 ; OPTION CARD 0 +INT_OPTCRD1 .EQU 5 ; OPTION CARD 1 +INT_OPTCRD2 .EQU 6 ; OPTION CARD 2 +INT_OPTCRD3 .EQU 7 ; OPTION CARD 3 + #ENDIF + + #IF ((PLATFORM != PLT_MBC) & (PLATFORM != PLT_DUO) & (PLATFORM != PLT_NABU)) +; +; GENERIC Z80 M2 INTERRUPTS +; INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C INT_CTC0D .EQU 3 ; ZILOG CTC 0, CHANNEL D -INT_SIO0 .EQU 6 ; ZILOG SIO 0, CHANNEL A & B +INT_UART0 .EQU 4 ; UART 0 +INT_UART1 .EQU 5 ; UART 1 +INT_SIO0 .EQU 7 ; ZILOG SIO 0, CHANNEL A & B INT_SIO1 .EQU 8 ; ZILOG SIO 1, CHANNEL A & B INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B - #ENDIF - #IF (PLATFORM == PLT_NABU) +#ENDIF + +#IF ((CPUFAM == CPU_Z180) & (INTMODE > 0)) ; -; NABU Z80 IM2 INTERRUPTS +; Z180-BASED SYSTEMS ; -INT_HCAARCV .EQU 0 ; UART 0 -INT_HCAASND .EQU 1 ; UART 1 ????? -INT_NABUKB .EQU 2 ; ZILOG CTC 0, CHANNEL A -INT_VDP .EQU 3 ; ZILOG CTC 0, CHANNEL B -INT_OPTCRD0 .EQU 4 ; ZILOG CTC 0, CHANNEL C -INT_OPTCRD1 .EQU 5 ; ZILOG CTC 0, CHANNEL D -INT_OPTCRD2 .EQU 6 ; ZILOG SIO 0, CHANNEL A & B -INT_OPTCRD3 .EQU 7 ; ZILOG SIO 1, CHANNEL A & B - - #ENDIF - - #IF ((PLATFORM != PLT_MBC) & (PLATFORM != PLT_DUO) & (PLATFORM != PLT_NABU)) - -; GENERIC Z80 M2 INTERRUPTS +; NOTE THAT Z180 PROCESSES ALL INTERNAL INTERRUPTS JUST LIKE +; IM2 EVEN WHEN CHIP IS IN IM1 MODE. SO WE INCLUDE THE IM2 +; INTERRUPT ASSIGNMENTS FOR IM1 BELOW. +; +INT_INT1 .EQU 0 ; Z180 INT 1 +INT_INT2 .EQU 1 ; Z180 INT 2 +INT_TIM0 .EQU 2 ; Z180 TIMER 0 +INT_TIM1 .EQU 3 ; Z180 TIMER 1 +INT_DMA0 .EQU 4 ; Z180 DMA 0 +INT_DMA1 .EQU 5 ; Z180 DMA 1 +INT_CSIO .EQU 6 ; Z180 CSIO +INT_SER0 .EQU 7 ; Z180 SERIAL 0 +INT_SER1 .EQU 8 ; Z180 SERIAL 0 +INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A +INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B +INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A +INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B +INT_SIO0 .EQU 13 ; ZILOG SIO 0, CHANNEL A & B +INT_SIO1 .EQU 14 ; ZILOG SIO 1, CHANNEL A & B +#ENDIF +#IF ((CPUFAM == CPU_Z280) & (INTMODE >= 2)) +; +; Z280-BASED SYSTEMS +; +; FOR Z280 MODE 3, THESE APPLY TO THE INTA SIGNAL +; THESE ARE IDENTICAL TO THE GENERIC Z80 ASSIGNMENTS +; INT_CTC0A .EQU 0 ; ZILOG CTC 0, CHANNEL A INT_CTC0B .EQU 1 ; ZILOG CTC 0, CHANNEL B INT_CTC0C .EQU 2 ; ZILOG CTC 0, CHANNEL C @@ -1080,11 +1062,9 @@ INT_PIO0A .EQU 9 ; ZILOG PIO 0, CHANNEL A INT_PIO0B .EQU 10 ; ZILOG PIO 0, CHANNEL B INT_PIO1A .EQU 11 ; ZILOG PIO 1, CHANNEL A INT_PIO1B .EQU 12 ; ZILOG PIO 1, CHANNEL B - - #ENDIF - #ENDIF + #DEFINE IVT(INTX) HB_IVT+(INTX * 4)+1 #DEFINE VEC(INTX) INTX*2 diff --git a/Source/HBIOS/syq.asm b/Source/HBIOS/syq.asm index a913ddf7..c107e4ea 100644 --- a/Source/HBIOS/syq.asm +++ b/Source/HBIOS/syq.asm @@ -417,11 +417,11 @@ SYQ_IO: LD (SYQ_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS LD A,SYQ_LBA ; LBA OFFSET IN CONFIG CALL LDHLIYA ; POINT TO LBA DWORD -#IF (DSKYENABLE) - #IF (DSKYDSKACT) +;;;#IF (DSKYENABLE) +;;; #IF (DSKYDSKACT) CALL HB_DSKACT ; SHOW ACTIVITY - #ENDIF -#ENDIF +;;; #ENDIF +;;;#ENDIF CALL LD32 ; SET DE:HL TO LBA ; CALL SYQ_CMDSETUP ; SETUP ATA COMMAND BUF diff --git a/Source/HBIOS/term.asm b/Source/HBIOS/term.asm index 1325cff2..6f193013 100644 --- a/Source/HBIOS/term.asm +++ b/Source/HBIOS/term.asm @@ -76,7 +76,8 @@ TERM_ATTACH: PUSH HL ; COPY VDA INSTANCE DATA PTR POP DE ; ... TO DE CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED - LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + ;;;LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE + CALL CIO_SETCRT ; SET OURSELVES AS THE CRT DEVICE ; ; INCREMENT DEVICE COUNT LD HL,TERM_DEVCNT ; POINT TO DEVICE COUNT diff --git a/Source/HBIOS/tms.asm b/Source/HBIOS/tms.asm index 7b0d7815..e8f57b37 100644 --- a/Source/HBIOS/tms.asm +++ b/Source/HBIOS/tms.asm @@ -1,5 +1,5 @@ ;====================================================================== -; TM9918 AND V9958 VDU DRIVER +; TMS9918, V9938/58 VDU DRIVER ; ; WRITTEN BY: DOUGLAS GOODALL ; UPDATED BY: WAYNE WARTHEN -- 4/7/2013 @@ -43,32 +43,21 @@ TMSCTRL1: .EQU 1 ; CONTROL BITS TMSINTEN: .EQU 5 ; INTERRUPT ENABLE BIT ; - DEVECHO "TMS: MODE=" -; -#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958)) -TMS_DATREG .EQU $98 ; READ/WRITE DATA -TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL +TMSKBD_NONE .EQU 0 +TMSKBD_KBD .EQU 1 +TMSKBD_PPK .EQU 2 +TMSKBD_MKY .EQU 3 +TMSKBD_NABU .EQU 4 ; - #IF (TMSMODE == TMSMODE_MSX) - DEVECHO "MSX" - #ENDIF - #IF (TMSMODE == TMSMODE_MSX9958) - DEVECHO "MSX9958" - #ENDIF -#ENDIF +TMSKBD .EQU TMSKBD_NONE ; ASSUME NONE ; -#IF (TMSMODE == TMSMODE_COLECO) -TMS_DATREG .EQU $BE ; READ/WRITE DATA -TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL - DEVECHO "COLECO" -#ENDIF + DEVECHO "TMS: MODE=" ; -#IF (TMSMODE == TMSMODE_MSXKBD) +#IF (TMSMODE == TMSMODE_SCG) TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL -TMS_KBDDATA .EQU $E0 ; KBD CTLR DATA PORT -TMS_KBDST .EQU $E1 ; KBD CTLR STATUS/CMD PORT - DEVECHO "MSXKBD" +TMS_ACR .EQU $9C ; AUX CONTROL REGISTER + DEVECHO "SCG" #ENDIF ; #IF (TMSMODE == TMSMODE_N8) @@ -78,14 +67,29 @@ TMS_PPIA .EQU $84 ; PPI PORT A TMS_PPIB .EQU $85 ; PPI PORT B TMS_PPIC .EQU $86 ; PPI PORT C TMS_PPIX .EQU $87 ; PPI CONTROL PORT +TMSKBD .SET TMSKBD_PPK ; PPK KEYBOARD DEVECHO "N8" #ENDIF ; -#IF (TMSMODE == TMSMODE_SCG) +#IF (TMSMODE == TMSMODE_MSX) TMS_DATREG .EQU $98 ; READ/WRITE DATA TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL -TMS_ACR .EQU $9C ; AUX CONTROL REGISTER - DEVECHO "SCG" +#ENDIF +; +#IF (TMSMODE == TMSMODE_MSXKBD) +TMS_DATREG .EQU $98 ; READ/WRITE DATA +TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL +TMS_KBDDATA .EQU $60 ; KBD CTLR DATA PORT +TMS_KBDST .EQU $64 ; KBD CTLR STATUS/CMD PORT +TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD + DEVECHO "MSXKBD" +#ENDIF +; +#IF (TMSMODE == TMSMODE_MSXMKY) +TMS_DATREG .EQU $98 ; READ/WRITE DATA +TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL +TMSKBD .SET TMSKBD_MKY ; MSX KEYBOARD + DEVECHO "MSXMKY" #ENDIF ; #IF (TMSMODE == TMSMODE_MBC) @@ -94,40 +98,38 @@ TMS_CMDREG .EQU $99 ; READ STATUS / WRITE REG SEL TMS_ACR .EQU $9C ; AUX CONTROL REGISTER TMS_KBDDATA .EQU $E2 ; KBD CTLR DATA PORT TMS_KBDST .EQU $E3 ; KBD CTLR STATUS/CMD PORT +TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD DEVECHO "MBC" #ENDIF - +; +#IF (TMSMODE == TMSMODE_COLECO) +TMS_DATREG .EQU $BE ; READ/WRITE DATA +TMS_CMDREG .EQU $BF ; READ STATUS / WRITE REG SEL + DEVECHO "COLECO" +#ENDIF +; #IF (TMSMODE == TMSMODE_DUO) TMS_DATREG .EQU $A0 ; READ/WRITE DATA TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL TMS_ACR .EQU $A6 ; AUX CONTROL REGISTER TMS_KBDDATA .EQU $4C ; KBD CTLR DATA PORT TMS_KBDST .EQU $4D ; KBD CTLR STATUS/CMD PORT +TMSKBD .SET TMSKBD_KBD ; PS2 KEYBOARD DEVECHO "DUO" #ENDIF ; -#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMSMODE == TMSMODE_NABU) TMS_DATREG .EQU $A0 ; READ/WRITE DATA TMS_CMDREG .EQU $A1 ; READ STATUS / WRITE REG SEL -; - #IF (TMSMODE == TMSMODE_NABU40) - DEVECHO "NABU-40" - #ENDIF - #IF (TMSMODE == TMSMODE_NABU80) - DEVECHO "NABU-80" - #ENDIF +TMSKBD .SET TMSKBD_NABU ; NABU KEYBOARD #ENDIF ; DEVECHO ", IO=" DEVECHO TMS_DATREG -#IF (TMSTIMENABLE & (INTMODE > 0)) - DEVECHO ", INTERRUPTS ENABLED" -#ENDIF - DEVECHO "\n" ; TMS_ROWS .EQU 24 ; -#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMS80COLS) TMS_FNTVADDR .EQU $1000 ; VRAM ADDRESS OF FONT DATA TMS_FNTSIZE .EQU 8*256 ; ### JLC Mod for JBL compatibility ### = 8x8 Font 256 Chars TMS_CHRVADDR .EQU $0000 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400 @@ -140,23 +142,47 @@ TMS_FNTSIZE .EQU 8*256 ; ### JLC Mod for JBL compatibility ### = 8x8 Font 256 C TMS_CHRVADDR .EQU $3800 ; VRAM ADDRESS OF CHAR SCREEN DATA (NEW CONSTANT) = REG2 * $400 TMS_COLS .EQU 40 #ENDIF +; + DEVECHO ", SCREEN=" + DEVECHO TMS_COLS + DEVECHO "X" + DEVECHO TMS_ROWS ; #DEFINE USEFONT8X8 #DEFINE TMS_FONT FONT8X8 ; TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER ; -#IF (TMSMODE == TMSMODE_N8) + DEVECHO ", KEYBOARD=" +; +#IF (TMSKBD == TMSKBD_NONE) + DEVECHO "NONE" +#ENDIF +; +#IF (TMSKBD == TMSKBD_PPK) PPKENABLE .SET TRUE ; INCLUDE PPK KEYBOARD SUPPORT + DEVECHO "PPK" +#ENDIF +; +#IF (TMSKBD == TMSKBD_KBD) +KBDENABLE .SET TRUE ; INCLUDE PS2 KEYBOARD SUPPORT + DEVECHO "KBD" #ENDIF ; -#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) -KBDENABLE .SET TRUE ; INCLUDE KBD KEYBOARD SUPPORT +#IF (TMSKBD == TMSKBD_MKY) +MKYENABLE .SET TRUE ; INCLUDE MSX KEYBOARD SUPPORT + DEVECHO "MKY" #ENDIF ; -#IF ((TMSMODE == TMSMODE_NABU40) |(TMSMODE == TMSMODE_NABU80)) +#IF (TMSKBD == TMSKBD_NABU) NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT + DEVECHO "NABU" +#ENDIF +; +#IF (TMSTIMENABLE & (INTMODE > 0)) + DEVECHO ", INTERRUPTS ENABLED" #ENDIF + DEVECHO "\n" ; ; TMS_IODELAY IS USED TO ADD RECOVERY TIME TO TMS9918/V9958 ACCESSES ; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! @@ -166,8 +192,8 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT #DEFINE TMS_IODELAY EX (SP),HL \ EX (SP),HL ; 38 W/S ;#DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP ; 20 W/S ### JLC Mod for Clock/2 (9 MHz) ### #ELSE - ; BELOW WAS TUNED FOR SBC AT 8MHZ - #IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) + ; BELOW WAS TUNED FOR Z80 AT 8MHZ + #IF (TMS80COLS) #DEFINE TMS_IODELAY NOP \ NOP \ NOP \ NOP \ NOP \ NOP \ NOP ; V9958 NEEDS AT WORST CASE, APPROX 4us (28T) DELAY BETWEEN I/O (WHEN IN TEXT MODE) #ELSE #DEFINE TMS_IODELAY NOP \ NOP ; 8 W/S @@ -179,10 +205,8 @@ NABUKBENABLE .SET TRUE ; INCLUDE NABU KEYBOARD SUPPORT ;====================================================================== ; TMS_PREINIT: -#IF (NABUKBENABLE == TRUE) - CALL NABUKB_PREINIT -#ENDIF - ; DISABLE INTERRUPT GENERATION + ; DISABLE INTERRUPT GENERATION UNTIL AFTER INTERRUPT HANDLER + ; HAS BEEN INSTALLED. LD A, (TMS_INITVDU_REG_1) RES TMSINTEN, A ; RESET INTERRUPT ENABLE BIT LD (TMS_INITVDU_REG_1), A @@ -196,6 +220,7 @@ TMS_INIT: ; #IF ((TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) LD A,$FF + EZ80_IO OUT (TMS_ACR),A ; INIT AUX CONTROL REG #ENDIF ; @@ -204,6 +229,7 @@ TMS_INIT: #IF ((TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) LD A,$FE + EZ80_IO OUT (TMS_ACR),A ; CLEAR VDP RESET #ENDIF ; @@ -212,32 +238,29 @@ TMS_INIT: #IF (TMSMODE == TMSMODE_SCG) PRTS("SCG$") #ENDIF -#IF (TMSMODE == TMSMODE_MBC) - PRTS("MBC$") -#ENDIF -#IF (TMSMODE == TMSMODE_DUO) - PRTS("DUO$") -#ENDIF #IF (TMSMODE == TMSMODE_N8) PRTS("N8$") #ENDIF #IF (TMSMODE == TMSMODE_MSX) PRTS("MSX$") #ENDIF -#IF (TMSMODE == TMSMODE_COLECO) - PRTS("COLECO$") -#ENDIF #IF (TMSMODE == TMSMODE_MSXKBD) - PRTS("RCKBD$") + PRTS("MSXKBD$") #ENDIF -#IF (TMSMODE == TMSMODE_MSX9958) - PRTS("RC_V9958$") +#IF (TMSMODE == TMSMODE_MSXMKY) + PRTS("MSXMKY$") #ENDIF -#IF (TMSMODE == TMSMODE_NABU40) - PRTS("NABU-40$") +#IF (TMSMODE == TMSMODE_MBC) + PRTS("MBC$") #ENDIF -#IF (TMSMODE == TMSMODE_NABU80) - PRTS("NABU-80$") +#IF (TMSMODE == TMSMODE_COLECO) + PRTS("COLECO$") +#ENDIF +#IF (TMSMODE == TMSMODE_DUO) + PRTS("DUO$") +#ENDIF +#IF (TMSMODE == TMSMODE_NABU) + PRTS("NABU$") #ENDIF ; PRTS(" IO=0x$") @@ -252,19 +275,31 @@ TMS_INIT: RET ; TMS_INIT1: +#IF (TMSTIMENABLE) + CALL PRTSTRD + .TEXT " INTERRUPT ENABLED$" +#ENDIF + CALL PC_SPACE + LD A,TMS_COLS + CALL PRTDEC8 + LD A,'X' + CALL COUT + LD A,TMS_ROWS + CALL PRTDEC8 +; CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE CALL TMS_CLEAR ; CLEAR SCREEN, HOME CURSOR -#IF (TMSMODE == TMSMODE_N8) +#IF (TMSKBD == TMSKBD_PPK) CALL PPK_INIT ; INITIALIZE PPI KEYBOARD DRIVER #ENDIF -#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) +#IF (TMSKBD == TMSKBD_KBD) CALL KBD_INIT ; INITIALIZE 8242 KEYBOARD DRIVER #ENDIF -#IF MKYENABLE +#IF (TMSKBD == TMSKBD_MKY) CALL MKY_INIT ; INITIALIZE MKY KEYBOARD DRIVER #ENDIF -#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMSKBD == TMSKBD_NABU) CALL NABUKB_INIT ; INITIALIZE NABU KEYBOARD DRIVER #ENDIF @@ -280,14 +315,24 @@ TMS_INIT1: LD (IVT(INT_VDP)),HL ; IVT INDEX #ENDIF ; + ; ENABLE VDP INTERRUPTS NOW LD A, (TMS_INITVDU_REG_1) SET TMSINTEN,A ; SET INTERRUPT ENABLE BIT LD (TMS_INITVDU_REG_1),A LD C, TMSCTRL1 CALL TMS_SET +; + #IF (TMSMODE == TMSMODE_NABU) + ; ENABLE VDP INTERRUPTS ON NABU INTERRUPT CONTROLLER + LD A,14 ; PSG R14 (PORT A DATA) + OUT (NABU_RSEL),A ; SELECT IT + LD A,(NABU_CTLVAL) ; GET NABU CTL PORT SHADOW REG + SET 4,A ; ENABLE VDP INTERRUPTS + LD (NABU_CTLVAL),A ; UPDATE SHADOW REG + OUT (NABU_RDAT),A ; WRITE TO HARDWARE + #ENDIF ; #ENDIF - ; ; ADD OURSELVES TO VDA DISPATCH TABLE LD BC,TMS_FNTBL ; BC := FUNCTION TABLE ADDRESS @@ -320,38 +365,37 @@ TMS_FNTBL: .DW TMS_VDAFIL .DW TMS_VDACPY .DW TMS_VDASCR -#IF (TMSMODE == TMSMODE_N8) +#IF (TMSKBD == TMSKBD_NONE) + .DW TMS_STAT + .DW TMS_FLUSH + .DW TMS_READ +#ENDIF +#IF (TMSKBD == TMSKBD_PPK) .DW PPK_STAT .DW PPK_FLUSH .DW PPK_READ #ENDIF -#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) +#IF (TMSKBD == TMSKBD_KBD) .DW KBD_STAT .DW KBD_FLUSH .DW KBD_READ #ENDIF -#IF ((TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) - .DW NABUKB_STAT - .DW NABUKB_FLUSH - .DW NABUKB_READ -#ENDIF -#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_COLECO)) - #IF MKYENABLE +#IF (TMSKBD == TMSKBD_MKY) .DW MKY_STAT .DW MKY_FLUSH .DW MKY_READ - #ELSE - .DW TMS_STAT - .DW TMS_FLUSH - .DW TMS_READ - #ENDIF +#ENDIF +#IF (TMSKBD == TMSKBD_NABU) + .DW NABUKB_STAT + .DW NABUKB_FLUSH + .DW NABUKB_READ #ENDIF .DW TMS_VDARDC #IF (($ - TMS_FNTBL) != (VDA_FNCNT * 2)) .ECHO "*** INVALID TMS FUNCTION TABLE ***\n" !!!!! #ENDIF - +; TMS_VDAINI: ; RESET VDA ; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA @@ -359,7 +403,7 @@ TMS_VDAINI: CALL TMS_CLEAR ; CLEAR SCREEN XOR A ; SIGNAL SUCCESS RET - +; TMS_VDAQRY: LD C,$00 ; MODE ZERO IS ALL WE KNOW LD D,TMS_ROWS ; ROWS @@ -367,7 +411,7 @@ TMS_VDAQRY: LD HL,0 ; EXTRACTION OF CURRENT BITMAP DATA NOT SUPPORTED YET XOR A ; SIGNAL SUCCESS RET - +; TMS_VDARES: #IF (CPUFAM == CPU_Z180) CALL TMS_Z180IO @@ -544,10 +588,12 @@ TMS_READ: ; TMS_SET: HB_DI + EZ80_IO OUT (TMS_CMDREG),A ; WRITE IT TMS_IODELAY LD A,C ; GET THE DESIRED REGISTER OR $80 ; SET BIT 7 + EZ80_IO OUT (TMS_CMDREG),A ; SELECT THE DESIRED REGISTER TMS_IODELAY HB_EI @@ -560,14 +606,16 @@ TMS_SET: ;---------------------------------------------------------------------- ; TMS_WR: -#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMS80COLS) ; CLEAR R#14 FOR V9958 HB_DI - XOR A - OUT (TMS_CMDREG), A + XOR A + EZ80_IO + OUT (TMS_CMDREG), A TMS_IODELAY - LD A, $80 | 14 - OUT (TMS_CMDREG), A + LD A, $80 | 14 + EZ80_IO + OUT (TMS_CMDREG), A TMS_IODELAY HB_EI #ENDIF @@ -581,9 +629,11 @@ TMS_WR: TMS_RD: HB_DI LD A,L + EZ80_IO OUT (TMS_CMDREG),A TMS_IODELAY LD A,H + EZ80_IO OUT (TMS_CMDREG),A TMS_IODELAY HB_EI @@ -601,10 +651,12 @@ TMS_PROBE: CALL TMS_WR ; WRITE TEST PATTERN TO FIRST TWO BYTES LD A,$A5 ; FIRST BYTE + EZ80_IO OUT (TMS_DATREG),A ; OUTPUT ;TMS_IODELAY ; DELAY CALL DLY64 ; DELAY CPL ; COMPLEMENT ACCUM + EZ80_IO OUT (TMS_DATREG),A ; SECOND BYTE ;TMS_IODELAY ; DELAY CALL DLY64 ; DELAY @@ -614,11 +666,13 @@ TMS_PROBE: CALL TMS_RD ; READ TEST PATTERN LD C,$A5 ; VALUE TO EXPECT + EZ80_IO IN A,(TMS_DATREG) ; READ FIRST BYTE ;TMS_IODELAY ; DELAY CALL DLY64 ; DELAY CP C ; COMPARE RET NZ ; RETURN ON MISCOMPARE + EZ80_IO IN A,(TMS_DATREG) ; READ SECOND BYTE ;TMS_IODELAY ; DELAY CALL DLY64 ; DELAY @@ -639,6 +693,7 @@ TMS_CRTINIT: LD DE,$4000 ; 16KB TMS_CRTINIT1: XOR A + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY ; DELAY DEC DE @@ -660,12 +715,12 @@ TMS_CRTINIT2: DJNZ TMS_CRTINIT2 ; LOOP ; ; ENABLE WAIT SIGNAL IF 9938/58 -#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMS80COLS) LD C,25 ; REGISTER 25 LD A,%00000100 ; ONLY WTE BIT SET CALL TMS_SET ; DO IT #ENDIF - RET + RET ; ;---------------------------------------------------------------------- ; CLEAR SCREEN AND HOME CURSOR @@ -723,6 +778,7 @@ TMS_LOADFONT: LD DE,TMS_FNTSIZE TMS_LOADFONT1: LD A,(HL) + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY ; DELAY INC HL @@ -759,11 +815,13 @@ TMS_SETCUR: PUSH DE ; PRESERVE DE LD HL,(TMS_POS) ; GET CURSOR POSITION CALL TMS_RD ; SETUP TO READ VDU BUF + EZ80_IO IN A,(TMS_DATREG) ; GET REAL CHAR UNDER CURSOR TMS_IODELAY ; DELAY PUSH AF ; SAVE THE CHARACTER CALL TMS_WR ; SETUP TO WRITE TO THE SAME PLACE LD A,$FF ; REPLACE REAL CHAR WITH 255 + EZ80_IO OUT (TMS_DATREG),A ; DO IT TMS_IODELAY ; DELAY POP AF ; RECOVER THE REAL CHARACTER @@ -787,10 +845,11 @@ TMS_SETCUR0: ; MULT BY 8 FOR FONT INDEX LD B,8 ; 8 BYTES LD HL,TMS_BUF ; INTO BUFFER TMS_SETCUR1: ; READ GLYPH LOOP + EZ80_IO IN A,(TMS_DATREG) ; GET NEXT BYTE TMS_IODELAY ; IO DELAY LD (HL),A ; SAVE VALUE IN BUF - INC HL ; BUMP BUF POINTER + INC HL ; BUMP BUF POINTER DJNZ TMS_SETCUR1 ; LOOP FOR 8 BYTES ; ; NOW WRITE INVERTED GLYPH INTO FONT INDEX 255 @@ -802,6 +861,7 @@ TMS_SETCUR2: ; WRITE INVERTED GLYPH LOOP LD A,(HL) ; GET THE BYTE INC HL ; BUMP THE BUF POINTER XOR $FF ; INVERT THE VALUE + EZ80_IO OUT (TMS_DATREG),A ; WRITE IT TO VDU TMS_IODELAY ; IO DELAY DJNZ TMS_SETCUR2 ; LOOP FOR ALL 8 BYTES OF GLYPH @@ -818,6 +878,7 @@ TMS_CLRCUR: ; REMOVE VIRTUAL CURSOR FROM SCREEN LD HL,(TMS_POS) ; POINT TO CURRENT CURSOR POS CALL TMS_WR ; SET UP TO WRITE TO VDU LD A,(TMS_CURSAV) ; GET THE REAL CHARACTER + EZ80_IO OUT (TMS_DATREG),A ; WRITE IT TMS_IODELAY ; IO DELAY POP HL ; RECOVER HL @@ -857,6 +918,7 @@ TMS_PUTCHAR: LD HL,(TMS_POS) ; LOAD CURRENT POSITION INTO HL CALL TMS_WR ; SET THE WRITE ADDRESS POP AF ; RECOVER CHARACTER TO WRITE + EZ80_IO OUT (TMS_DATREG),A ; WRITE THE CHARACTER TMS_IODELAY LD HL,(TMS_POS) ; LOAD CURRENT POSITION INTO HL @@ -878,6 +940,7 @@ TMS_FILL: ; TMS_FILL1: LD A,C ; RECOVER CHARACTER TO WRITE + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY DEC DE @@ -903,6 +966,7 @@ TMS_SCROLL0: ; READ LINE THAT IS ONE PAST CURRENT DESTINATION LD DE,TMS_BUF LD B,TMS_COLS TMS_SCROLL1: + EZ80_IO IN A,(TMS_DATREG) TMS_IODELAY LD (DE),A @@ -916,6 +980,7 @@ TMS_SCROLL1: LD B,TMS_COLS TMS_SCROLL2: LD A,(DE) + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY INC DE @@ -932,6 +997,7 @@ TMS_SCROLL2: LD A,' ' LD B,TMS_COLS TMS_SCROLL3: + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY DJNZ TMS_SCROLL3 @@ -956,6 +1022,7 @@ TMS_RSCROLL0: ; READ THE LINE THAT IS ONE PRIOR TO CURRENT DESTINATION LD DE,TMS_BUF ; POINT TO BUFFER LD B,TMS_COLS ; LOOP FOR EACH COLUMN TMS_RSCROLL1: + EZ80_IO IN A,(TMS_DATREG) ; GET THE CHAR TMS_IODELAY ; RECOVER LD (DE),A ; SAVE IN BUFFER @@ -969,6 +1036,7 @@ TMS_RSCROLL1: LD B,TMS_COLS ; INIT LOOP COUNTER TMS_RSCROLL2: LD A,(DE) ; LOAD THE CHAR + EZ80_IO OUT (TMS_DATREG),A ; WRITE TO SCREEN TMS_IODELAY ; DELAY INC DE ; BUMP BUF POINTER @@ -985,6 +1053,7 @@ TMS_RSCROLL2: LD A,' ' LD B,TMS_COLS TMS_RSCROLL3: + EZ80_IO OUT (TMS_DATREG),A TMS_IODELAY DJNZ TMS_RSCROLL3 @@ -1006,6 +1075,7 @@ TMS_BLKCPY1: LD DE,TMS_BUF ; POINT TO BUFFER LD B,C TMS_BLKCPY2: + EZ80_IO IN A,(TMS_DATREG) ; GET THE NEXT BYTE TMS_IODELAY ; DELAY LD (DE),A ; SAVE IN BUFFER @@ -1020,6 +1090,7 @@ TMS_BLKCPY2: LD B,C TMS_BLKCPY3: LD A,(DE) ; GET THE CHAR FROM BUFFER + EZ80_IO OUT (TMS_DATREG),A ; WRITE TO VDU TMS_IODELAY ; DELAY INC DE ; BUMP BUF PTR @@ -1062,7 +1133,7 @@ TMS_Z180IOX: #IF (TMSTIMENABLE & (INTMODE > 0)) TMS_TSTINT: - IN A,(TMS_CMDREG) ; TEST FOR INT FLAG + IN_A_NN(TMS_CMDREG) AND $80 JR NZ,TMS_INTHNDL AND $00 ; RETURN Z - NOT HANDLED @@ -1070,10 +1141,6 @@ TMS_TSTINT: TMS_INTHNDL: -;#IF MKYENABLE -; CALL MKY_INT -;#ENDIF - CALL HB_TIMINT ; RETURN NZ - HANDLED OR $FF RET @@ -1096,21 +1163,21 @@ TMS_COLOR_TBL .DB $01,$08,$02,$0A,$04,$06,$0C,$0F,$0E,$09,$03,$0B,$05,$0D,$07,$0 ;================================================================================================== ; TMS_IDAT: -#IF ((TMSMODE == TMSMODE_N8)) +#IF ((TMSKBD == TMSKBD_NONE) | (TMSKBD == TMSKBD_MKY) | (TMSKBD == TMSKBD_NABU)) + .FILL 4,0 ; DUMMY KEYBOARD CONFIG DATA +#ENDIF +#IF (TMSKBD == TMSKBD_PPK) .DB TMS_PPIA ; PPI PORT A .DB TMS_PPIB ; PPI PORT B .DB TMS_PPIC ; PPI PORT C .DB TMS_PPIX ; PPI CONTROL PORT #ENDIF -#IF ((TMSMODE == TMSMODE_MSXKBD) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO)) +#IF (TMSKBD == TMSKBD_KBD) .DB KBDMODE_PS2 ; PS/2 8242 KEYBOARD CONTROLLER .DB TMS_KBDST ; 8242 CMD/STATUS PORT .DB TMS_KBDDATA ; 8242 DATA PORT .DB 0 ; FILLER #ENDIF -#IF ((TMSMODE == TMSMODE_MSX) | (TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_SCG) | (TMSMODE == TMSMODE_COLECO) | (TMSMODE == TMSMODE_NABU40) | (TMSMODE == TMSMODE_NABU80)) - .FILL 4,0 ; DUMMY KEYBOARD CONFIG DATA -#ENDIF ; .DB TMS_DATREG .DB TMS_CMDREG @@ -1157,11 +1224,11 @@ TMS_IDAT: ; 5S Fifth sprite (not displayed) detected. Value in FS* is valid. ; INT Set at each screen update, used for interrupts. ; -#IF ((TMSMODE == TMSMODE_MSX9958) | (TMSMODE == TMSMODE_MBC) | (TMSMODE == TMSMODE_DUO) | (TMSMODE == TMSMODE_NABU80)) +#IF (TMS80COLS) ; ; NOTE: YAMAHA 9938/58 DOCUMENTATION SAYS R3 IS SAME AS 9918 (ADR >> 10), ; BUT THIS SEEMS TO BE WRONG AND CORRECTLY DOCUMENTED AT -; https://www.msx.org/wiki/Screen_Modes_Description#SCREEN_0_in_80-column_.28Text_mode_2.29 +; https://www.msx.org/wiki/Screen_Modes_Description#SCREEN_0_in_80-column_.28Text_mode_2.29 ; BITS 1-0 SHOULD BE 1. BITS 8-2 SHOULD BE (ADR >> 8). ; ; ### JLC Mod @@ -1179,7 +1246,11 @@ TMS_INITVDU_REG_1: .DB $00 ; REG 6 - NO SPRITE GENERATOR TABLE .DB $F0 ; REG 7 - WHITE ON BLACK .DB $88 ; REG 8 - COLOUR BUS INPUT, DRAM 64K +#IF (TICKFREQ == 50) + .DB $02 ; REG 9 +#ELSE .DB $00 ; REG 9 +#ENDIF .DB $00 ; REG 10 - COLOUR TABLE A14-A16 (TMS_FNTVADDR - $1000) ; #ELSE ; _______TMS9918 REGISTER SET_______ diff --git a/Source/HBIOS/uart.asm b/Source/HBIOS/uart.asm index bedf4487..205a291e 100644 --- a/Source/HBIOS/uart.asm +++ b/Source/HBIOS/uart.asm @@ -17,6 +17,21 @@ ; F E D C B A 9 8 7 6 5 4 3 2 1 0 ; -- MCR -- -- LCR -- ; +; STANDARD UART BASE I/O ADDRESSES: +; - ECB SBC Z80 $68 +; - ECB CASSETTE $80 +; - ECB 4UART $C0,$C8,$D0,$D8 +; - ECB MFPIC $18 +; - ZETA $68 +; - DUODYNE Z80 $58 +; - DUODYNE SELFHOST $A8 +; - DUODYNE MULTI IO $70,$78 +; - NHYODYNE Z80 $68 +; - NHYODYNE DUART $80,$88 +; - RCBUS EPSER $A0,$A8 +; - RCBUS DUAL RS232 $80,$88 +; - EPITX $A0,$A8 +; - NABU $48 ; UART_DEBUG .EQU FALSE ; @@ -54,27 +69,6 @@ UART_FIFOACT .EQU 6 ; FIFO ACTIVE BIT UART_AFCACT .EQU 5 ; AUTO FLOW CONTROL ACTIVE BIT UART_CTSBAD .EQU 4 ; CTS STALL DETECTED ; -#IF (PLATFORM == PLT_DUO) -UARTSBASE .EQU $58 -UARTDBASE .EQU $70 -#ENDIF -; -#IF (PLATFORM == PLT_NABU) -UARTSBASE .EQU $48 -UARTDBASE .EQU $80 -#ENDIF -; -#IF ((PLATFORM != PLT_DUO) & (PLATFORM != PLT_NABU)) -UARTSBASE .EQU $68 -UARTDBASE .EQU $80 -#ENDIF -; -UARTABASE .EQU $A8 -UARTCBASE .EQU $80 -UARTMBASE .EQU $18 -UART4BASE .EQU $C0 -UARTRBASE .EQU $A0 -; #IF (UARTINTS) ; #IF ((INTMODE == 2) | (INTMODE == 3)) @@ -92,17 +86,17 @@ UART1_IVT .EQU IVT(INT_UART1) ; ; UART_PREINIT: -#IF (UART4) +#IF (UART4UART) ; ; INIT UART4 BOARD CONFIG REGISTER (NO HARM IF IT IS NOT THERE) ; LD A,$80 ; SELECT 7.3728MHZ OSC & LOCK CONFIG REGISTER - OUT (UART4BASE+$0F),A ; DO IT + OUT (UART4UARTBASE+$0F),A ; DO IT #ENDIF ; ; SETUP THE DISPATCH TABLE ENTRIES ; - LD B,UART_CNT ; LOOP CONTROL + LD B,UARTCNT ; LOOP CONTROL LD C,0 ; PHYSICAL UNIT INDEX XOR A ; ZERO TO ACCUM LD (UART_DEV),A ; CURRENT DEVICE NUMBER @@ -203,7 +197,7 @@ UART_INITUNIT1: ; ; UART_INIT: - LD B,UART_CNT ; COUNT OF POSSIBLE UART UNITS + LD B,UARTCNT ; COUNT OF POSSIBLE UART UNITS LD C,0 ; INDEX INTO UART CONFIG TABLE UART_INIT1: PUSH BC ; SAVE LOOP CONTROL @@ -249,14 +243,14 @@ UART_INIT2: UART_INT: ; - #IF (UARTSBC) - LD IY,UART_CFG_SBC + #IF (UARTCNT >= 1) + LD IY,UART0_CFG CALL UART_INTRCV RET NZ #ENDIF ; - #IF (UARTCAS) - LD IY,UART_CFG_CAS + #IF (UARTCNT >= 2) + LD IY,UART1_CFG CALL UART_INTRCV RET NZ #ENDIF @@ -265,15 +259,15 @@ UART_INT: ; #IF ((INTMODE == 2) | (INTMODE == 3)) ; - #IF (UARTSBC) -UART_INTSBC: - LD IY,UART_CFG_SBC + #IF (UARTCNT >= 1) +UART_INT0: + LD IY,UART0_CFG JR UART_INTRCV #ENDIF ; - #IF (UARTCAS) -UART_INTCAS: - LD IY,UART_CFG_CAS + #IF (UARTCNT >= 2) +UART_INT1: + LD IY,UART1_CFG JR UART_INTRCV #ENDIF ; @@ -837,16 +831,6 @@ UART_CHIP2: ; PICK BETWEEN 16550A/C JR UART_CHIP_16550C ; IS SET, SO 16550C ; UART_CHIP_NONE: -; -#IF (UARTSBCFORCE) - ; SIMH DOES NOT EMULATE A UART WELL ENOUGH TO BE DETECTED, SO - ; THIS BIT OF CODE CAN BE ENABLED TO FORCE THE PRIMARY SBC - ; UART TO BE HANDLED AS AN 8250. - LD A,(IY+2) ; BASE IO PORT - CP UARTSBASE ; IS THIS PRIMARY SBC PORT? - JR Z,UART_CHIP_8250 ; SPECIAL CASE FOR PRIMARY UART! -#ENDIF -; LD A,UART_NONE ; NO UART DETECTED AT THIS PORT RET ; @@ -1028,199 +1012,153 @@ UART_DEV .DB 0 ; DEVICE NUM USED DURING INIT ; UART PORT TABLE ; UART_CFG: -#IF (UARTSBC) -UART_CFG_SBC: - ; SBC/ZETA ONBOARD SERIAL PORT - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTSBASE ; IO PORT BASE (RBR, THR) - .DB UARTSBASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW UARTSBC_RCVBUF ; POINTER TO RCV BUFFER STRUCT -; - DEVECHO "UART: MODE=SBC, IO=" - DEVECHO UARTSBASE +; +#IF (UARTCNT >= 1) +UART0_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) ; +0 + .DB 0 ; UART TYPE (SET DURING INIT) ; +1 + .DB UART0BASE ; IO PORT BASE (RBR, THR) ; +2 + .DB UART0BASE + UART_LSR ; LINE STATUS PORT (LSR) ; +3 + .DW UART0CFG ; LINE CONFIGURATION ; +4 + .DW UART0_RCVBUF ; POINTER TO RCV BUFFER STRUCT ; +6 +; + DEVECHO "UART: IO=" + DEVECHO UART0BASE #IF ((UARTINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" #ENDIF DEVECHO "\n" #ENDIF -#IF (UARTAUX) -UART_CFG_AUX: - ; AUX SERIAL PORT - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTABASE ; IO PORT BASE (RBR, THR) - .DB UARTABASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; NO INT HANDLER -; - DEVECHO "UART: MODE=AUX, IO=" - DEVECHO UARTABASE - DEVECHO "\n" -#ENDIF -#IF (UARTCAS) -UART_CFG_CAS: - ; CASSETTE INTERFACE SERIAL PORT - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTCBASE ; IO PORT BASE (RBR, THR) - .DB UARTCBASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCASSPD ; LINE CONFIGURATION - .DW UARTCAS_RCVBUF ; POINTER TO RCV BUFFER STRUCT -; - DEVECHO "UART: MODE=CAS, IO=" - DEVECHO UARTCBASE +; +#IF (UARTCNT >= 2) +UART1_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART1BASE ; IO PORT BASE (RBR, THR) + .DB UART1BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART1CFG ; LINE CONFIGURATION + .DW UART1_RCVBUF ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART1BASE #IF ((UARTINTS) & (INTMODE > 0)) DEVECHO ", INTERRUPTS ENABLED" #ENDIF DEVECHO "\n" #ENDIF -#IF (UARTMFP) -UART_CFG_MFP: - ; MF/PIC SERIAL PORT - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTMBASE ; IO PORT BASE (RBR, THR) - .DB UARTMBASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=MFP, IO=" - DEVECHO UARTSBASE +; +#IF (UARTCNT >= 3) +UART2_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART2BASE ; IO PORT BASE (RBR, THR) + .DB UART2BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART2CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART2BASE DEVECHO "\n" #ENDIF -#IF (UART4) - ; 4UART SERIAL PORT A - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UART4BASE+0 ; IO PORT BASE (RBR, THR) - .DB UART4BASE+0 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=4UART, IO=" - DEVECHO UART4BASE+0 - DEVECHO "\n" ; - ; 4UART SERIAL PORT B - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UART4BASE+8 ; IO PORT BASE (RBR, THR) - .DB UART4BASE+8 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=4UART, IO=" - DEVECHO UART4BASE+8 +#IF (UARTCNT >= 4) +UART3_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART3BASE ; IO PORT BASE (RBR, THR) + .DB UART3BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART3CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART3BASE DEVECHO "\n" +#ENDIF ; - ; 4UART SERIAL PORT C - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UART4BASE+16 ; IO PORT BASE (RBR, THR) - .DB UART4BASE+16 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=4UART, IO=" - DEVECHO UART4BASE+16 +#IF (UARTCNT >= 5) +UART4_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART4BASE ; IO PORT BASE (RBR, THR) + .DB UART4BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART4CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART4BASE DEVECHO "\n" +#ENDIF ; - ; 4UART SERIAL PORT D - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UART4BASE+24 ; IO PORT BASE (RBR, THR) - .DB UART4BASE+24 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=4UART, IO=" - DEVECHO UART4BASE+24 +#IF (UARTCNT >= 6) +UART5_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART5BASE ; IO PORT BASE (RBR, THR) + .DB UART5BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART5CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART5BASE DEVECHO "\n" #ENDIF -#IF (UARTRC) - ; UARTRC SERIAL PORT A - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTRBASE ; IO PORT BASE (RBR, THR) - .DB UARTRBASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=RC, IO=" - DEVECHO UARTRBASE+0 - DEVECHO "\n" ; - ; UARTRC SERIAL PORT B - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTRBASE+8 ; IO PORT BASE (RBR, THR) - .DB UARTRBASE+8 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=RC, IO=" - DEVECHO UARTRBASE+8 +#IF (UARTCNT >= 7) +UART6_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART6BASE ; IO PORT BASE (RBR, THR) + .DB UART6BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART6CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART6BASE DEVECHO "\n" -; #ENDIF -#IF (UARTDUAL) - ; DUAL UART CHANNEL A - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTDBASE+8 ; IO PORT BASE (RBR, THR) - .DB UARTDBASE+8 + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER - ; DUAL UART CHANNEL B - .DB 0 ; DEVICE NUMBER (UPDATED DURING INIT) - .DB 0 ; UART TYPE - .DB UARTDBASE ; IO PORT BASE (RBR, THR) - .DB UARTDBASE + UART_LSR ; LINE STATUS PORT (LSR) - .DW UARTCFG ; LINE CONFIGURATION - .DW 0 ; SHOULD NEVER NEED INT HANDLER -; - DEVECHO "UART: MODE=DUAL, IO=" - DEVECHO UARTDBASE+8 - DEVECHO "\n" ; - DEVECHO "UART: MODE=DUAL, IO=" - DEVECHO UARTDBASE+0 +#IF (UARTCNT >= 8) +UART7_CFG: + .DB 0 ; DEVICE NUMBER (SET DURING INIT) + .DB 0 ; UART TYPE (SET DURING INIT) + .DB UART7BASE ; IO PORT BASE (RBR, THR) + .DB UART7BASE + UART_LSR ; LINE STATUS PORT (LSR) + .DW UART7CFG ; LINE CONFIGURATION + .DW 0 ; POINTER TO RCV BUFFER STRUCT +; + DEVECHO "UART: IO=" + DEVECHO UART7BASE DEVECHO "\n" -; #ENDIF ; -UART_CNT .EQU ($ - UART_CFG) / 8 -; #IF ((!UARTINTS) | (INTMODE == 0)) ; -UARTSBC_RCVBUF .EQU 0 -UARTCAS_RCVBUF .EQU 0 +UART0_RCVBUF .EQU 0 +UART1_RCVBUF .EQU 0 ; #ELSE ; ; UART SBC RECEIVE BUFFER ; - #IF (UARTSBC) + #IF (UARTCNT >= 1) ; -UARTSBC_RCVBUF: -UARTSBC_CNT .DB 0 ; CHARACTERS IN RING BUFFER -UARTSBC_HD .DW UARTSBC_BUF ; BUFFER HEAD POINTER -UARTSBC_TL .DW UARTSBC_BUF ; BUFFER TAIL POINTER -UARTSBC_BUF .FILL UART_BUFSZ,0 ; RECEIVE RING BUFFER +UART0_RCVBUF: +UART0_CNT .DB 0 ; CHARACTERS IN RING BUFFER +UART0_HD .DW UART0_BUF ; BUFFER HEAD POINTER +UART0_TL .DW UART0_BUF ; BUFFER TAIL POINTER +UART0_BUF .FILL UART_BUFSZ,0 ; RECEIVE RING BUFFER ; #ENDIF ; ; UART CASSETTE RECEIVE BUFFER ; - #IF (UARTCAS) + #IF (UARTCNT >= 2) ; -UARTCAS_RCVBUF: -UARTCAS_CNT .DB 0 ; CHARACTERS IN RING BUFFER -UARTCAS_HD .DW UARTCAS_BUF ; BUFFER HEAD POINTER -UARTCAS_TL .DW UARTCAS_BUF ; BUFFER TAIL POINTER -UARTCAS_BUF .FILL UART_BUFSZ,0 ; RECEIVE RING BUFFER +UART1_RCVBUF: +UART1_CNT .DB 0 ; CHARACTERS IN RING BUFFER +UART1_HD .DW UART1_BUF ; BUFFER HEAD POINTER +UART1_TL .DW UART1_BUF ; BUFFER TAIL POINTER +UART1_BUF .FILL UART_BUFSZ,0 ; RECEIVE RING BUFFER ; #ENDIF ; diff --git a/Source/HBIOS/updater.asm b/Source/HBIOS/updater.asm index 24cbb2ba..b23bb2cd 100644 --- a/Source/HBIOS/updater.asm +++ b/Source/HBIOS/updater.asm @@ -131,7 +131,7 @@ ; #INCLUDE "std.asm" ; -HBX_BNKSEL .EQU $FE2B +HBX_BNKSEL .EQU $FFF3 ; #DEFINE HB_DI DI #DEFINE HB_EI EI diff --git a/Source/HBIOS/usrrom.asm b/Source/HBIOS/usrrom.asm index be9d80f4..146d4937 100644 --- a/Source/HBIOS/usrrom.asm +++ b/Source/HBIOS/usrrom.asm @@ -1,34 +1,114 @@ ; -; USRROM TEMPLATE FOR A CUSTOM USER ROM +;============================================================================= +; USRROM.ASM - SAMPLE CUSTOM ROM USER APPLICATION +;============================================================================= ; -#INCLUDE "std.asm" +; VERSION 1.1 BY - MARTINR 31-MAY-2024 ; -CR .EQU 0DH -LF .EQU 0AH +; THIS IS AN EXAMPLE USER ROM APPLICATION THAT IS AUTOMATICALLY INCLUDED +; IN THE ROMWBW ROM. IT IS INVOKED FROM THE BOOT LOADER USING THE +; 'U' (USER APPLICATION) OPTION. YOU MAY REPLACE THIS SOURCE CODE WITH +; YOUR OWN CUSTOM CODE. IT WILL BE ASSEMBLED AND INCLUDED WITH YOUR +; CUSTOM ROM BUILD. REFER TO THE ROMWBW USER GUIDE FOR MORE INFORMATION. ; - .ORG USR_LOC +; THANKS AND CREDIT TO MARTIN R. FOR PROVIDING THIS APPLICATION! ; - LD SP,USR_END +; - THE SOURCE IS ASSEMBLED WITH THE TASM ASSEMBLER. +; - THE APPLICATION MUST START (ORG) AT USR_LOC ($100) +; - THE APPLICATION MUST BE EXACTLY USR_SIZ BYTES. THIS IS AUTOMATICALLY +; ENFORCED AT THE END OF THE FILE. +; - AT EXIT, THE APPLICATION SHOULD RETURN TO THE BOOT LOADER USING THE +; HBIOS WARM RESET FUNCTION AS DEMONSTRATED BELOW. +; - THE APPLICATION MAY MAKE HBIOS FUNCTION CALLS WITHOUT RESTRICTION, +; BUT CANNOT USE ANY OS (CP/M) FUNCTIONS BECAUSE NO OS IS LOADED. +; - THE APPLICATION MAY NOT CHANGE THE INTERRUPT MODE (WHICH IS DEFINED +; IN THE ROM CONFIGURATION). THE SYSTEM'S INTERRUPT +; MODE CAN BE QUERIED BY AN HBIOS API CALL IF DESIRED. +; - THE APPLICATION MAY TEMPORARILY DISABLE INTERRUPTS BY BRACKETING +; SECTIONS OF CODE WITH DI/EI AS NEEDED. IF INTERRUPTS ARE +; TEMPORARILY DISABLED, THEY SHOULD NOT SHOULD NOT +; BE LEFT DISABLED ACROSS HBIOS API CALLS. ; - LD HL,BOOTMSG ; INTRODUCTION - CALL PRTSTR +; INCLUDE STD.ASM WHICH DEFINES SOME KEY EQUATES USED BELOW. MOST +; IMPORTANT ARE USR_LOC, USR_SIZ, AND USR_END. IT ALSO DEFINES EQUATES +; FOR THE HBIOS FUNCTION CALLS. +; +#INCLUDE "std.asm" +; + .LIST +; +CR .EQU 0DH +LF .EQU 0AH +; +ROWS .EQU 8 ; NUMBER OF PIXEL ROWS PER CHARACTER +COLS .EQU 8 ; NUMBER OF PIXEL COLUMNS PER CHARACTER +; +; APPLICATION WILL WILL BE LOADED AT USR_LOC. THEREFORE, THE CODE +; MUST "ORG" AT THIS ADDRESS. TO CHANGE THE LOAD LOCATION OF THIS +; CODE, YOU CAN UPDATE USR_LOC IN STD.ASM. +; + .ORG USR_LOC +; +; PLACE STACK AT THE TOP OF AVAILABLE RAM (JUST BELOW THE HBIOS PROXY). +; + LD SP,HBX_LOC +; +;***************************************************************************** +; +; DISPLAY BANNER +; + LD A,CR + CALL COUT + LD A,LF + CALL COUT ; COUT PRESERVES AF, BC, DE, & HL + CALL COUT + CALL COUT ; - CALL CIN ; DO STUFF + LD HL,BANNER+1 ; POINTER TO THE 8X8 CHARACTER BITMAPS + LD D,ROWS ; D=ROWS PER CHARACTER +; +NXTLIN: LD A,(BANNER) ; FETCH THE NUMBER OF CHARACTERS IN THE BANNER + LD E,A +; +NXTCHR: LD C,(HL) ; FETCH THE BIT PATTERN FOR THE CHARACTER-LINE + LD B,COLS ; 8 COLUMNS PER CHARACTER-LINE +NXTBIT: SLA C ; SHIFT-LEFT THE NEXT BIT INTO THE CARRY FLAG + JR C, DOT + LD A,' ' ; IF NO-CARRY THEN PRINT A 'SPACE' + JR GAP +DOT: LD A,'X' ; IF A CARRY THEN PRINT AN 'X' +GAP: CALL COUT ; COUT PRESERVES AF, BC, DE, & HL + DJNZ NXTBIT ; GO ROUND AND PRINT ALL 8 BITS FOR THE CHARACTER-LINE +; + INC HL ; POINT TO NEXT CHARACTER-LINE + DEC E + JR NZ,NXTCHR ; GO ROUND AND PRINT THE NEXT CHARACTER +; + LD A,CR ; REACHED THE END OF A LINE, SO PRINT CRLF + CALL COUT ; COUT PRESERVES AF, BC, DE, & HL + LD A,LF + CALL COUT +; + DEC D + JR NZ,NXTLIN ; GO ROUND AND PRINT THE NEXT LINE +; +;***************************************************************************** +; +; FINISHED DISPLAYING THE BANNER, NOW END THE 'APP' TIDILY +; + LD HL,MESSAGE ; PRINT A MESSAGE + CALL PRTSTR + CALL CIN ; AND WAIT FOR A KEYPRESS ; LD B,BF_SYSRESET ; SYSTEM RESTART LD C,BF_SYSRES_WARM ; WARM START - CALL $FFF0 ; CALL HBIOS -; RET + RST 08 ; CALL HBIOS (DOES NOT RETURN) ; +;***************************************************************************** ; +; SUPPORT ROUTINES ; -; PRINT A STRING AT ADDRESS SPECIFIED IN HL -; STRING MUST BE TERMINATED BY '$' -; USAGE: -; LD HL,MYSTR -; CALL PRTSTR -; ... -; MYSTR: .DB "HELLO$" +; PRINT A STRING OF CHARACTERS STARTING AT HL, ENDING WITH '$' ; PRTSTR: LD A,(HL) INC HL @@ -43,8 +123,8 @@ COUT: PUSH AF PUSH BC PUSH DE PUSH HL - LD B,01H - LD C,80H + LD B,BF_CIOOUT + LD C,CIO_CONSOLE LD E,A RST 08 POP HL @@ -58,8 +138,8 @@ COUT: PUSH AF CIN: PUSH BC PUSH DE PUSH HL - LD B,00H - LD C,80H + LD B,BF_CIOIN + LD C,CIO_CONSOLE RST 08 LD A,E POP HL @@ -67,18 +147,60 @@ CIN: PUSH BC POP BC RET ; -BOOTMSG:.DB CR,LF,CR,LF - .DB "No User ROM Installed." - .DB CR,LF,CR,LF +;***************************************************************************** +; +; DATA SECTION +; +BANNER: + .DB 6 ; THE NUMBER OF CHARACTERS IN THE BANNER +; +#IF FALSE + ; UPPER CASE LOGO ("ROMWBW") + .DB %01111100, %00011100, %01000001, %01000001, %01111100, %01000001 + .DB %01000010, %00100010, %01100011, %01000001, %01000010, %01000001 + .DB %01000001, %01000001, %01010101, %01000001, %01000001, %01000001 + .DB %01000001, %01000001, %01001001, %00100010, %01111110, %00100010 + .DB %01111110, %01000001, %01000001, %00100010, %01000010, %00100010 + .DB %01000100, %01000001, %01000001, %00101010, %01000001, %00101010 + .DB %01000010, %00100010, %01000001, %00101010, %01000001, %00101010 + .DB %01000001, %00011100, %01000001, %00010100, %01111110, %00010100 +#ENDIF +; +#IF TRUE + ; UPPER AND LOWER CASE LOGO ("RomWBW") + .DB %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .DB %01111000, %00000000, %00000000, %01000100, %01111000, %01000100 + .DB %01000100, %00000000, %00000000, %01000100, %01000100, %01000100 + .DB %01000100, %00111000, %00101000, %01000100, %01000100, %01000100 + .DB %01111000, %01000100, %01010100, %01010100, %01111000, %01010100 + .DB %01010000, %01000100, %01010100, %01010100, %01000100, %01010100 + .DB %01001000, %01000100, %01000100, %01101100, %01000100, %01101100 + .DB %01000100, %00111000, %01000100, %01000100, %01111000, %01000100 +#ENDIF +; +MESSAGE: + .DB CR,LF,LF + .DB "This is an example User Application - why not create your own?",CR,LF + .DB "Please see the relevant User Guide section for more information." + .DB CR,LF,LF,LF .DB "Press a key to return to Boot Loader.$" ; ; IT IS CRITICAL THAT THE FINAL BINARY BE EXACTLY USR_SIZ BYTES. -; THIS GENERATES FILLER AS NEEDED. -; +; THIS GENERATES FILLER AS NEEDED. IT WILL ALSO FORCE AN ASSEMBLY +; ERROR IF THE SIZE EXCEEDS THE SPACE ALLOCATED. +; SLACK .EQU (USR_END - $) - .FILL SLACK,00 +; +#IF (SLACK < 0) + .ECHO "*** USRAPP IS TOO BIG!!!\n" + !!! ; FORCE AN ASSEMBLY ERROR +#ENDIF +; + .FILL SLACK,$00 .ECHO "User ROM space remaining: " .ECHO SLACK .ECHO " bytes.\n" - .END - +; + .NOLIST +; + .END diff --git a/Source/HBIOS/util.asm b/Source/HBIOS/util.asm index 2496dd52..6d1ee813 100644 --- a/Source/HBIOS/util.asm +++ b/Source/HBIOS/util.asm @@ -101,8 +101,8 @@ PRTCH: PUSH AF LD A,(HL) CALL COUT - POP AF INC HL + POP AF EX (SP),HL RET ; @@ -554,7 +554,7 @@ BYTE2BCD1: RET #IFDEF USEDELAY - +#IF (CPUFAM != CPU_EZ80) ; ; DELAY 16US (CPU SPEED COMPENSATED) INCUDING CALL/RET INVOCATION ; REGISTER A AND FLAGS DESTROYED @@ -632,6 +632,7 @@ VDELAY1: ; | | ; | RET ; 10TS (FINAL RETURN) | ;---------------------------------------------------------------+ +#ENDIF ; ; DELAY ABOUT 0.5 SECONDS ; 500000US / 16US = 31250 @@ -644,6 +645,7 @@ LDELAY: POP DE POP AF RET +#IF (CPUFAM != CPU_EZ80) ; ; INITIALIZE DELAY SCALER BASED ON OPERATING CPU SPEED ; ENTER WITH A = CPU SPEED IN MHZ @@ -666,6 +668,8 @@ CPUSCL .DB CPUMHZ - 2 ; OTHERWISE 2 LESS THAN PHI MHZ #ENDIF ; #ENDIF +#ENDIF + ; ; SHORT DELAY FUNCTIONS. NO CLOCK SPEED COMPENSATION, SO THEY ; WILL RUN LONGER ON SLOWER SYSTEMS. THE NUMBER INDICATES THE @@ -680,7 +684,13 @@ DLY16: CALL DLY8 ; 432 400 DLY8: CALL DLY4 ; 216 200 DLY4: CALL DLY2 ; 108 100 DLY2: CALL DLY1 ; 54 50 -DLY1: RET ; 27 25 +DLY1: +#IF (CPUFAM == CPU_EZ80) + NOP + NOP + NOP +#ENDIF + RET ; 27 25 ; ; MULTIPLY 8-BIT VALUES ; IN: MULTIPLY H BY E diff --git a/Source/HBIOS/ym2612.asm b/Source/HBIOS/ym2612.asm index a4818364..018729d6 100644 --- a/Source/HBIOS/ym2612.asm +++ b/Source/HBIOS/ym2612.asm @@ -55,6 +55,7 @@ YM_FNTBL: .DW YM_RESET .DW YM_QUERY .DW YM_DURATION .DW YM_DEVICE + .DW YM_BEEP ; #IF (($ - YM_FNTBL) != (SND_FNCNT * 2)) .ECHO "*** INVALID SND FUNCTION TABLE ***\n" @@ -197,6 +198,13 @@ YM_DEVICE: LD D,SNDDEV_YM2612 ; D := DEVICE TYPE RET ; ;------------------------------------------------------------------------------ +; Sound driver function - BEEP +;------------------------------------------------------------------------------ +; +YM_BEEP: + JP SND_BEEP ; DEFER TO GENERIC CODE IN HBIOS +; +;------------------------------------------------------------------------------ ; Sound driver function - RESET ; Initialize device. Set volume off. Reset volume and tone variables. ;------------------------------------------------------------------------------ diff --git a/Source/Images/Build.cmd b/Source/Images/Build.cmd index c19abf07..8e71ce45 100644 --- a/Source/Images/Build.cmd +++ b/Source/Images/Build.cmd @@ -13,17 +13,17 @@ call BuildDisk.cmd zsdos fd wbw_fd144 ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd nzcom fd wbw_fd144 ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd cpm3 fd wbw_fd144 ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd zpm3 fd wbw_fd144 ..\zpm3\zpmldr.sys || exit /b +call BuildDisk.cmd z3plus fd wbw_fd144 ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd ws4 fd wbw_fd144 || exit /b call BuildDisk.cmd qpm fd wbw_fd144 ..\qpm\qpm_wbw.sys || exit /b -call BuildDisk.cmd z80asm hd wbw_fd144 || exit /b -call BuildDisk.cmd aztecc hd wbw_fd144 || exit /b -call BuildDisk.cmd hitechc hd wbw_fd144 || exit /b -call BuildDisk.cmd tpascal hd wbw_fd144 || exit /b -call BuildDisk.cmd bascomp hd wbw_fd144 || exit /b -call BuildDisk.cmd fortran hd wbw_fd144 || exit /b -call BuildDisk.cmd games hd wbw_fd144 || exit /b -call BuildDisk.cmd cowgol hd wbw_fd144 || exit /b - +call BuildDisk.cmd z80asm fd wbw_fd144 || exit /b +call BuildDisk.cmd aztecc fd wbw_fd144 || exit /b +call BuildDisk.cmd hitechc fd wbw_fd144 || exit /b +call BuildDisk.cmd tpascal fd wbw_fd144 || exit /b +call BuildDisk.cmd bascomp fd wbw_fd144 || exit /b +call BuildDisk.cmd fortran fd wbw_fd144 || exit /b +call BuildDisk.cmd games fd wbw_fd144 || exit /b +call BuildDisk.cmd cowgol fd wbw_fd144 || exit /b echo. echo Building Hard Disk Images (512 directory entry format)... @@ -34,6 +34,7 @@ call BuildDisk.cmd zsdos hd wbw_hd512 ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd nzcom hd wbw_hd512 ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd cpm3 hd wbw_hd512 ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd zpm3 hd wbw_hd512 ..\zpm3\zpmldr.sys || exit /b +call BuildDisk.cmd z3plus hd wbw_hd512 ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd ws4 hd wbw_hd512 || exit /b call BuildDisk.cmd dos65 hd wbw_hd512 ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd qpm hd wbw_hd512 ..\qpm\qpm_wbw.sys || exit /b @@ -45,6 +46,8 @@ call BuildDisk.cmd bascomp hd wbw_hd512 || exit /b call BuildDisk.cmd fortran hd wbw_hd512 || exit /b call BuildDisk.cmd games hd wbw_hd512 || exit /b call BuildDisk.cmd cowgol hd wbw_hd512 || exit /b +call BuildDisk.cmd msxroms1 hd wbw_hd512 || exit /b +call BuildDisk.cmd msxroms2 hd wbw_hd512 || exit /b echo. echo Building Combo Disk (512 directory entry format) Image... @@ -59,6 +62,7 @@ call BuildDisk.cmd zsdos hd wbw_hd1k ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd nzcom hd wbw_hd1k ..\zsdos\zsys_wbw.sys || exit /b call BuildDisk.cmd cpm3 hd wbw_hd1k ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd zpm3 hd wbw_hd1k ..\zpm3\zpmldr.sys || exit /b +call BuildDisk.cmd z3plus hd wbw_hd1k ..\cpm3\cpmldr.sys || exit /b call BuildDisk.cmd ws4 hd wbw_hd1k || exit /b call BuildDisk.cmd qpm hd wbw_hd1k ..\qpm\qpm_wbw.sys || exit /b call BuildDisk.cmd z80asm hd wbw_hd1k || exit /b @@ -69,6 +73,8 @@ call BuildDisk.cmd bascomp hd wbw_hd1k || exit /b call BuildDisk.cmd fortran hd wbw_hd1k || exit /b call BuildDisk.cmd games hd wbw_hd1k || exit /b call BuildDisk.cmd cowgol hd wbw_hd1k || exit /b +call BuildDisk.cmd msxroms1 hd wbw_hd1k || exit /b +call BuildDisk.cmd msxroms2 hd wbw_hd1k || exit /b if exist ..\BPBIOS\bp*.rel call BuildDisk.cmd bp hd wbw_hd1k ..\zsdos\zsys_wbw.sys || exit /b diff --git a/Source/Images/BuildDisk.ps1 b/Source/Images/BuildDisk.ps1 index fd8745e3..9f870713 100644 --- a/Source/Images/BuildDisk.ps1 +++ b/Source/Images/BuildDisk.ps1 @@ -25,6 +25,7 @@ switch ($Format) # 1.44MB Floppy Disk $Desc = "1.44MB Floppy Disk" $ImgFile = "fd144_${Disk}.img" + $CatFile = "fd144_${Disk}.cat" $MediaID = 6 $Size = 1440KB } @@ -34,6 +35,7 @@ switch ($Format) # 512 Directory Entry Hard Disk Format $Desc = "Hard Disk (512 directory entry format)" $ImgFile = "hd512_${Disk}.img" + $CatFile = "hd512_${Disk}.cat" $MediaID = 4 $Size = 8MB + 128KB } @@ -43,6 +45,7 @@ switch ($Format) # 1024 Directory Entry Hard Disk Format $Desc = "Hard Disk (1024 directory entry format)" $ImgFile = "hd1k_${Disk}.img" + $CatFile = "hd1k_${Disk}.cat" $MediaID = 10 $Size = 8MB } @@ -96,6 +99,10 @@ if (Test-Path("${Type}_${Disk}.txt")) } } +$Cmd = "cpmls -f $Format -D $ImgFile" +$Cmd +Invoke-Expression $Cmd > $CatFile + "Moving image $ImgFile into output directory..." Move-Item $ImgFile -Destination "..\..\Binary\" -Force diff --git a/Source/Images/BuildMSX.cmd b/Source/Images/BuildMSX.cmd new file mode 100644 index 00000000..a6dfb9d6 --- /dev/null +++ b/Source/Images/BuildMSX.cmd @@ -0,0 +1,10 @@ +@echo off +setlocal + +echo. +echo Building MSX Hard Disk Combo Image (1024 directory entry format)... +echo. + +copy hd1k_prefix.dat ..\..\Binary\ || exit /b + +copy /b hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_msxroms1.img + ..\..\Binary\hd1k_msxroms2.img ..\..\Binary\hd1k_msxcombo.img || exit /b diff --git a/Source/Images/Clean.cmd b/Source/Images/Clean.cmd index 026d5786..e7c7472d 100644 --- a/Source/Images/Clean.cmd +++ b/Source/Images/Clean.cmd @@ -4,3 +4,4 @@ setlocal if exist *.tmp del *.tmp if exist *.img del *.img if exist *.sys del *.sys +if exist *.cat del *.cat diff --git a/Source/Images/Common/All/FLASH.COM b/Source/Images/Common/All/FLASH.COM deleted file mode 100644 index b14d74e3..00000000 Binary files a/Source/Images/Common/All/FLASH.COM and /dev/null differ diff --git a/Source/Images/Common/All/u10/ASCIIART.BAS b/Source/Images/Common/All/u10/ASCIIART.BAS new file mode 100644 index 00000000..c1ecec7c --- /dev/null +++ b/Source/Images/Common/All/u10/ASCIIART.BAS @@ -0,0 +1,20 @@ +10 for y=-12 to 12 +20 for x=-39 to 39 +30 ca=x*0.0458 +40 cb=y*0.08333 +50 a=ca +60 b=cb +70 for i=0 to 15 +80 t=a*a-b*b+ca +90 b=2*a*b+cb +100 a=t +110 if (a*a+b*b)>4 then goto 200 +120 next i +130 print " "; +140 goto 210 +200 if i>9 then i=i+7 +205 print chr$(48+i); +210 next x +220 print +230 next y +999 system diff --git a/Source/Images/Common/All/DDTZ.DOC b/Source/Images/Common/All/u10/DDTZ.DOC similarity index 100% rename from Source/Images/Common/All/DDTZ.DOC rename to Source/Images/Common/All/u10/DDTZ.DOC diff --git a/Source/Images/Common/All/FLASH.DOC b/Source/Images/Common/All/u10/FLASH.DOC similarity index 100% rename from Source/Images/Common/All/FLASH.DOC rename to Source/Images/Common/All/u10/FLASH.DOC diff --git a/Source/Images/Common/All/SUPERSUB.DOC b/Source/Images/Common/All/u10/SUPERSUB.DOC similarity index 100% rename from Source/Images/Common/All/SUPERSUB.DOC rename to Source/Images/Common/All/u10/SUPERSUB.DOC diff --git a/Source/Images/Common/All/UNARC.DOC b/Source/Images/Common/All/u10/UNARC.DOC similarity index 100% rename from Source/Images/Common/All/UNARC.DOC rename to Source/Images/Common/All/u10/UNARC.DOC diff --git a/Source/Images/Common/All/UNZIP.DOC b/Source/Images/Common/All/u10/UNZIP.DOC similarity index 100% rename from Source/Images/Common/All/UNZIP.DOC rename to Source/Images/Common/All/u10/UNZIP.DOC diff --git a/Source/Images/Common/All/ZDE.DOC b/Source/Images/Common/All/u10/ZDE.DOC similarity index 100% rename from Source/Images/Common/All/ZDE.DOC rename to Source/Images/Common/All/u10/ZDE.DOC diff --git a/Source/Images/Common/All/CRUNCH28.CFG b/Source/Images/Common/All/u14/CRUNCH28.CFG similarity index 100% rename from Source/Images/Common/All/CRUNCH28.CFG rename to Source/Images/Common/All/u14/CRUNCH28.CFG diff --git a/Source/Images/Common/All/CLRDIR.COM b/Source/Images/Common/All/u15/CLRDIR.COM similarity index 100% rename from Source/Images/Common/All/CLRDIR.COM rename to Source/Images/Common/All/u15/CLRDIR.COM diff --git a/Source/Images/Common/All/COMPARE.COM b/Source/Images/Common/All/u15/COMPARE.COM similarity index 100% rename from Source/Images/Common/All/COMPARE.COM rename to Source/Images/Common/All/u15/COMPARE.COM diff --git a/Source/Images/Common/All/CRUNCH.COM b/Source/Images/Common/All/u15/CRUNCH.COM similarity index 100% rename from Source/Images/Common/All/CRUNCH.COM rename to Source/Images/Common/All/u15/CRUNCH.COM diff --git a/Source/Images/Common/All/DDTZ.COM b/Source/Images/Common/All/u15/DDTZ.COM similarity index 100% rename from Source/Images/Common/All/DDTZ.COM rename to Source/Images/Common/All/u15/DDTZ.COM diff --git a/Source/Images/Common/All/EX.COM b/Source/Images/Common/All/u15/EX.COM similarity index 100% rename from Source/Images/Common/All/EX.COM rename to Source/Images/Common/All/u15/EX.COM diff --git a/Source/Images/Common/All/FDISK80.COM b/Source/Images/Common/All/u15/FDISK80.COM similarity index 100% rename from Source/Images/Common/All/FDISK80.COM rename to Source/Images/Common/All/u15/FDISK80.COM diff --git a/Source/Images/Common/All/FIND.COM b/Source/Images/Common/All/u15/FIND.COM similarity index 100% rename from Source/Images/Common/All/FIND.COM rename to Source/Images/Common/All/u15/FIND.COM diff --git a/Source/Images/Common/All/u15/FLASH.COM b/Source/Images/Common/All/u15/FLASH.COM new file mode 100644 index 00000000..bd5f0eeb Binary files /dev/null and b/Source/Images/Common/All/u15/FLASH.COM differ diff --git a/Source/Images/Common/UTILS/GENHEX.COM b/Source/Images/Common/All/u15/GENHEX.COM similarity index 100% rename from Source/Images/Common/UTILS/GENHEX.COM rename to Source/Images/Common/All/u15/GENHEX.COM diff --git a/Source/Images/Common/UTILS/LS.COM b/Source/Images/Common/All/u15/LS.COM similarity index 100% rename from Source/Images/Common/UTILS/LS.COM rename to Source/Images/Common/All/u15/LS.COM diff --git a/Source/Images/Common/UTILS/LSWEEP.COM b/Source/Images/Common/All/u15/LSWEEP.COM similarity index 100% rename from Source/Images/Common/UTILS/LSWEEP.COM rename to Source/Images/Common/All/u15/LSWEEP.COM diff --git a/Source/Images/Common/All/MBASIC.COM b/Source/Images/Common/All/u15/MBASIC.COM similarity index 100% rename from Source/Images/Common/All/MBASIC.COM rename to Source/Images/Common/All/u15/MBASIC.COM diff --git a/Source/Images/Common/All/NULU.COM b/Source/Images/Common/All/u15/NULU.COM similarity index 100% rename from Source/Images/Common/All/NULU.COM rename to Source/Images/Common/All/u15/NULU.COM diff --git a/Source/Images/Common/All/PMARC.COM b/Source/Images/Common/All/u15/PMARC.COM similarity index 100% rename from Source/Images/Common/All/PMARC.COM rename to Source/Images/Common/All/u15/PMARC.COM diff --git a/Source/Images/Common/All/PMEXT.COM b/Source/Images/Common/All/u15/PMEXT.COM similarity index 100% rename from Source/Images/Common/All/PMEXT.COM rename to Source/Images/Common/All/u15/PMEXT.COM diff --git a/Source/Images/Common/All/RMXSUB1.COM b/Source/Images/Common/All/u15/RMXSUB1.COM similarity index 100% rename from Source/Images/Common/All/RMXSUB1.COM rename to Source/Images/Common/All/u15/RMXSUB1.COM diff --git a/Source/Images/Common/All/SUPERSUB.COM b/Source/Images/Common/All/u15/SUPERSUB.COM similarity index 100% rename from Source/Images/Common/All/SUPERSUB.COM rename to Source/Images/Common/All/u15/SUPERSUB.COM diff --git a/Source/Images/Common/All/TDLBASIC.COM b/Source/Images/Common/All/u15/TDLBASIC.COM similarity index 100% rename from Source/Images/Common/All/TDLBASIC.COM rename to Source/Images/Common/All/u15/TDLBASIC.COM diff --git a/Source/Images/Common/All/UNARC.COM b/Source/Images/Common/All/u15/UNARC.COM similarity index 100% rename from Source/Images/Common/All/UNARC.COM rename to Source/Images/Common/All/u15/UNARC.COM diff --git a/Source/Images/Common/All/UNCR.COM b/Source/Images/Common/All/u15/UNCR.COM similarity index 100% rename from Source/Images/Common/All/UNCR.COM rename to Source/Images/Common/All/u15/UNCR.COM diff --git a/Source/Images/Common/All/UNZIP.COM b/Source/Images/Common/All/u15/UNZIP.COM similarity index 100% rename from Source/Images/Common/All/UNZIP.COM rename to Source/Images/Common/All/u15/UNZIP.COM diff --git a/Source/Images/Common/All/WDATE.COM b/Source/Images/Common/All/u15/WDATE.COM similarity index 100% rename from Source/Images/Common/All/WDATE.COM rename to Source/Images/Common/All/u15/WDATE.COM diff --git a/Source/Images/Common/All/XSUB1.COM b/Source/Images/Common/All/u15/XSUB1.COM similarity index 100% rename from Source/Images/Common/All/XSUB1.COM rename to Source/Images/Common/All/u15/XSUB1.COM diff --git a/Source/Images/Common/All/ZAP.COM b/Source/Images/Common/All/u15/ZAP.COM similarity index 100% rename from Source/Images/Common/All/ZAP.COM rename to Source/Images/Common/All/u15/ZAP.COM diff --git a/Source/Images/Common/All/ZDE.COM b/Source/Images/Common/All/u15/ZDE.COM similarity index 100% rename from Source/Images/Common/All/ZDE.COM rename to Source/Images/Common/All/u15/ZDE.COM diff --git a/Source/Images/Common/All/ZDENST.COM b/Source/Images/Common/All/u15/ZDENST.COM similarity index 100% rename from Source/Images/Common/All/ZDENST.COM rename to Source/Images/Common/All/u15/ZDENST.COM diff --git a/Source/Images/Common/All/ZMRX.COM b/Source/Images/Common/All/u15/ZMRX.COM similarity index 100% rename from Source/Images/Common/All/ZMRX.COM rename to Source/Images/Common/All/u15/ZMRX.COM diff --git a/Source/Images/Common/All/ZMTX.COM b/Source/Images/Common/All/u15/ZMTX.COM similarity index 100% rename from Source/Images/Common/All/ZMTX.COM rename to Source/Images/Common/All/u15/ZMTX.COM diff --git a/Source/Images/d_nzcom/u0/DOCFILES.LBR b/Source/Images/Common/NZ3PLUS/u10/DOCFILES.LBR similarity index 100% rename from Source/Images/d_nzcom/u0/DOCFILES.LBR rename to Source/Images/Common/NZ3PLUS/u10/DOCFILES.LBR diff --git a/Source/Images/d_nzcom/u0/HLPFILES.LBR b/Source/Images/Common/NZ3PLUS/u10/HLPFILES.LBR similarity index 100% rename from Source/Images/d_nzcom/u0/HLPFILES.LBR rename to Source/Images/Common/NZ3PLUS/u10/HLPFILES.LBR diff --git a/Source/Images/d_nzcom/u0/LSH.WZ b/Source/Images/Common/NZ3PLUS/u10/LSH.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/LSH.WZ rename to Source/Images/Common/NZ3PLUS/u10/LSH.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ.INF b/Source/Images/Common/NZ3PLUS/u10/TCJ.INF similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ.INF rename to Source/Images/Common/NZ3PLUS/u10/TCJ.INF diff --git a/Source/Images/d_nzcom/u0/TCJ25.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ25.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ25.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ25.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ26.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ26.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ26.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ26.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ27.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ27.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ27.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ27.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ28.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ28.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ28.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ28.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ29.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ29.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ29.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ29.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ30.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ30.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ30.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ30.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ31UPD.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ31UPD.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ31UPD.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ31UPD.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ32.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ32.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ32.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ32.WZ diff --git a/Source/Images/d_nzcom/u0/TCJ33UPD.WZ b/Source/Images/Common/NZ3PLUS/u10/TCJ33UPD.WZ similarity index 100% rename from Source/Images/d_nzcom/u0/TCJ33UPD.WZ rename to Source/Images/Common/NZ3PLUS/u10/TCJ33UPD.WZ diff --git a/Source/Images/d_nzcom/u0/ZFILEB38.LZT b/Source/Images/Common/NZ3PLUS/u10/ZFILEB38.LZT similarity index 100% rename from Source/Images/d_nzcom/u0/ZFILEB38.LZT rename to Source/Images/Common/NZ3PLUS/u10/ZFILEB38.LZT diff --git a/Source/Images/d_nzcom/u0/ZHELPERS.LZT b/Source/Images/Common/NZ3PLUS/u10/ZHELPERS.LZT similarity index 100% rename from Source/Images/d_nzcom/u0/ZHELPERS.LZT rename to Source/Images/Common/NZ3PLUS/u10/ZHELPERS.LZT diff --git a/Source/Images/d_nzcom/u0/ZNODES66.LZT b/Source/Images/Common/NZ3PLUS/u10/ZNODES66.LZT similarity index 100% rename from Source/Images/d_nzcom/u0/ZNODES66.LZT rename to Source/Images/Common/NZ3PLUS/u10/ZNODES66.LZT diff --git a/Source/Images/d_nzcom/u0/ZSYSTEM.IZF b/Source/Images/Common/NZ3PLUS/u10/ZSYSTEM.IZF similarity index 100% rename from Source/Images/d_nzcom/u0/ZSYSTEM.IZF rename to Source/Images/Common/NZ3PLUS/u10/ZSYSTEM.IZF diff --git a/Source/Images/d_nzcom/u0/CONFIG.LBR b/Source/Images/Common/NZ3PLUS/u14/CONFIG.LBR similarity index 100% rename from Source/Images/d_nzcom/u0/CONFIG.LBR rename to Source/Images/Common/NZ3PLUS/u14/CONFIG.LBR diff --git a/Source/Images/d_nzcom/u0/ARUNZ.COM b/Source/Images/Common/NZ3PLUS/u15/ARUNZ.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ARUNZ.COM rename to Source/Images/Common/NZ3PLUS/u15/ARUNZ.COM diff --git a/Source/Images/d_nzcom/u0/CLEDINST.COM b/Source/Images/Common/NZ3PLUS/u15/CLEDINST.COM similarity index 100% rename from Source/Images/d_nzcom/u0/CLEDINST.COM rename to Source/Images/Common/NZ3PLUS/u15/CLEDINST.COM diff --git a/Source/Images/d_nzcom/u0/CLEDSAVE.COM b/Source/Images/Common/NZ3PLUS/u15/CLEDSAVE.COM similarity index 100% rename from Source/Images/d_nzcom/u0/CLEDSAVE.COM rename to Source/Images/Common/NZ3PLUS/u15/CLEDSAVE.COM diff --git a/Source/Images/d_nzcom/u0/CPSET.COM b/Source/Images/Common/NZ3PLUS/u15/CPSET.COM similarity index 100% rename from Source/Images/d_nzcom/u0/CPSET.COM rename to Source/Images/Common/NZ3PLUS/u15/CPSET.COM diff --git a/Source/Images/d_nzcom/u0/FCP.LBR b/Source/Images/Common/NZ3PLUS/u15/FCP.LBR similarity index 100% rename from Source/Images/d_nzcom/u0/FCP.LBR rename to Source/Images/Common/NZ3PLUS/u15/FCP.LBR diff --git a/Source/Images/d_nzcom/u0/FF.COM b/Source/Images/Common/NZ3PLUS/u15/FF.COM similarity index 100% rename from Source/Images/d_nzcom/u0/FF.COM rename to Source/Images/Common/NZ3PLUS/u15/FF.COM diff --git a/Source/Images/d_nzcom/u0/IF.COM b/Source/Images/Common/NZ3PLUS/u15/IF.COM similarity index 100% rename from Source/Images/d_nzcom/u0/IF.COM rename to Source/Images/Common/NZ3PLUS/u15/IF.COM diff --git a/Source/Images/d_nzcom/u0/JETLDR.COM b/Source/Images/Common/NZ3PLUS/u15/JETLDR.COM similarity index 100% rename from Source/Images/d_nzcom/u0/JETLDR.COM rename to Source/Images/Common/NZ3PLUS/u15/JETLDR.COM diff --git a/Source/Images/Common/NZ3PLUS/u15/LBRHELP.COM b/Source/Images/Common/NZ3PLUS/u15/LBRHELP.COM new file mode 100644 index 00000000..35f0b6fe Binary files /dev/null and b/Source/Images/Common/NZ3PLUS/u15/LBRHELP.COM differ diff --git a/Source/Images/d_nzcom/u0/LDIR.COM b/Source/Images/Common/NZ3PLUS/u15/LDIR.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LDIR.COM rename to Source/Images/Common/NZ3PLUS/u15/LDIR.COM diff --git a/Source/Images/d_nzcom/u0/LPUT.COM b/Source/Images/Common/NZ3PLUS/u15/LPUT.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LPUT.COM rename to Source/Images/Common/NZ3PLUS/u15/LPUT.COM diff --git a/Source/Images/d_nzcom/u0/LSH-HELP.COM b/Source/Images/Common/NZ3PLUS/u15/LSH-HELP.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LSH-HELP.COM rename to Source/Images/Common/NZ3PLUS/u15/LSH-HELP.COM diff --git a/Source/Images/d_nzcom/u0/LSH.COM b/Source/Images/Common/NZ3PLUS/u15/LSH.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LSH.COM rename to Source/Images/Common/NZ3PLUS/u15/LSH.COM diff --git a/Source/Images/d_nzcom/u0/LSHINST.COM b/Source/Images/Common/NZ3PLUS/u15/LSHINST.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LSHINST.COM rename to Source/Images/Common/NZ3PLUS/u15/LSHINST.COM diff --git a/Source/Images/d_nzcom/u0/LX.COM b/Source/Images/Common/NZ3PLUS/u15/LX.COM similarity index 100% rename from Source/Images/d_nzcom/u0/LX.COM rename to Source/Images/Common/NZ3PLUS/u15/LX.COM diff --git a/Source/Images/d_nzcom/u0/NAME.COM b/Source/Images/Common/NZ3PLUS/u15/NAME.COM similarity index 100% rename from Source/Images/d_nzcom/u0/NAME.COM rename to Source/Images/Common/NZ3PLUS/u15/NAME.COM diff --git a/Source/Images/d_nzcom/u0/PATH.COM b/Source/Images/Common/NZ3PLUS/u15/PATH.COM similarity index 100% rename from Source/Images/d_nzcom/u0/PATH.COM rename to Source/Images/Common/NZ3PLUS/u15/PATH.COM diff --git a/Source/Images/d_nzcom/u0/PWD.COM b/Source/Images/Common/NZ3PLUS/u15/PWD.COM similarity index 100% rename from Source/Images/d_nzcom/u0/PWD.COM rename to Source/Images/Common/NZ3PLUS/u15/PWD.COM diff --git a/Source/Images/d_nzcom/u0/TY3ERA.COM b/Source/Images/Common/NZ3PLUS/u15/TY3ERA.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY3ERA.COM rename to Source/Images/Common/NZ3PLUS/u15/TY3ERA.COM diff --git a/Source/Images/d_nzcom/u0/TY3REN.COM b/Source/Images/Common/NZ3PLUS/u15/TY3REN.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY3REN.COM rename to Source/Images/Common/NZ3PLUS/u15/TY3REN.COM diff --git a/Source/Images/d_nzcom/u0/TY4ERA.COM b/Source/Images/Common/NZ3PLUS/u15/TY4ERA.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY4ERA.COM rename to Source/Images/Common/NZ3PLUS/u15/TY4ERA.COM diff --git a/Source/Images/d_nzcom/u0/TY4REN.COM b/Source/Images/Common/NZ3PLUS/u15/TY4REN.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY4REN.COM rename to Source/Images/Common/NZ3PLUS/u15/TY4REN.COM diff --git a/Source/Images/d_nzcom/u0/TY4SAVE.COM b/Source/Images/Common/NZ3PLUS/u15/TY4SAVE.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY4SAVE.COM rename to Source/Images/Common/NZ3PLUS/u15/TY4SAVE.COM diff --git a/Source/Images/d_nzcom/u0/TY4SP.COM b/Source/Images/Common/NZ3PLUS/u15/TY4SP.COM similarity index 100% rename from Source/Images/d_nzcom/u0/TY4SP.COM rename to Source/Images/Common/NZ3PLUS/u15/TY4SP.COM diff --git a/Source/Images/d_nzcom/u0/VIEW.COM b/Source/Images/Common/NZ3PLUS/u15/VIEW.COM similarity index 100% rename from Source/Images/d_nzcom/u0/VIEW.COM rename to Source/Images/Common/NZ3PLUS/u15/VIEW.COM diff --git a/Source/Images/d_nzcom/u0/XTCAP.COM b/Source/Images/Common/NZ3PLUS/u15/XTCAP.COM similarity index 100% rename from Source/Images/d_nzcom/u0/XTCAP.COM rename to Source/Images/Common/NZ3PLUS/u15/XTCAP.COM diff --git a/Source/Images/d_nzcom/u0/ZERR.COM b/Source/Images/Common/NZ3PLUS/u15/ZERR.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ZERR.COM rename to Source/Images/Common/NZ3PLUS/u15/ZERR.COM diff --git a/Source/Images/d_nzcom/u0/ZF-DIM.COM b/Source/Images/Common/NZ3PLUS/u15/ZF-DIM.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ZF-DIM.COM rename to Source/Images/Common/NZ3PLUS/u15/ZF-DIM.COM diff --git a/Source/Images/d_nzcom/u0/ZF-REV.COM b/Source/Images/Common/NZ3PLUS/u15/ZF-REV.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ZF-REV.COM rename to Source/Images/Common/NZ3PLUS/u15/ZF-REV.COM diff --git a/Source/Images/d_nzcom/u0/ZFILER.CMD b/Source/Images/Common/NZ3PLUS/u15/ZFILER.CMD similarity index 100% rename from Source/Images/d_nzcom/u0/ZFILER.CMD rename to Source/Images/Common/NZ3PLUS/u15/ZFILER.CMD diff --git a/Source/Images/Common/NZ3PLUS/u15/ZHELP.COM b/Source/Images/Common/NZ3PLUS/u15/ZHELP.COM new file mode 100644 index 00000000..6c014ee6 Binary files /dev/null and b/Source/Images/Common/NZ3PLUS/u15/ZHELP.COM differ diff --git a/Source/Images/d_nzcom/u0/ZLT.COM b/Source/Images/Common/NZ3PLUS/u15/ZLT.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ZLT.COM rename to Source/Images/Common/NZ3PLUS/u15/ZLT.COM diff --git a/Source/Images/d_nzcom/u0/SHOW.COM b/Source/Images/Common/NZ3PLUS/u15/ZSHOW.COM similarity index 100% rename from Source/Images/d_nzcom/u0/SHOW.COM rename to Source/Images/Common/NZ3PLUS/u15/ZSHOW.COM diff --git a/Source/Images/Test/z80ccf.com b/Source/Images/Common/Test/z80ccf.com similarity index 100% rename from Source/Images/Test/z80ccf.com rename to Source/Images/Common/Test/z80ccf.com diff --git a/Source/Images/Test/z80doc.com b/Source/Images/Common/Test/z80doc.com similarity index 100% rename from Source/Images/Test/z80doc.com rename to Source/Images/Common/Test/z80doc.com diff --git a/Source/Images/Test/z80docf.com b/Source/Images/Common/Test/z80docf.com similarity index 100% rename from Source/Images/Test/z80docf.com rename to Source/Images/Common/Test/z80docf.com diff --git a/Source/Images/Test/z80flags.com b/Source/Images/Common/Test/z80flags.com similarity index 100% rename from Source/Images/Test/z80flags.com rename to Source/Images/Common/Test/z80flags.com diff --git a/Source/Images/Test/z80full.com b/Source/Images/Common/Test/z80full.com similarity index 100% rename from Source/Images/Test/z80full.com rename to Source/Images/Common/Test/z80full.com diff --git a/Source/Images/Test/z80mptr.com b/Source/Images/Common/Test/z80mptr.com similarity index 100% rename from Source/Images/Test/z80mptr.com rename to Source/Images/Common/Test/z80mptr.com diff --git a/Source/Images/Common/Test/zexall.com b/Source/Images/Common/Test/zexall.com new file mode 100644 index 00000000..547a83fd Binary files /dev/null and b/Source/Images/Common/Test/zexall.com differ diff --git a/Source/Images/Common/Test/zexdoc.com b/Source/Images/Common/Test/zexdoc.com new file mode 100644 index 00000000..faf57ae0 Binary files /dev/null and b/Source/Images/Common/Test/zexdoc.com differ diff --git a/Source/Images/Common/UTILS/BBCBASIC.COM b/Source/Images/Common/UTILS/BBCBASIC.COM deleted file mode 100644 index f7496f6b..00000000 Binary files a/Source/Images/Common/UTILS/BBCBASIC.COM and /dev/null differ diff --git a/Source/Images/Common/UTILS/BBCBASIC.TXT b/Source/Images/Common/UTILS/BBCBASIC.TXT deleted file mode 100644 index 84a28f89..00000000 --- a/Source/Images/Common/UTILS/BBCBASIC.TXT +++ /dev/null @@ -1,369 +0,0 @@ - BBC BASIC (Z80) - - Generic CP/M Version 3.00 - - (C) Copyright R.T.Russell 1982-1999 - -1. INTRODUCTION - - BBC BASIC (Z80) has been designed to be as compatible as possible with - Version 4 of the 6502 BBC BASIC resident in the BBC Micro Master series. - The language syntax is not always identical to that of the 6502 version, - but in most cases the Z80 version is more tolerant. - - BBC BASIC (Z80) is as machine independent as possible and, as supplied, - it will run on any CP/M 2.2 (or later) system using a Z80 processor - (checks are carried out to ensure that the processor is a Z80 and that - the version of CP/M is at least 2.2). It is minimally configured for an - ADM3a-compatible VDU. - - Few CP/M systems offer colour graphics of the quality provided as - standard on the BBC Microcomputer, and no software can provide colour - high-resolution graphics from a monochrome character-orientated computer. - However, many CP/M system users are interested in the advanced program - structures available from BBC BASIC and, within the limitations of the - host computer, BBC BASIC (Z80) provides the programming structures and - the non-graphic commands and functions specified for BBC BASIC. - - In order to make full use of the facilities available in BBC BASIC (Z80) - it is necessary to install a small patch to adapt it to the capabilities - of the host computer. The source code of the patch present in the - distribution version is supplied as BBCDIST.MAC. - - This documentation should be read in conjunction with a standard BBC - BASIC manual. Only those features which differ from the standard Acorn - versions are documented here. - - -2. MEMORY UTILISATION - - BBC BASIC (Z80) requires about 16 Kbytes of code space, resulting in a - value of PAGE of about &3E00. The remainder of the user memory is - available for BASIC programs, variables (heap) and stack. Depending on - the system configuration, HIMEM can have a value up to &FE00. - - -3. COMMANDS, STATEMENTS AND FUNCTIONS - - The syntax of BASIC commands, statements and functions is in most cases - identical to that of the BBC Micro version (BASIC 4). The few - differences are documented here: - - ADVAL - This function is not implemented. - - CALL - CALL sets up a table in RAM containing details of the parameters; the - processor's IX register is set to the address of this parameter table. - The other processor registers are initialised as follows: - - A is initialised to the least significant byte of A% - B is initialised to the least significant byte of B% - C is initialised to the least significant byte of C% - D is initialised to the least significant byte of D% - E is initialised to the least significant byte of E% - F is initialised to the least significant byte of F% - H is initialised to the least significant byte of H% - L is initialised to the least significant byte of L% - - The parameter types are: - - Code No. Parameter Type Example - 0 Byte (8 bits) ?A% - 4 Word (32 bits) !A% or A% - 5 Real (40 bits) A - 128 Fixed string $A% - 129 Movable string A$ - - On entry to the subroutine the parameter table contains the following - values: - - Number of parameters 1 byte (at IX) - - Parameter type 1 byte (at IX+1) - Parameter address 2 bytes (at IX+2, IX+3, LSB first) - - Parameter type ) repeated as often as necessary - Parameter address ) - - Except in the case of a movable string (normal string variable), the - parameter address given is the absolute address at which the item is - stored. In the case of movable strings (type 129) it is the address of a - 4-byte parameter block containing the current length, the maximum length - and the start address of the string (LSB first) in that order. - - Integer variables are stored in twos complement form with their least - significant byte first. - - Fixed strings are stored as the characters of the string followed by a - carriage return (&0D). - - Floating point variables are stored in binary floating point format with - their least significant byte first; the fifth byte is the exponent. The - mantissa is stored as a binary fraction in sign and magnitude format. - Bit 7 of the most significant byte is the sign bit and, for the purposes - of calculating the magnitude of the number, this bit is assumed to be set - to one. The exponent is stored as an integer in excess 127 format (to - find the exponent subtract 127 from the value in the fifth byte). - - If the exponent byte of a floating point number is zero, the number is an - integer stored in integer format in the mantissa bytes. Thus an integer - can be represented in two different ways in a real variable. For example - the value +5 can be stored as: - - 05 00 00 00 00 Integer 5 - 00 00 00 20 82 (0.5 + 0.125) * 2^3 - - COLOUR (COLOR) - This statement is not implemented. - - DRAW - This statement is not implemented. - - EDIT - A command to edit or concatenate and edit the specified program line(s). - The specified lines (including their line numbers) are listed as a single - line. By changing only the line number you can use EDIT to duplicate a - line. - - EDIT 230 - EDIT 200,230 - - The following control functions are active both in the EDIT mode and in - the immediate entry mode (i.e. at the BASIC prompt): - - Move the cursor one character position to the left - Move the cursor one character position to the right - Move the cursor to the start of the line - Move the cursor to the end of the line - Insert a space at the current cursor position - Delete the character at the current cursor position - Backspace and delete the character to the left of the cursor - Delete all characters to the left of the cursor - Delete all characters from the cursor to the end of the line - - The choice of which keys activate these functions is made when BBC BASIC - is configured for a particular system. The distribution version uses ^H, - ^I, ^K, ^J, ^A, ^E, DEL (&7F), ^L and ^X. - - To exit EDIT mode and replace the edited line, type RETURN (ENTER). - - To abort the edit and leave the line unchanged, type ESCape. - - ENVELOPE - This statement is not implemented. - - GET - This function waits for a character to be typed at the keyboard, and - returns the ASCII code. - - GET can also be used to read data from a processor I/O port; full 16-bit - port addressing is available: - - N% = GET(X%) : REM input from port X% - - INKEY - This function waits for a specified maximum number of centiseconds for a - character to be typed at the keyboard. If no character is typed in that - time, the value -1 is returned. In the distribution version the delay is - determined by a simple software timing loop, and may be very inaccurate. - The customisation patch allows this to be adjusted to suit the system in - use. - - INPUT# - The format of data files is different from that used by the BBC Micro, in - part to improve compatibility with standard CP/M files. Numeric values - are stored as five bytes in the format documented under CALL; if the - fifth byte is zero the value is an integer. Strings are stored as the - characters of the string (in the correct order!) followed by a carriage - return (&0D). - - MODE - This statement is not implemented. - - MOVE - This statement is not implemented. - - PLOT - This statement is not implemented. - - POINT - This function is not implemented. - - PRINT# - The format of data files is different from that used by the BBC Micro, in - part to improve compatibility with standard CP/M files. Numeric values - are stored as five bytes in the format documented under CALL; if the - fifth byte is zero the value is an integer. Strings are stored as the - characters of the string (in the correct order!) followed by a carriage - return (&0D). - - PUT - A statement to output data to a processor port. Full 16-bit addressing - is available. - - PUT A%,N% : REM Output N% to port A% - - SOUND - This statement is not implemented. - - TIME - This pseudo-variable is not implemented in the distribution version, but - can be supported by means of the customisation patch. See BBCDIST.MAC. - - USR - As with CALL, the processor's registers are initialised as follows: - - A is initialised to the least significant byte of A% - B is initialised to the least significant byte of B% - C is initialised to the least significant byte of C% - D is initialised to the least significant byte of D% - E is initialised to the least significant byte of E% - F is initialised to the least significant byte of F% - H is initialised to the least significant byte of H% - L is initialised to the least significant byte of L% - - USR returns a 32-bit integer result composed of the processor's H, L, H' - and L' registers, with H being the most significant. - - -4. RESIDENT Z80 ASSEMBLER - - The in-line assembler is accessed in exactly the same way as the 6502 - assembler in the BBC Micro version of BBC BASIC. That is, '[' enters - assembler mode and ']' exits assembler mode. - - All standard Zilog mnemonics are accepted: ADD, ADC and SBC must be - followed by A or HL. For example, ADD A,C is accepted but ADD C is not. - However, the brackets around the port number in IN and OUT are optional. - Thus both OUT (5),A and OUT 5,A are accepted. The instruction IN F,(C) - is not accepted, but the equivalent code is produced from IN (HL),C - - The pseudo-ops DEFB, DEFW and DEFM are included. DEFM works like EQUS in - the 6502 version. - - -5. OPERATING SYSTEM INTERFACE - - The following resident Operating System ("star") commands are - implemented. They may be accessed directly (e.g. *BYE) or via the OSCLI - statement (OSCLI "BYE"). - - Control characters, lower-case characters, DEL and quotation marks may be - incorporated in filenames by using the 'escape' character '|'. However, - there is no equivalent to the BBC Microcomputer's '|!' to set bit 7. - - *BYE - Returns control to the operating system (CP/M). - - *CPM - Same as *BYE. - - *. [filespec] - *DIR [filespec] - List the files which match the (optional) ambiguous filespec. If the - filespec is omitted, all .BBC files are listed: - *DIR List all .BBC files on the disk - *DIR B:*.* List all files on disk B: - *.*.* List all files on the current disk - - *DRIVE d: - Select drive d as the default drive for subsequent disk operations. - - *ERA filespec - Erase (delete) the specified disk file or files. The extension defaults - to .BBC if omitted. - - *ESC [ON|OFF] - *ESC OFF disables the abort action of the ESCape key; after *ESC OFF the - ESCape key simply returns the ASCII code ESC (27). *ESC ON, or *ESC, - restores the normal action of the ESCape key. - - *EXEC filespec - Accept console input from the specified file instead of from the - keyboard. If the extension is omitted, .BBC is assumed. - - *LOAD filespec aaaa - Loads the specified file into memory at address aaaa. The load address - must be specified. If the extension is omitted, .BBC is assumed. - - *OPT [n] - Select the destination for console output characters. The value n is in - the range 0 to 2, as follows: - - 0 Send characters to the console output - 1 Send characters to the auxiliary output - 2 Send characters to the printer (list) output - - *REN newfile=oldfile - *RENAME newfile=oldfile - Renames 'oldfile' as 'newfile'. If the extension is omitted, .BBC is - assumed. - - *RESET - Rest the disk system (CP/M function 13). This command does not close any - files nor does it perform any other housekeeping function. You should - use *RESET after you have changed a disk. - - *SAVE filespec aaaa bbbb - *SAVE filespec aaaa +llll - This command saves a specified range of memory to disk. The address range - is specified either as start (aaaa) and end+1 (bbbb) or as start (aaaa) - and length (llll). If the extension is omitted, .BBC is assumed. - - *SPOOL [filespec] - Copy all subsequent console output to the specified file. If the filename - is omitted, any current spool file is closed and spooling is terminated. - If the extension is omitted, .BBC is assumed. - - *TYPE filespec - Type the specified file to the screen. If the extension is omitted, .BBC - is assumed. - - *| comment - This is a comment line. Anything following the | is ignored. - - -6. ERROR MESSAGES AND CODES - - Untrappable: - - No room RENUMBER space - Silly LINE space - Sorry Bad program - - Trappable - BASIC: - - 1 Out of range 24 Exp range - 2 25 - 3 26 No such variable - 4 Mistake 27 Missing ) - 5 Missing , 28 Bad HEX - 6 Type mismatch 29 No such FN/PROC - 7 No FN 30 Bad call - 8 31 Arguments - 9 Missing " 32 No FOR - 10 Bad DIM 33 Can't match FOR - 11 DIM space 34 FOR variable - 12 Not LOCAL 35 - 13 No PROC 36 No TO - 14 Array 37 - 15 Subscript 38 No GOSUB - 16 Syntax error 39 ON syntax - 17 Escape 40 ON range - 18 Division by zero 41 No such line - 19 String too long 42 Out of DATA - 20 Too big 43 No REPEAT - 21 -ve root 44 - 22 Log range 45 Missing # - 23 Accuracy lost - - Trappable - OS: - - 190 Directory full 214 File not found - 192 Too many open files 222 Channel - 196 File exists 253 Bad string - 198 Disk full 254 Bad command - 200 Close error 255 CP/M error - 204 Bad name - \ No newline at end of file diff --git a/Source/Images/Common/UTILS/BBCDIST.MAC b/Source/Images/Common/UTILS/BBCDIST.MAC deleted file mode 100644 index 6df1c9a6..00000000 --- a/Source/Images/Common/UTILS/BBCDIST.MAC +++ /dev/null @@ -1,225 +0,0 @@ - TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982 -; -;BBC BASIC (Z80) - CP/M VERSION 2.30 & 3.00 -;(C) COPYRIGHT R.T.RUSSELL, 1982. -;ALL RIGHTS RESERVED. -; -;THIS PROGRAM ALLOWS THE USER TO ADAPT BBC BASIC TO THE -;PARTICULAR CHARACTERISTICS OF HIS SYSTEM HARDWARE ETC. -; -;THE PROGRAM RESIDES AT 100H FOR EASE OF LOADING. -;*** IT MUST NOT EXCEED 256 BYTES IN TOTAL LENGTH *** -; -;PLEASE NOTE THAT A Z80 PROCESSOR AND CP/M VERSION 2.2 -;OR LATER ARE REQUIRED. -; -;R.T.RUSSELL, 11-03-1984, 03-05-1989 -;ALTERNATE REGISTERS SAVED FOR BDOS CALL, 04-06-2000 -; -CPM EQU 5 -COLD EQU 200H -; - GLOBAL CLRSCN - GLOBAL PUTCSR - GLOBAL GETCSR - GLOBAL PUTIME - GLOBAL GETIME - GLOBAL GETKEY - GLOBAL BYE -; - ASEG - ORG 100H -; -;JUMP TABLE - BASIC makes calls to hardware-dependent -;features via this table: -; - JP INIT -CLRSCN: JP CLS ;CLEAR SCREEN -PUTCSR: JP PCSR ;SET CURSOR POSN. -GETCSR: JP GCSR ;READ CURSOR POSN. -PUTIME: JP PTIME ;SET ELAPSED TIME -GETIME: JP GTIME ;READ ELAPSED TIME -GETKEY: JP INKEY ;READ KEY (TIME LIMIT) -BYE: JP REBOOT ;RETURN TO CP/M -; -;THE CODE WHICH FOLLOWS IS A SKELETON VERSION SUITABLE -;FOR ANY CP/M SYSTEM. IT HAS BEEN CONFIGURED FOR A VT100 TO SOME DEGREE -;BY PETER SCHORN. -; - -PRSTR EQU 9 - -;INIT - Perform hardware initialisation (if any). -; -INIT: LD A,2 - INC A - LD DE,NOTZ80 - JP PE,FAIL - LD C,12 - CALL BDOS - OR A - LD DE,NOTV2 - JP NZ,COLD -FAIL: LD C,PRSTR - CALL BDOS - RST 0 -; -NOTZ80: DEFB 'Wrong processor$' -NOTV2: DEFB 'Wrong CP/M version$' -; -;REBOOT - Switch off interrupts and return to CP/M -; -REBOOT: RST 0 -; -;GTIME - Read elapsed-time clock. -; Outputs: DEHL = elapsed time (centiseconds) -; Destroys: A,D,E,H,L,F -; -GTIME: LD DE,0 - LD HL,0 - RET -; -;PTIME - Load elapsed-time clock. -; Inputs: DEHL = time to load (centiseconds) -; Destroys: A,D,E,H,L,F -; -PTIME: RET -; -;CLS - Clear screen for VT100. -; Destroys: A,D,E,H,L,F -; -CLS: PUSH BC ; save BC - LD C,PRSTR ; command for output string - LD DE,CLSSTR ; start address of string - CALL BDOS ; output to terminal - POP BC ; restore BC - RET -CLSSTR: DEFB 27,'[2J$' ; VT100 string for clear screen - -; -;INKEY - Sample keyboard with specified wait. -; This version uses a simple software timing loop. -; Modify to use hardware/interrupt timer if available. -; Inputs: HL = Time to wait (centiseconds) -; Outputs: Carry reset indicates time-out. -; If carry set, A = character typed. -; Destroys: A,D,E,H,L,F -; -INKEY: PUSH BC - PUSH HL - LD C,6 - LD E,0FFH - CALL BDOS ;CONSOLE INPUT - POP HL - POP BC - OR A - SCF - RET NZ ;KEY PRESSED - OR H - OR L - RET Z ;TIME-OUT - PUSH BC - LD A,-1 - LD BC,1250 ;DELAY CONSTANT -WAIT: DEC BC - CP B - JP NZ,WAIT ;WAIT FOR APPROX 10ms - POP BC - DEC HL - JR INKEY -; -;PCSR - Move cursor to specified position. -; Inputs: DE = horizontal position (LHS=0) -; HL = vertical position (TOP=0) -; called by TAB(column, row) -PCSR: LD B,L ; vertical = line (row) - CALL CONV ; normalized and convert to decimal - LD (LIN),HL ; and store into string - LD B,E ; horizontal = column - CALL CONV ; normalized and convert to decimal - LD (COL),HL ; and store into string - LD C,PRSTR ; output string command - LD DE,CURS ; start of string - JR BDOS ; output string to terminal - -; VT100 sequence for cursor positioning -CURS: DEFB 27, '[' -LIN: DEFW 0 ; high byte, low byte for decimal line - DEFB ';' -COL: DEFW 0 ; high byte, low byte for decimal column - DEFB 'H$' - -; convert binary B (0 <= B < 99, not checked) into B+1 in decimal. -; L = upper byte, H = lower byte. ready for LD (...), HL -; destroys A, B, L, H -; optimized for space over time -CONV: INC B ; normalize, home in VT100 is (1,1) - LD A,'0' ; A is counter for low byte of result - LD L,A ; L is counter for high byte of result -CONVLP: INC A ; now B times increment AL in decimal - CP '9'+1 ; low byte overflow? - JR NZ,CONT ; no, continue incrementing - LD A,'0' ; reset low byte - INC L ; and increment high byte -CONT: DJNZ CONVLP ; B times - LD H,A ; put low byte into right place - RET - - -;BDOS - Save the IX and IY and alternate registers -; before performing a CP/M function call. -; -BDOS: PUSH IX - PUSH IY - EXX - PUSH BC - PUSH DE - PUSH HL - EXX - EX AF,AF' - PUSH AF - EX AF,AF' - CALL CPM - EX AF,AF' - POP AF - EX AF,AF' - EXX - POP HL - POP DE - POP BC - EXX - POP IY - POP IX - RET - - -;GCSR - Return cursor coordinates. -; Outputs: DE = X coordinate (POS) -; HL = Y coordinate (VPOS) -; Destroys: A,D,E,H,L,F -; -GCSR: LD DE,0 - LD HL,0 - RET -; - IF $ GT 1F4H - ERROR 'INSUFFICIENT SPACE' - ENDIF -; - ORG 1F4H -; - DEFB 80 ;WIDTH - DEFB 'E' AND 1FH ;CURSOR UP - DEFB 'X' AND 1FH ;CURSOR DOWN - DEFB 'A' AND 1FH ;START OF LINE - DEFB 'F' AND 1FH ;END OF LINE - DEFB 'T' AND 1FH ;DELETE TO END OF LINE - DEFB 'H' AND 1FH ;BACKSPACE - DEFB 'U' AND 1FH ;CANCEL LINE - DEFB 'S' AND 1FH ;CURSOR LEFT - DEFB 'D' AND 1FH ;CURSOR RIGHT - DEFB 'G' AND 1FH ;DELETE CHARACTER - DEFB 'V' AND 1FH ;INSERT CHARACTER -; -FIN: END - \ No newline at end of file diff --git a/Source/Images/Common/UTILS/BBCDIST.SUB b/Source/Images/Common/UTILS/BBCDIST.SUB deleted file mode 100644 index d438ba7b..00000000 --- a/Source/Images/Common/UTILS/BBCDIST.SUB +++ /dev/null @@ -1,13 +0,0 @@ -; patch BBCBASIC with BBCDIST -; need M80 and L80 -xsub -m80 =bbcdist/z -l80 bbcdist,bbcdist/n/e -ddt bbcbasic.org -ibbcdist.com -r -g0 -save 58 bbcbasic.com -era bbcdist.rel -era bbcdist.com - \ No newline at end of file diff --git a/Source/Images/d_zpm3/u14/COPY.CFG b/Source/Images/Common/Z/u14/COPY.CFG similarity index 100% rename from Source/Images/d_zpm3/u14/COPY.CFG rename to Source/Images/Common/Z/u14/COPY.CFG diff --git a/Source/Images/d_zpm3/u14/ZCNFG24.CFG b/Source/Images/Common/Z/u14/ZCNFG24.CFG similarity index 100% rename from Source/Images/d_zpm3/u14/ZCNFG24.CFG rename to Source/Images/Common/Z/u14/ZCNFG24.CFG diff --git a/Source/Images/d_zsdos/u0/COPY.COM b/Source/Images/Common/Z/u15/COPY.COM similarity index 100% rename from Source/Images/d_zsdos/u0/COPY.COM rename to Source/Images/Common/Z/u15/COPY.COM diff --git a/Source/Images/d_zsdos/u0/ZCNFG.COM b/Source/Images/Common/Z/u15/ZCNFG.COM similarity index 100% rename from Source/Images/d_zsdos/u0/ZCNFG.COM rename to Source/Images/Common/Z/u15/ZCNFG.COM diff --git a/Source/Images/Common/Z3/u10/ALIAS.HLP b/Source/Images/Common/Z3/u10/ALIAS.HLP new file mode 100644 index 00000000..b41d8e90 --- /dev/null +++ b/Source/Images/Common/Z3/u10/ALIAS.HLP @@ -0,0 +1,167 @@ +; + + The ZCPR3 ALIAS Facility + + A - The ALIAS Command + + E - ALIAS Examples + + S - Summary of ALIAS Variables + +:A + +Command: ALIAS 1.1 + +Syntax: + + ALIAS <-- Define New Command +or + ALIAS dir:ufn <-- Redefine Old Command + +Function: + + Th ALIA facilit i th scrip expansio utilit o +ZCPR3 A Alia i CO fil create b th ALIA progra +whic蠠 contain on o mor command (separate䠠 b +semicolons t b place i th Comman Lin Buffer Whe +th Alia i invoked parameter fro th comman lin ar +implante int th scrip containe withi th Alias an +th resultin ne comman lin i place int th Comman +Lin Buffe an executed. + + +Options: + None + +Comments: + + ZCPR MUS b implemente wit a Externa Comman Lin +Buffer in order for ALIAS to work. + + Th scrip o th interna comman lin support +paramete passin i manne simila t ZE an SUB Th +variable $n wher < < 9 ma b place int th +script an th correspondin parameter wil b substitute +fo th indicate variables Th variabl $ i th nam o +th Alia itself Th variabl $ i th entir tai o th +command line. + + + Tw additiona variables $ an $U ar available +$Ġ expand int th lette o th dis whic wa logge i +a th tim th Alia wa expande (th hom disk) an $ +expand int numbe (i ASCI chars representin th use +are whic wa logge i a th tim th Alia wa expande +(the home user). + + Th ZCPR Syste fil name ar availabl t th Alia +a th variable $F an $Nn wher < < 4 $F refer +t FILENAME.TY o Syste Fil 1 $N refer t FILENAM o +Syste Fil 2 etc Not tha th SETFIL comman i use +to define the contents of the System file names. + + '$$' expands into a single '$'. + + + Summary of Alias Variables + + $0 - Name of Alias + $n - Parameter from Command Line (1 <= n <= 9) + + $* - Tail of Command Line (everything after the verb) + + $D - Home Disk + $U - Home User + + $Fn - FILENAME.TYP of System File n (1 <= n <= 4) + $Nn - FILENAME of System File n + + $$ - The character '$' + + +Selected Error Messages: + + "Ovfl mean tha th expande comman line combine +wit th remainde o th content o th comman lin +buffer, is too long to fit in the command line buffer. + +Examples of Use: + + ALIAS + -- define Alias + + ALIAS alias + -- display script of "alias.COM" and edit + +:S + + Summary of Alias Variables + + $0 - Name of Alias + $n - Parameter from Command Line (1 <= n <= 9) + + $* - Tail of Command Line (everything after the verb) + + $D - Home Disk + $U - Home User + + $Fn - FILENAME.TYP of System File n (1 <= n <= 4) + $Nn - FILENAME of System File n + + $$ - The character '$' + +:E + + Examples of Aliases + +Case 1: + + Th use i constantl issuin th followin command +in the order indicated: + + ASM myfile.BBZ + LOAD myfile + + He can generalize it with the following Alias script: + + ASM $1.BBZ;LOAD $1 + + If this Alias is named MYASM.COM, then typing + +"MYASM test" will be equivalent to "ASM test.BBZ;LOAD test" + + +Case 2: + + Th use ha tw printer o hi system H i usin +redirectabl I/ a implemente unde ZCPR3 an h ha tw +version o Wor Sta (trademark Micropro - on fo eac +printer H ca creat a Alia containin th followin +script: + + Script Meaning + + I NEC=$ Chec t se i 2n par i NEC + DEV L NEC If so, assign LST to NEC + WSN $1 and run NEC version of WS + ELSE If not ... + DEV L TTY assign LST to TTY + WST $1 and run TTY version of WS + FI + + If the Alias was named WSTAR, then: + + "WSTAR myfile.txt" + +would be equivalent to + + DEV L TTY;WST myfile.txt + +and + + "WSTAR myfile.txt NEC" + +would be equivalent to + + DEV L NEC;WSN myfile.txt + \ No newline at end of file diff --git a/Source/Images/Common/Z3/u10/SALIAS.HLP b/Source/Images/Common/Z3/u10/SALIAS.HLP new file mode 100644 index 00000000..4a16ea61 --- /dev/null +++ b/Source/Images/Common/Z3/u10/SALIAS.HLP @@ -0,0 +1,284 @@ +; +======= S S H E L P ======= + + 1 Genera Information + + 2 Comman Lin Syntax + + 3 Fil Mode + + 4 Edi Mode + + 5 Indentation + + 6 Miscellany + + 7 Prin + + 8 Messages + + 9 Installation +:1 +GENERA INFORMATION + + SALIAS Verion 1.6 - SCREEN ORIENTED ALIAS EDITOR + Ro Friefel Septembe 12 1992 + + +SALIA i ful scree edito fo creatin an modifyin stan- +alon aliases Thi fil describe th us o SALIAS B sur +t rea ALIAS.NO o ALIAS.HL fo informatio o usin th +executabl alia progra writte b SALIAS. + + +System Requirements: + + TCAP support for CLS, EREOL, and addressable cursor. The CRT + in use must have at least 79 columns by 6 lines. Standout + mode must not use space on the screen. The help screen will + not appear if the screen has less than 24 lines. + +Alia Module: + +SALIA use a interna alia templat o th ALIAS1 type +recentl writte b Jo Wright Yo ca lin SALIAS16.RE +wit ne alia module a the ar developed On importan +sid effect O exitin SALIAS G wil no execut th +alia jus writte rathe tha rerunnin SALIA a yo migh +expect + + +SALIAS writes out a stand alone alias with its own internal alias +program. It does not simply edit the alias script. In other +words, all old aliases are converted to the newer program by +SALIAS. + + OL ALIAS SALIAS NE ALIAS + + *------------------* +*----------------* |*----------------*| *----------------* +|*--------------*| ||*--------------*|| |*--------------*| +|| Alias Scrip ||--->|| Alias Scrip |||---->| Alias Script || +|*--------------*| ||*--------------*|| |*--------------*| +| Alias Program | || Alias Progra ||----> Alias Program | +*----------------* |*----------------*| *----------------* + | Alias Editor | + *------------------* + + +USIN SALIAS16.REL + +SALIAS 1.6 is distributed in M-REL format so that it can easily +be linked with new or experimental alias modules (and with new +system library versions). The alias actually written to disk +makes up the first few records of the program. In this case, it +is Joe Wright's alias module from ALIAS 1.5. + + SLRNKP SALIAS/N,/A:100/J,ALIAS0,SALIAS16,/E + or + ZML SALIAS=ALIAS0,SALIAS16 + or + LINK SALIAS=ALIAS0,SALIAS16[NR] + +SALIAS16.REL requests VLIB,Z3LIB, and SYSLIB. + +By tradition, the alias module is expected to be 8 records in +length or less. SALIAS and its installation program require only +that the alias module end on a record boundary and be no more +than a few kbytes in size. + +SAINST.COM reads the entire SALIAS program, looks for a signature +string at SALIAS's installation table, then writes back your +changes to that particular record. In other words, the alias +module can change size and the installation program still works +on the SALIAS you generate. Unfortunately, M-REL files cannot be +installed directly. + +Any alias experimentation should be based on ALIAS0. SALIAS +expects the general structure and public declarations you will +find in this module. + +Thanks to Joe Wright for permission to combine his interesting +new alias program with the SALIAS editor. + + + ...more + + + + + ------------------------------------------------------------- + + + COPYRIGHT NOTICE + + SALIAS 1.6 is copyright (C) 1992 by Rob Friefeld. + All rights reserved. + + Sale or distribution of this copyrighted material with a + commercial product is prohibited without the prior written + consent of the author Thi copyrigh doe no exten t + an alia create wit th SALIA program. + + Rob Friefeld, 4607 Colorado Street, Long Beach, CA 90814 + + --------------------------------------------------------------- +:2 +COMMAN LIN SYNTAX + + + + +Syntax: SALIAS [[dir:]aliasname[.COM]] + + SALIAS assumes all files are of type COM. The specified + alias will be loaded for editing, or created if it does not + exist. If no alias name is given on the command line, it may + be supplied on exit. +:3 +FIL MODE + +Th alia scrip i displaye o scree wit functio men +alon th botto listin singl lette command whic contro +fil maintenance Th scrip i actuall edite i Edi Mode. + + + + A ADD - Add the script of another alias. + C CLEAR - Clear script. UNDO recovers. + E EDIT - Enter full screen editor. + F FORMAT - Reformat the script, one command per line. + I INDENT - Format and indent by IF level. + L LOAD - Clear script and load an alias for editing. + M MODE - Select Normal or Recursive mode (toggle). + N NAME - Select a new name (or DIR:) for the script. + P PRINT - Send the script to printer or to a text file. + S SAVE - Format and WRITE the alias to disk. + U UNDO - Cancel unsaved changes to script. +:4 +EDI MODE + Th scrip edito i WordStar-simila i operation. + +CURSOR: INSERTION: + ^R - top of screen ^V - insert/overwrite + ^E - line up - insert line + ^N - insert line +^S - char ^ ^D - char DELETION: + < $ > ^G - delete char at cursor +^A - word v ^F - word DEL - delete char left + ^T - delete word right + ^X - line down ^Y - delete line + ^C - first blank line ^QY - delete to EOLN + FIND/REPLACE: + ^QF - find string +^QS, ^QD - SOLN, EOLN ^QA - find/replace string +^QZ - Clear (Zap) script ^L - repeat find/replace +^ Help CONTROL CHAR ENTRY: + ^P^n - ^n is ctl char + - Indent lin HELP: + - FILE mod ^ Sho comman keys + + + + +All File Mode functions are accessible from the editor: + + ^KX - Save & Quit SALIAS + ^KD - Save & Clear Editor + ^KS - Save & Resume on current script + ^KQ - Quit + ^KR - Read an alias, or add one to current script + ^KN - ReName script + ^KI - Indent by IF level + ^KU - Undo + ^KP - Print to list device or disk +:5 +INDENTATION + + + +TA i intende fo visua indentatio o I levels TA look +lik blanks bu i no actuall adde t th script +Automati indentatio wit INDEN give th scrip Pasca-lik +appearance. + + comman lin ma star wit REA blan i orde t invok +th extende comman processor. +:6 +MISCELLANY + +Comman line longe tha th scree widt ar indicate wit +"> a th righ margin Th lin wil scrol horizontall +whe th curso reache th scree boundary ^P a th star o + lin append i t th previou lin withou comman +separato (";") Thi optio keep th entir scrip visible. + +FIND/REPLACE can be used to replicate a string. + + Example <^Q^A selects it. + + +CL OVERFLOW n CHARS. SAVE ANYWAY (y/N): + The command line is too long by n characters. If the SAVE is +not aborted, the alias probably won't run. If you have used +script parameters such as $U which will require fewer characters +when "expanded", you can choose to over-ride this helpful +reminder. + + + +NOT AN ALIAS: + The specified alias is not an alias at all, but some other +COM file. The name is ignored and replaced with a blank. + + + DESTINATION DISK FULL/ DIRECTORY FULL: + QUIT or RENAME to a new disk. + + + +ALIAS CHOPPED: + The alias file has too many commands to fit on the screen. +(Could happen when using a small screen.) +:9 +INSTALLATION + +SAINS install th editor' comman ke bindings Yo ca assig + singl o doubl contro characte sequenc t mos o th +editin functions Yo canno assig non-contro key. + +Th installatio progra i men oriented wit instruction o +usage. \ No newline at end of file diff --git a/Source/Images/Common/Z3/u14/SCOPY10F.CFG b/Source/Images/Common/Z3/u14/SCOPY10.CFG similarity index 100% rename from Source/Images/Common/Z3/u14/SCOPY10F.CFG rename to Source/Images/Common/Z3/u14/SCOPY10.CFG diff --git a/Source/Images/Common/Z3/u14/UMAP18.CFG b/Source/Images/Common/Z3/u14/UMAP18.CFG new file mode 100644 index 00000000..72b87e1d Binary files /dev/null and b/Source/Images/Common/Z3/u14/UMAP18.CFG differ diff --git a/Source/Images/d_zpm3/u14/ZEX.CFG b/Source/Images/Common/Z3/u14/ZEX.CFG similarity index 100% rename from Source/Images/d_zpm3/u14/ZEX.CFG rename to Source/Images/Common/Z3/u14/ZEX.CFG diff --git a/Source/Images/Common/Z3/u15/ALIAS.COM b/Source/Images/Common/Z3/u15/ALIAS.COM new file mode 100644 index 00000000..39abb2de Binary files /dev/null and b/Source/Images/Common/Z3/u15/ALIAS.COM differ diff --git a/Source/Images/d_nzcom/u0/EDITNDR.COM b/Source/Images/Common/Z3/u15/EDITNDR.COM similarity index 100% rename from Source/Images/d_nzcom/u0/EDITNDR.COM rename to Source/Images/Common/Z3/u15/EDITNDR.COM diff --git a/Source/Images/d_zpm3/u15/sainst.com b/Source/Images/Common/Z3/u15/SAINST.COM similarity index 100% rename from Source/Images/d_zpm3/u15/sainst.com rename to Source/Images/Common/Z3/u15/SAINST.COM diff --git a/Source/Images/Common/Z3/u15/SALIAS.COM b/Source/Images/Common/Z3/u15/SALIAS.COM new file mode 100644 index 00000000..341b774f Binary files /dev/null and b/Source/Images/Common/Z3/u15/SALIAS.COM differ diff --git a/Source/Images/d_nzcom/u0/SAVENDR.COM b/Source/Images/Common/Z3/u15/SAVENDR.COM similarity index 100% rename from Source/Images/d_nzcom/u0/SAVENDR.COM rename to Source/Images/Common/Z3/u15/SAVENDR.COM diff --git a/Source/Images/d_nzcom/u0/SDZ.COM b/Source/Images/Common/Z3/u15/SDZ.COM similarity index 100% rename from Source/Images/d_nzcom/u0/SDZ.COM rename to Source/Images/Common/Z3/u15/SDZ.COM diff --git a/Source/Images/Common/Z3/u15/UMAP.COM b/Source/Images/Common/Z3/u15/UMAP.COM new file mode 100644 index 00000000..84516a68 Binary files /dev/null and b/Source/Images/Common/Z3/u15/UMAP.COM differ diff --git a/Source/Images/d_nzcom/u0/ZEX.COM b/Source/Images/Common/Z3/u15/ZEX.COM similarity index 100% rename from Source/Images/d_nzcom/u0/ZEX.COM rename to Source/Images/Common/Z3/u15/ZEX.COM diff --git a/Source/Images/Makefile b/Source/Images/Makefile index 45425599..3e65dcf2 100644 --- a/Source/Images/Makefile +++ b/Source/Images/Makefile @@ -5,6 +5,7 @@ SYSTEMS = ../CPM22/cpm_wbw.sys ../ZSDOS/zsys_wbw.sys ../QPM/qpm_wbw.sys ../CPM3/ FDIMGS = fd144_cpm22.img fd144_zsdos.img fd144_nzcom.img \ fd144_cpm3.img fd144_zpm3.img fd144_ws4.img fd144_qpm.img \ + fd144_z3plus.img \ fd144_z80asm.img fd144_aztecc.img fd144_hitechc.img \ fd144_bascomp.img fd144_fortran.img fd144_games.img \ fd144_tpascal.img fd144_cowgol.img @@ -13,13 +14,17 @@ HD512IMGS = hd512_cpm22.img hd512_zsdos.img hd512_nzcom.img \ HD512XIMGS = hd512_z80asm.img hd512_aztecc.img hd512_hitechc.img \ hd512_bascomp.img hd512_fortran.img hd512_games.img \ hd512_tpascal.img hd512_dos65.img hd512_qpm.img \ - hd512_cowgol.img hd512_blank.img + hd512_z3plus.img \ + hd512_cowgol.img hd512_msxroms1.img hd512_msxroms2.img \ + hd512_blank.img HD1KIMGS = hd1k_cpm22.img hd1k_zsdos.img hd1k_nzcom.img \ hd1k_cpm3.img hd1k_zpm3.img hd1k_ws4.img HD1KXIMGS = hd1k_z80asm.img hd1k_aztecc.img hd1k_hitechc.img \ hd1k_bascomp.img hd1k_fortran.img hd1k_games.img \ hd1k_tpascal.img hd1k_qpm.img \ - hd1k_cowgol.img hd1k_blank.img + hd1k_z3plus.img \ + hd1k_cowgol.img hd1k_msxroms1.img hd1k_msxroms2.img \ + hd1k_blank.img HD1KXIMGS += hd1k_bp.img HD512PREFIX = @@ -29,7 +34,7 @@ OBJECTS = $(FDIMGS) OBJECTS += $(HD512IMGS) $(HD512XIMGS) hd512_combo.img $(HD512PREFIX) OBJECTS += $(HD1KIMGS) $(HD1KXIMGS) hd1k_combo.img $(HD1KPREFIX) -OTHERS = blank144 blankhd512 blankhd1k +OTHERS = blank144 blankhd512 blankhd1k *.cat NODELETE = $(HD512PREFIX) $(HD1KPREFIX) @@ -83,7 +88,7 @@ blankhd1k: (*cpm22*) sys=../CPM22/cpm_wbw.sys;; \ (*qpm*) sys=../QPM/qpm_wbw.sys;; \ (*zsdos* | *nzcom* | *dos65* | *bp*) sys=../ZSDOS/zsys_wbw.sys;; \ - (*cpm3*) sys=../CPM3/cpmldr.sys;; \ + (*cpm3* | *z3plus*) sys=../CPM3/cpmldr.sys;; \ (*zpm3*) sys=../ZPM3/zpmldr.sys;; \ esac ; \ if echo $@ | grep -q ^fd144_ ; then \ @@ -117,7 +122,7 @@ blankhd1k: if [ -f $${dtype}_$$d.txt ] ; then \ echo " " copying files from $${dtype}_$$d.txt ; \ grep -v ^# $${dtype}_$$d.txt | tr -d '\r' | while read file user ; do \ - rf=$$($(CASEFN) $$file | sort -V) ; \ + rf=$$($(CASEFN) $$file | sort -f) ; \ echo " " $$rf ; \ if [ -z "$$rf" ] ; then \ echo " " $$file missing ; \ @@ -126,7 +131,7 @@ blankhd1k: fi ; \ done ; \ fi ; \ - + $(CPMLS) -f $$fmt -D $@ > $(@:.img=.cat) clean:: @rm -f *.ls diff --git a/Source/Images/d_aztecc/Readme.txt b/Source/Images/d_aztecc/Readme.txt index 252747a6..20c682d6 100644 --- a/Source/Images/d_aztecc/Readme.txt +++ b/Source/Images/d_aztecc/Readme.txt @@ -7,7 +7,7 @@ for MS-DOS or Windows XP is also available. For full documentation, see https://www.aztecmuseum.ca/ -The user manual is available in the Doc directory +The user manual is available in the Doc/Language directory Aztec_C_1.06_User_Manual_Mar84.pdf == License == diff --git a/Source/Images/d_bascomp/Readme.txt b/Source/Images/d_bascomp/Readme.txt index d7792401..fff84b63 100644 --- a/Source/Images/d_bascomp/Readme.txt +++ b/Source/Images/d_bascomp/Readme.txt @@ -9,3 +9,57 @@ faster than interpreted programs if maximum use of integer variables is made. View BASCOM.HLP included in the disk image using HELP.COM for documentation. + +----------------------------------------------------------- +Example of a session: +----------------------------------------------------------- + +>MBASIC + +BASIC-80 Rev. 5.21 +[CP/M Version] +Copyright 1977-1981 (C) by Microsoft +Created: 28-Jul-81 +31800 Bytes free +Ok +10 PRINT "Hello World" +list +10 PRINT "Hello World" +Ok +RUN +Hello World +Ok +SAVE "HELLO",A +Ok +SYSTEM + +A>TYPE BAS.SUB + +BASCOM =$1 /E +L80 $1,$1/N/E + +A>SUPERSUB BAS HELLO + +SuperSUB V1.1 + +A>BASCOM =HELLO /E + +00000 Fatal Error(s) +24196 Bytes Free + +A>L80 HELLO,HELLO/N/E + +Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft + +Data 4000 4197 < 407> + +40207 Bytes Free +[4011 4197 65] + +A>hello + +Hello World + + +A> + diff --git a/Source/Images/d_bascomp/u0/README.TXT b/Source/Images/d_bascomp/u0/README.TXT deleted file mode 100644 index d0f0a53d..00000000 --- a/Source/Images/d_bascomp/u0/README.TXT +++ /dev/null @@ -1,54 +0,0 @@ -Microsoft Basic-80 Compiler v.5.30a - ------------------------------------------------------------ -Example of a session: ------------------------------------------------------------ - ->MBASIC - -BASIC-80 Rev. 5.21 -[CP/M Version] -Copyright 1977-1981 (C) by Microsoft -Created: 28-Jul-81 -31800 Bytes free -Ok -10 PRINT "Hello World" -list -10 PRINT "Hello World" -Ok -RUN -Hello World -Ok -SAVE "HELLO",A -Ok -SYSTEM - -A>TYPE BAS.SUB - -BASCOM =$1 /E -L80 $1,$1/N/E - -A>SUPERSUB BAS HELLO - -SuperSUB V1.1 - -A>BASCOM =HELLO /E - -00000 Fatal Error(s) -24196 Bytes Free - -A>L80 HELLO,HELLO/N/E - -Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft - -Data 4000 4197 < 407> - -40207 Bytes Free -[4011 4197 65] - -A>hello - -Hello World - - -A> diff --git a/Source/Images/d_bp/ReadMe.txt b/Source/Images/d_bp/ReadMe.txt new file mode 100644 index 00000000..f6c54e8b --- /dev/null +++ b/Source/Images/d_bp/ReadMe.txt @@ -0,0 +1,24 @@ +===== BPBIOS Disk for RomWBW ===== + +This disk is one of several ready-to-run disks provided with RomWBW. +It contains the files to start and run BPBIOS under RomWBW. + +WARNING: This is a work in progress. It is not ready for general +usage at this time. + +For information on this adaptation of BPBIOS, please refer to the +following files in RomWBW distribution in the /Source/BPBIOS folder. + +@WBW BPBIOS Errata.rtf +@WBW Issues.txt +@WBW Z3ENV.txt + +== Usage == + + - The disk is configured to boot under ZSDOS 1.1. BPBIOS can then + be launched using LDSYS with one of the system images. For + example: + + LDSYS BP41BNK + +-- WBW 4:02 PM 10/22/2024 \ No newline at end of file diff --git a/Source/Images/d_bp/u0/support.txt b/Source/Images/d_bp/u0/support.txt index db70c39d..ad0035ba 100644 --- a/Source/Images/d_bp/u0/support.txt +++ b/Source/Images/d_bp/u0/support.txt @@ -2,16 +2,16 @@ This library contains a number of support files, programs and scripts needed to bring up a fully functioning BPBIOS Zsystem. These programs and files are used and/or loaded by the startup scripts. -Some of the support files are startup ZEX scripts, some are Z3+ segment files, -others are Date and Time stamp drivers, some are command line editors and -history shells others are needed to initialize the RAMDRIVE as well as help files. +Some of the support files are startup ZEX scripts, some are Z3+ segment files, +others are Date and Time stamp drivers, some are command line editors and +history shells others are needed to initialize the RAMDRIVE as well as help files. -The following table shows which files are needed to support each of the ten -BPBIOS variants (BP33, BP33BNK, BP34, BP34BNK & BBP41BNK). +The following table shows which files are needed to support each of the ten +BPBIOS variants (BP33, BP33BNK, BP34, BP34BNK & BBP41BNK). Variant Name BP33 BP33BNK BP34 BP34BNK BP41BNK ================================================================ -bpbio.ndr X X X +bpbio.ndr X X X bpbioz33.ndr X X BPCNFG.COM X X X X X EASE.COM X X @@ -20,18 +20,18 @@ fcp-4.zrl X X fcp-4t.zrl X X X RELOG X X X X X HELPLSH.COM X X X -IF.COM X X X X +IF.COM X X X X jetldr.com X X X X X LDTIMEC.COM X X X LSH.COM X X X LSHF.COM* X X X LSHF.VAR* X X X -myterm.z3t X X X X X -nzdec23d.z3t X X X X X +myterm.z3t X X X X X +nzdec23d.z3t X X X X X PUTDS.COM X X X X X RAMFILES.TXT X X X X X RCOPY.COM X X X X X -rcp-16h.zrl X X X X +rcp-16h.zrl X X X X SAVE.COM X X X X Z33.ZEX X X ZEX.COM X X X X X @@ -43,14 +43,14 @@ ZST.ZEX X X Instructions: The support files are "crunched" and stored in the library file -SUPPORT.LBR. Place SUPPORT.LBR on the RAMDRIVE using for example +SUPPORT.LBR. Place SUPPORT.LBR on the RAMDRIVE using for example XModem. Use LBREXT with the /U option to extract and uncrunch the -files. First extract ZEX.COM while logged onto the A: drive with the +files. First extract ZEX.COM while logged onto the A: drive with the following command: B0:LBREXT SUPPORT C0:ZEX.C?M /U Next place all the .COM files on C15: by typing: B0:LBREXT SUPPORT C15:*.C?M /U -The remaining files should be placed on C0:. +The remaining files should be placed on C0:. B0:LBREXT SUPPORT C0:*.Z?X /U B0:LBREXT SUPPORT C0:*.Z?L /U B0:LBREXT SUPPORT C0:*.N?R /U @@ -59,14 +59,14 @@ The remaining files should be placed on C0:. B0:LBREXT SUPPORT C0:*.H?P /U Note in all BPBIOS variants that A: is the RAMDRIVE, B: is -the ROMDRIVE and C: is the system drive. Hard drive slices occupy C: +the ROMDRIVE and C: is the system drive. Hard drive slices occupy C: through N: and floppy drives are O: & P:. A short desciption of each of the support files follows: bpbioz33.ndr - Named Directory Table for Z33 bpbio.ndr - Named Directory Table for Z34 & Z41 BPCNFG.COM - BPBIOS configuration program -EASE.COM - Command line editor & history shell for Z33* +EASE.COM - Command line editor & history shell for Z33* EASE.HLP - Help file for EASE fcp-4.zrl - Z33 Flow Control Processor (handles IF, ELSE etc) fcp-4t.zrl - Z34 & Z41 Flow Control Processor (IF is transient) @@ -80,7 +80,7 @@ LSHF.COM - LSH with a fixed length History file (runs faster) LSHF.VAR - History file for LSHF myterm.z3t - Terminal Capabilities file (defines ESC sequences etc) NZDEC23D.Z3T - VT100 Terminal Capabilities File. -PUTDS.COM - Installs date stamping for RAM drive. +PUTDS.COM - Prepare disk for DateStamper date/time stamping. RAMFILES.TXT - List of frequently used command (edit to suit) RCOPY.COM - Copies files listed in RAMFILES.TXT to RAMDRIVE rcp-16h.zrl - Zsystem Resident Command Processor @@ -92,4 +92,4 @@ ZSCFG2.COM - Configures ZSDOS 2 ZSTF.ZEX - Automatically executed Startup script for BP41BNK ZST.ZEX - Automatically executed Startup script for BP34* -Note that clock & datestamping drivers are builtin to Z41. \ No newline at end of file +Note that clock & datestamping drivers are builtin to Z41. diff --git a/Source/Images/d_bp/u0/zex.com b/Source/Images/d_bp/u0/zex.com deleted file mode 100644 index cd46405d..00000000 Binary files a/Source/Images/d_bp/u0/zex.com and /dev/null differ diff --git a/Source/Images/d_bp/u14/copy.cfg b/Source/Images/d_bp/u14/copy.cfg deleted file mode 100644 index e55fcebf..00000000 Binary files a/Source/Images/d_bp/u14/copy.cfg and /dev/null differ diff --git a/Source/Images/d_bp/u15/copy.com b/Source/Images/d_bp/u15/copy.com deleted file mode 100644 index 606c81a5..00000000 Binary files a/Source/Images/d_bp/u15/copy.com and /dev/null differ diff --git a/Source/Images/d_bp/u15/zcnfg.com b/Source/Images/d_bp/u15/zcnfg.com deleted file mode 100644 index ae423dc5..00000000 Binary files a/Source/Images/d_bp/u15/zcnfg.com and /dev/null differ diff --git a/Source/Images/d_bp/u15/zex.com b/Source/Images/d_bp/u15/zex.com deleted file mode 100644 index cd46405d..00000000 Binary files a/Source/Images/d_bp/u15/zex.com and /dev/null differ diff --git a/Source/Images/d_cowgol/Readme.txt b/Source/Images/d_cowgol/Readme.txt index ca59df45..2630163b 100644 --- a/Source/Images/d_cowgol/Readme.txt +++ b/Source/Images/d_cowgol/Readme.txt @@ -10,6 +10,9 @@ is tailored to RomWBW memory management. The primary distribution site for Cowgol 2.0 is at https://github.com/davidgiven/cowgol. +The user manual is available in the Doc/Language directory +Cowgol Language.pdf + The Hi-Tech C compiler components were sourced from the updated version by Tony Nicholson at https://github.com/agn453/HI-TECH-Z80-C. However, the CPP.COM component was sourced from Ladislau Szilagyi's diff --git a/Source/Images/d_cpm22/ReadMe.txt b/Source/Images/d_cpm22/ReadMe.txt index 3b625aca..d3855964 100644 --- a/Source/Images/d_cpm22/ReadMe.txt +++ b/Source/Images/d_cpm22/ReadMe.txt @@ -42,7 +42,7 @@ RomWBW Distribution. The following CP/M 2.2 files were distributed by DRI with the operating system or as supplemental add-on programs. They are documented in the -"CP/M Manual.pdf" document in the Doc directory of the Rom WBW +"CP/M Manual.pdf" document in the Doc/CPM directory of the Rom WBW distribution. MAC, RMAC, ZSID are supplemental programs from DRI with separate standalone documentation which is not included in the RomWBW package (but easily found on the Internet via Google search). @@ -134,7 +134,7 @@ LBREXT.COM - Extract file from .LBR libraries LBREXT36.CFG - ZCNFG configuration file for LBREXT ZXD.COM - Enhanced directory lister w/ date/time stamp support ZXD.CFG - ZCNFG configuration file for ZXD -BBCBASIC.COM - BBC BASIC CP/M Version 3.00 by R.T.Russell +BBCBASIC.COM - BBC BASIC CP/M Version by R.T.Russell BBCBASIC.TXT - Help file for BBC BASIC GENHEX.COM - Generates an Intel Hex file from the input file LS.COM - An alternative file listing to DIR @@ -165,4 +165,4 @@ in this user area for more information. N.B., at a minimum, some of the files in this user area must be copied to user area 0 for CP/NET to work properly. --- WBW 3:20 PM 8/27/2021 \ No newline at end of file +-- WBW 3:20 PM 8/27/2021 diff --git a/Source/Images/d_zpm3/u15/xref.com b/Source/Images/d_cpm22/u0/XREF.COM similarity index 100% rename from Source/Images/d_zpm3/u15/xref.com rename to Source/Images/d_cpm22/u0/XREF.COM diff --git a/Source/Images/d_cpm3/ReadMe.txt b/Source/Images/d_cpm3/ReadMe.txt new file mode 100644 index 00000000..65b3ba69 --- /dev/null +++ b/Source/Images/d_cpm3/ReadMe.txt @@ -0,0 +1,35 @@ +This is a generic CP/M 3 adaptation for RomWBW. + +There are two ways to launch CP/M 3. First, you can run the command +CPMLDR from a CP/M 2.2 or Z-System command line. Alternatively, you can +boot directly into CP/M 3 by choosing the CP/M 3 disk from the RomWBW +loader prompt. The CP/M 3 disk must be bootable in this case. + +With the following exceptions, the files in this directory came from +the CP/M 3 binary distribution on "The Unofficial CP/M Web site" at +http://www.cpm.z80.de/binary.html. + +The included files have been +patched with all applicable DRI patches per CPM3FIX.PAT. + +ZSID.COM is the original DRI ZSID distribution, but patched to use +RST 6 instead of RST 7 to avoid conflicting with mode 1 interrupts. + +CP/M 3 is now fully Year 2000 compliant. This affects the programs +DATE.COM, DIR.COM and SHOW.COM. + +Dates can be displayed in US, UK or Year-Month-Day format. This is set by +SETDEF: + +Press RETURN to Continue + SETDEF [US] + SETDEF [UK] + SETDEF [YMD] respectively. + +The CCP has a further bug fix: A command sequence such as: + + C1 + :C2 + :C3 + +will now not execute the command C3 if the command C1 failed. diff --git a/Source/Images/d_cpm3/u0/LIB.COM b/Source/Images/d_cpm3/u0/LIB.COM new file mode 100644 index 00000000..45d7fb21 Binary files /dev/null and b/Source/Images/d_cpm3/u0/LIB.COM differ diff --git a/Source/Images/d_cpm3/u0/LINK.COM b/Source/Images/d_cpm3/u0/LINK.COM new file mode 100644 index 00000000..e188fb92 Binary files /dev/null and b/Source/Images/d_cpm3/u0/LINK.COM differ diff --git a/Source/Images/d_cpm3/u0/MAC.COM b/Source/Images/d_cpm3/u0/MAC.COM new file mode 100644 index 00000000..f49e835a Binary files /dev/null and b/Source/Images/d_cpm3/u0/MAC.COM differ diff --git a/Source/Images/d_cpm3/u0/RMAC.COM b/Source/Images/d_cpm3/u0/RMAC.COM new file mode 100644 index 00000000..9ab7206b Binary files /dev/null and b/Source/Images/d_cpm3/u0/RMAC.COM differ diff --git a/Source/Images/d_cpm3/u0/ROMWBW.TXT b/Source/Images/d_cpm3/u0/ROMWBW.TXT deleted file mode 100644 index 3e6be3be..00000000 --- a/Source/Images/d_cpm3/u0/ROMWBW.TXT +++ /dev/null @@ -1,21 +0,0 @@ -This is a generic CP/M 3 adaptation for RomWBW. - -There are two ways to launch CP/M 3. First, you can run the command -CPMLDR from a CP/M 2.2 or Z-System command line. Alternatively, you -boot directly into CP/M 3 by choosing the CP/M 3 disk from the RomWBW -loader prompt. The CP/M 3 disk must be bootable in this case. - -With the following exceptions, the files in this directory came from -the CP/M 3 binary distribution on "The Unofficial CP/M Web site" at -http://www.cpm.z80.de/binary.html. - -As documented in the "README.1ST" file, the included files have been -patched with all applicable DRI patches per CPM3FIX.PAT. - -In addition, the following have been added: - -- INITDIR.COM was not included. The copy included is the original - DRI distribution, with both patches installed. - -- ZSID.COM is the original DRI ZSID distribution, but patched to use - RST 6 instead of RST 7 to avoid conflicting with mode 1 interrupts. \ No newline at end of file diff --git a/Source/Images/d_cpm3/u0/XREF.COM b/Source/Images/d_cpm3/u0/XREF.COM new file mode 100644 index 00000000..32c57ae0 Binary files /dev/null and b/Source/Images/d_cpm3/u0/XREF.COM differ diff --git a/Source/Images/d_dos65/ReadMe.txt b/Source/Images/d_dos65/ReadMe.txt index 1662f87c..eec1ab5a 100644 --- a/Source/Images/d_dos65/ReadMe.txt +++ b/Source/Images/d_dos65/ReadMe.txt @@ -1,17 +1,17 @@ ===== DOS/65 Disk for RomWBW ===== This disk is one of several ready-to-run disks provided with RomWBW. -It contains the files to start and run DOS/65 on an MBC system that -contains Dan Werner's 6502 processor. +It contains the files to start and run DOS/65 on a Nhyodyne system that +with a 6502 processor board. WARNING: This is a work in progress. Use of this disk image requires specific hardware and configuration. You should contact Dan Werner before attempting to use this disk image. -The remainder of this document describes the usage and contents of -this disk. It is highly recommended that you review the "RomWBW -User Guide.pdf" document found in the Doc directory of the -RomWBW Distribution. +More information on the contents of this disk and the associated +6502 processor board can be found at the following link: + +https://github.com/lynchaj/nhyodyne/tree/main/6502PROC == Usage == @@ -22,7 +22,7 @@ RomWBW Distribution. == Notes == - DOS/65 is generally compatible with the CP/M 2.2 filesystem. Once - launched, you will have access to the fielsystem of the boot disk. + launched, you will have access to the filesystem of the boot disk. - DOS/65 does not utilize any of the RomWBW framework or drivers, so it will only support devices built into DOS/65 itself. Once @@ -31,4 +31,4 @@ RomWBW Distribution. - The contents of this disk are purely a redistribution of the work of Dan Werner. --- WBW 2:47 PM 3/16/2023 \ No newline at end of file +-- WBW 3:56 PM 10/22/2024 \ No newline at end of file diff --git a/Source/Images/d_fortran/Readme.txt b/Source/Images/d_fortran/Readme.txt index 71d6398a..b57ee721 100644 --- a/Source/Images/d_fortran/Readme.txt +++ b/Source/Images/d_fortran/Readme.txt @@ -6,5 +6,5 @@ programming language. It was one of their early core languages developed for the rebranded the product as Microsoft Fortran Powerstation. (Note: -80 refers to the 8080/Z80 platform, not the language specification version) -The user manual is available in the Doc directory, +The user manual is available in the Doc/Language directory, Microsoft_FORTRAN-80_Users_Manual_1977.pdf diff --git a/Source/Images/d_hitechc/Readme.txt b/Source/Images/d_hitechc/Readme.txt index 0207d76b..671c532d 100644 --- a/Source/Images/d_hitechc/Readme.txt +++ b/Source/Images/d_hitechc/Readme.txt @@ -10,7 +10,7 @@ without an operating system. This is the Mar 21, 2023 update 17 released by Tony Nicholson who currently maintains HI-TECH C at https://github.com/agn453/HI-TECH-Z80-C -The manual is available in the Docs directory, +The manual is available in the Doc/Language directory, HI-TECH Z80 C Compiler Manual.txt A good blog post about the HI-TECH C Compiler is available at @@ -23,4 +23,4 @@ use, private or commercial, strictly as-is. No warranty or product support is offered or implied. You may use this software for whatever you like, providing you acknowledge -that the copyright to this software remains with HI-TECH Software. \ No newline at end of file +that the copyright to this software remains with HI-TECH Software. diff --git a/Source/Images/d_msxroms1/ReadMe.txt b/Source/Images/d_msxroms1/ReadMe.txt new file mode 100644 index 00000000..d0ef09ea --- /dev/null +++ b/Source/Images/d_msxroms1/ReadMe.txt @@ -0,0 +1,19 @@ +===== MSX ROMs Disk for RomWBW ===== + +This is disk 1 of 2 of the collection of MSX ROMs as provided by Les +Bird (ROM filenames A-K). These ROMs are "run" by using the +appropriate variant of Les' MSX8 ROM loader. You can download the +loader binaries from https://github.com/lesbird/MSX8. You will need +appropriate hardware to run the loader. + +Please review the file ROMLIST.TXT for information on the current +operational status of the ROM and it's long file name/description. + +This disk (RomWBW slice) is not automatically included with the +RomWBW "combo" disk images. You can simply add it to a combo +image by appending it to the end. After booting your system, +you can use the ASSIGN command to map the slice to a drive letter. +Refer to the RomWBW User Guide for more information on this +process. + +-- WBW 11:15 AM 8/21/2024 diff --git a/Source/Images/d_msxroms1/u0/10YAR000.ROM b/Source/Images/d_msxroms1/u0/10YAR000.ROM new file mode 100644 index 00000000..ae5d7b06 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/10YAR000.ROM differ diff --git a/Source/Images/d_msxroms1/u0/3DGOL002.ROM b/Source/Images/d_msxroms1/u0/3DGOL002.ROM new file mode 100644 index 00000000..77a5ece1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/3DGOL002.ROM differ diff --git a/Source/Images/d_msxroms1/u0/3DGOL003.ROM b/Source/Images/d_msxroms1/u0/3DGOL003.ROM new file mode 100644 index 00000000..4e56857f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/3DGOL003.ROM differ diff --git a/Source/Images/d_msxroms1/u0/3DTEN004.ROM b/Source/Images/d_msxroms1/u0/3DTEN004.ROM new file mode 100644 index 00000000..fd9f8b31 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/3DTEN004.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ACTMA007.ROM b/Source/Images/d_msxroms1/u0/ACTMA007.ROM new file mode 100644 index 00000000..fa7c104d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ACTMA007.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ADVEN008.ROM b/Source/Images/d_msxroms1/u0/ADVEN008.ROM new file mode 100644 index 00000000..1fb34dad Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ADVEN008.ROM differ diff --git a/Source/Images/d_msxroms1/u0/AEJAP005.ROM b/Source/Images/d_msxroms1/u0/AEJAP005.ROM new file mode 100644 index 00000000..b80324ce Binary files /dev/null and b/Source/Images/d_msxroms1/u0/AEJAP005.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALBAT009.ROM b/Source/Images/d_msxroms1/u0/ALBAT009.ROM new file mode 100644 index 00000000..a35ac521 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALBAT009.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALCAZ010.ROM b/Source/Images/d_msxroms1/u0/ALCAZ010.ROM new file mode 100644 index 00000000..cba2d123 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALCAZ010.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALIBA011.ROM b/Source/Images/d_msxroms1/u0/ALIBA011.ROM new file mode 100644 index 00000000..2c11cae4 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALIBA011.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALIEN012.ROM b/Source/Images/d_msxroms1/u0/ALIEN012.ROM new file mode 100644 index 00000000..ecf6367d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALIEN012.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALPHA014.ROM b/Source/Images/d_msxroms1/u0/ALPHA014.ROM new file mode 100644 index 00000000..5439aa19 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALPHA014.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ALPHA015.ROM b/Source/Images/d_msxroms1/u0/ALPHA015.ROM new file mode 100644 index 00000000..3313446e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ALPHA015.ROM differ diff --git a/Source/Images/d_msxroms1/u0/AMERI016.ROM b/Source/Images/d_msxroms1/u0/AMERI016.ROM new file mode 100644 index 00000000..39f9dbfd Binary files /dev/null and b/Source/Images/d_msxroms1/u0/AMERI016.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ANAZA017.ROM b/Source/Images/d_msxroms1/u0/ANAZA017.ROM new file mode 100644 index 00000000..ea6fd222 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ANAZA017.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ANGEL018.ROM b/Source/Images/d_msxroms1/u0/ANGEL018.ROM new file mode 100644 index 00000000..89881a99 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ANGEL018.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ANTAR020.ROM b/Source/Images/d_msxroms1/u0/ANTAR020.ROM new file mode 100644 index 00000000..422b9501 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ANTAR020.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ANTAR021.ROM b/Source/Images/d_msxroms1/u0/ANTAR021.ROM new file mode 100644 index 00000000..445a8f0f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ANTAR021.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ANTYJ022.ROM b/Source/Images/d_msxroms1/u0/ANTYJ022.ROM new file mode 100644 index 00000000..a67c0d76 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ANTYJ022.ROM differ diff --git a/Source/Images/d_msxroms1/u0/AQUAP023.ROM b/Source/Images/d_msxroms1/u0/AQUAP023.ROM new file mode 100644 index 00000000..e6da508b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/AQUAP023.ROM differ diff --git a/Source/Images/d_msxroms1/u0/AQUAT024.ROM b/Source/Images/d_msxroms1/u0/AQUAT024.ROM new file mode 100644 index 00000000..a0c6b2e7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/AQUAT024.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ARAMO025.ROM b/Source/Images/d_msxroms1/u0/ARAMO025.ROM new file mode 100644 index 00000000..bfbfdce6 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ARAMO025.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ARKAN026.ROM b/Source/Images/d_msxroms1/u0/ARKAN026.ROM new file mode 100644 index 00000000..bc365bea Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ARKAN026.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ATHLE027.ROM b/Source/Images/d_msxroms1/u0/ATHLE027.ROM new file mode 100644 index 00000000..b7b1aa69 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ATHLE027.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ATHLE028.ROM b/Source/Images/d_msxroms1/u0/ATHLE028.ROM new file mode 100644 index 00000000..e60aa84a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ATHLE028.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ATHLE029.ROM b/Source/Images/d_msxroms1/u0/ATHLE029.ROM new file mode 100644 index 00000000..0cdc3cff Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ATHLE029.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ATTAC030.ROM b/Source/Images/d_msxroms1/u0/ATTAC030.ROM new file mode 100644 index 00000000..c8e9d720 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ATTAC030.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BACKG032.ROM b/Source/Images/d_msxroms1/u0/BACKG032.ROM new file mode 100644 index 00000000..e66f0da2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BACKG032.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BACKG034.ROM b/Source/Images/d_msxroms1/u0/BACKG034.ROM new file mode 100644 index 00000000..365128d4 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BACKG034.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BACKT033.ROM b/Source/Images/d_msxroms1/u0/BACKT033.ROM new file mode 100644 index 00000000..d2f30d91 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BACKT033.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BALAN035.ROM b/Source/Images/d_msxroms1/u0/BALAN035.ROM new file mode 100644 index 00000000..476266cf Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BALAN035.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BANAN036.ROM b/Source/Images/d_msxroms1/u0/BANAN036.ROM new file mode 100644 index 00000000..17e1c319 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BANAN036.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BANKP037.ROM b/Source/Images/d_msxroms1/u0/BANKP037.ROM new file mode 100644 index 00000000..b3579e3d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BANKP037.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BASIC038.ROM b/Source/Images/d_msxroms1/u0/BASIC038.ROM new file mode 100644 index 00000000..731ef712 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BASIC038.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BASIC039.ROM b/Source/Images/d_msxroms1/u0/BASIC039.ROM new file mode 100644 index 00000000..5d0904e8 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BASIC039.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BATTE041.ROM b/Source/Images/d_msxroms1/u0/BATTE041.ROM new file mode 100644 index 00000000..5e32105d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BATTE041.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BATTL042.ROM b/Source/Images/d_msxroms1/u0/BATTL042.ROM new file mode 100644 index 00000000..5a6022d3 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BATTL042.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BATTL043.ROM b/Source/Images/d_msxroms1/u0/BATTL043.ROM new file mode 100644 index 00000000..6e3346f1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BATTL043.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BCSQU031.ROM b/Source/Images/d_msxroms1/u0/BCSQU031.ROM new file mode 100644 index 00000000..3df3ea51 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BCSQU031.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BEACH044.ROM b/Source/Images/d_msxroms1/u0/BEACH044.ROM new file mode 100644 index 00000000..ceea3df9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BEACH044.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BEAMR045.ROM b/Source/Images/d_msxroms1/u0/BEAMR045.ROM new file mode 100644 index 00000000..d81d7e67 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BEAMR045.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BECKY046.ROM b/Source/Images/d_msxroms1/u0/BECKY046.ROM new file mode 100644 index 00000000..d6a6a304 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BECKY046.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BEEFL047.ROM b/Source/Images/d_msxroms1/u0/BEEFL047.ROM new file mode 100644 index 00000000..5ff6ae68 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BEEFL047.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BIFAM048.ROM b/Source/Images/d_msxroms1/u0/BIFAM048.ROM new file mode 100644 index 00000000..5d47a3c9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BIFAM048.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BINAR049.ROM b/Source/Images/d_msxroms1/u0/BINAR049.ROM new file mode 100644 index 00000000..91af7e5d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BINAR049.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BLACK051.ROM b/Source/Images/d_msxroms1/u0/BLACK051.ROM new file mode 100644 index 00000000..37b421bb Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BLACK051.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BLAGG052.ROM b/Source/Images/d_msxroms1/u0/BLAGG052.ROM new file mode 100644 index 00000000..6162bac0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BLAGG052.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BLOCK053.ROM b/Source/Images/d_msxroms1/u0/BLOCK053.ROM new file mode 100644 index 00000000..b37356a4 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BLOCK053.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BLOCK054.ROM b/Source/Images/d_msxroms1/u0/BLOCK054.ROM new file mode 100644 index 00000000..f9141e13 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BLOCK054.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOGGY055.ROM b/Source/Images/d_msxroms1/u0/BOGGY055.ROM new file mode 100644 index 00000000..4d0f7c62 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOGGY055.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOING056.ROM b/Source/Images/d_msxroms1/u0/BOING056.ROM new file mode 100644 index 00000000..b6693c08 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOING056.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOKOS057.ROM b/Source/Images/d_msxroms1/u0/BOKOS057.ROM new file mode 100644 index 00000000..d1ccf715 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOKOS057.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOMBE059.ROM b/Source/Images/d_msxroms1/u0/BOMBE059.ROM new file mode 100644 index 00000000..5947632c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOMBE059.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOMBE060.ROM b/Source/Images/d_msxroms1/u0/BOMBE060.ROM new file mode 100644 index 00000000..87008bdf Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOMBE060.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOOGI061.ROM b/Source/Images/d_msxroms1/u0/BOOGI061.ROM new file mode 100644 index 00000000..2ff616f2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOOGI061.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOOME062.ROM b/Source/Images/d_msxroms1/u0/BOOME062.ROM new file mode 100644 index 00000000..8fae0aaa Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOOME062.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOSCO064.ROM b/Source/Images/d_msxroms1/u0/BOSCO064.ROM new file mode 100644 index 00000000..ea6e5005 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOSCO064.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOUKE065.ROM b/Source/Images/d_msxroms1/u0/BOUKE065.ROM new file mode 100644 index 00000000..d362a293 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOUKE065.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOULD066.ROM b/Source/Images/d_msxroms1/u0/BOULD066.ROM new file mode 100644 index 00000000..6412c3eb Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOULD066.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BOUNC067.ROM b/Source/Images/d_msxroms1/u0/BOUNC067.ROM new file mode 100644 index 00000000..9bb57080 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BOUNC067.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BRAIN068.ROM b/Source/Images/d_msxroms1/u0/BRAIN068.ROM new file mode 100644 index 00000000..1b62f7a5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BRAIN068.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BREAK070.ROM b/Source/Images/d_msxroms1/u0/BREAK070.ROM new file mode 100644 index 00000000..65874352 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BREAK070.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BROTH071.ROM b/Source/Images/d_msxroms1/u0/BROTH071.ROM new file mode 100644 index 00000000..a96bce8e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BROTH071.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BRUCE072.ROM b/Source/Images/d_msxroms1/u0/BRUCE072.ROM new file mode 100644 index 00000000..b1205bbb Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BRUCE072.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BUBBL073.ROM b/Source/Images/d_msxroms1/u0/BUBBL073.ROM new file mode 100644 index 00000000..a85441fc Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BUBBL073.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BURGE074.ROM b/Source/Images/d_msxroms1/u0/BURGE074.ROM new file mode 100644 index 00000000..ddc34299 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BURGE074.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BURUT075.ROM b/Source/Images/d_msxroms1/u0/BURUT075.ROM new file mode 100644 index 00000000..d0e34eff Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BURUT075.ROM differ diff --git a/Source/Images/d_msxroms1/u0/BUTAM076.ROM b/Source/Images/d_msxroms1/u0/BUTAM076.ROM new file mode 100644 index 00000000..2bdb487c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/BUTAM076.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CABBA078.ROM b/Source/Images/d_msxroms1/u0/CABBA078.ROM new file mode 100644 index 00000000..5960aef0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CABBA078.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CANDO079.ROM b/Source/Images/d_msxroms1/u0/CANDO079.ROM new file mode 100644 index 00000000..b41f7c16 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CANDO079.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CANNO080.ROM b/Source/Images/d_msxroms1/u0/CANNO080.ROM new file mode 100644 index 00000000..7e536b2b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CANNO080.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CANNO081.ROM b/Source/Images/d_msxroms1/u0/CANNO081.ROM new file mode 100644 index 00000000..425137e9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CANNO081.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CAPTA082.ROM b/Source/Images/d_msxroms1/u0/CAPTA082.ROM new file mode 100644 index 00000000..55294cec Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CAPTA082.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CARFI083.ROM b/Source/Images/d_msxroms1/u0/CARFI083.ROM new file mode 100644 index 00000000..f1ba7cd3 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CARFI083.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CARJA084.ROM b/Source/Images/d_msxroms1/u0/CARJA084.ROM new file mode 100644 index 00000000..29bd29c9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CARJA084.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CARRA085.ROM b/Source/Images/d_msxroms1/u0/CARRA085.ROM new file mode 100644 index 00000000..6cc8ae20 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CARRA085.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASIO086.ROM b/Source/Images/d_msxroms1/u0/CASIO086.ROM new file mode 100644 index 00000000..ac24e7b1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASIO086.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASIO087.ROM b/Source/Images/d_msxroms1/u0/CASIO087.ROM new file mode 100644 index 00000000..ba4ffdb2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASIO087.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASIO088.ROM b/Source/Images/d_msxroms1/u0/CASIO088.ROM new file mode 100644 index 00000000..f9c51d88 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASIO088.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASIO089.ROM b/Source/Images/d_msxroms1/u0/CASIO089.ROM new file mode 100644 index 00000000..23238da0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASIO089.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASTL090.ROM b/Source/Images/d_msxroms1/u0/CASTL090.ROM new file mode 100644 index 00000000..7353a48c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASTL090.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CASTL091.ROM b/Source/Images/d_msxroms1/u0/CASTL091.ROM new file mode 100644 index 00000000..a8aa6a1a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CASTL091.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHACK092.ROM b/Source/Images/d_msxroms1/u0/CHACK092.ROM new file mode 100644 index 00000000..923e7c1d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHACK092.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHALL093.ROM b/Source/Images/d_msxroms1/u0/CHALL093.ROM new file mode 100644 index 00000000..9dadd078 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHALL093.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP094.ROM b/Source/Images/d_msxroms1/u0/CHAMP094.ROM new file mode 100644 index 00000000..3f6dc7a1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP094.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP095.ROM b/Source/Images/d_msxroms1/u0/CHAMP095.ROM new file mode 100644 index 00000000..7c0285a2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP095.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP096.ROM b/Source/Images/d_msxroms1/u0/CHAMP096.ROM new file mode 100644 index 00000000..da4caa48 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP096.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP097.ROM b/Source/Images/d_msxroms1/u0/CHAMP097.ROM new file mode 100644 index 00000000..5520e404 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP097.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP098.ROM b/Source/Images/d_msxroms1/u0/CHAMP098.ROM new file mode 100644 index 00000000..459d3774 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP098.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHAMP099.ROM b/Source/Images/d_msxroms1/u0/CHAMP099.ROM new file mode 100644 index 00000000..4e55d5aa Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHAMP099.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHECK100.ROM b/Source/Images/d_msxroms1/u0/CHECK100.ROM new file mode 100644 index 00000000..48ad5535 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHECK100.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHESS101.ROM b/Source/Images/d_msxroms1/u0/CHESS101.ROM new file mode 100644 index 00000000..bf08c807 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHESS101.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHESS102.ROM b/Source/Images/d_msxroms1/u0/CHESS102.ROM new file mode 100644 index 00000000..d7628d45 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHESS102.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHOPL103.ROM b/Source/Images/d_msxroms1/u0/CHOPL103.ROM new file mode 100644 index 00000000..1fae5890 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHOPL103.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHORO104.ROM b/Source/Images/d_msxroms1/u0/CHORO104.ROM new file mode 100644 index 00000000..2e117915 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHORO104.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CHUGA105.ROM b/Source/Images/d_msxroms1/u0/CHUGA105.ROM new file mode 100644 index 00000000..b329ccd1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CHUGA105.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CIRCU106.ROM b/Source/Images/d_msxroms1/u0/CIRCU106.ROM new file mode 100644 index 00000000..d170c0fc Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CIRCU106.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CITYC107.ROM b/Source/Images/d_msxroms1/u0/CITYC107.ROM new file mode 100644 index 00000000..b04d8231 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CITYC107.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COAST108.ROM b/Source/Images/d_msxroms1/u0/COAST108.ROM new file mode 100644 index 00000000..9cc2bae3 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COAST108.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COLOR109.ROM b/Source/Images/d_msxroms1/u0/COLOR109.ROM new file mode 100644 index 00000000..0b5b88fd Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COLOR109.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COLUM110.ROM b/Source/Images/d_msxroms1/u0/COLUM110.ROM new file mode 100644 index 00000000..71e5ba21 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COLUM110.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMEC112.ROM b/Source/Images/d_msxroms1/u0/COMEC112.ROM new file mode 100644 index 00000000..bd9ff5b7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMEC112.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMEO111.ROM b/Source/Images/d_msxroms1/u0/COMEO111.ROM new file mode 100644 index 00000000..7b8e0059 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMEO111.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMET113.ROM b/Source/Images/d_msxroms1/u0/COMET113.ROM new file mode 100644 index 00000000..9e96cc7d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMET113.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMIC114.ROM b/Source/Images/d_msxroms1/u0/COMIC114.ROM new file mode 100644 index 00000000..76cb404b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMIC114.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMPU115.ROM b/Source/Images/d_msxroms1/u0/COMPU115.ROM new file mode 100644 index 00000000..6798659d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMPU115.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMPU116.ROM b/Source/Images/d_msxroms1/u0/COMPU116.ROM new file mode 100644 index 00000000..9582f235 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMPU116.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMPU117.ROM b/Source/Images/d_msxroms1/u0/COMPU117.ROM new file mode 100644 index 00000000..78f26127 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMPU117.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COMPU118.ROM b/Source/Images/d_msxroms1/u0/COMPU118.ROM new file mode 100644 index 00000000..a6880ecd Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COMPU118.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CONDO119.ROM b/Source/Images/d_msxroms1/u0/CONDO119.ROM new file mode 100644 index 00000000..1a9d3852 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CONDO119.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COSMO121.ROM b/Source/Images/d_msxroms1/u0/COSMO121.ROM new file mode 100644 index 00000000..0e3e0c74 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COSMO121.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COSMO122.ROM b/Source/Images/d_msxroms1/u0/COSMO122.ROM new file mode 100644 index 00000000..e78f8fcd Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COSMO122.ROM differ diff --git a/Source/Images/d_msxroms1/u0/COURA123.ROM b/Source/Images/d_msxroms1/u0/COURA123.ROM new file mode 100644 index 00000000..5fee1cf5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/COURA123.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CRAZY125.ROM b/Source/Images/d_msxroms1/u0/CRAZY125.ROM new file mode 100644 index 00000000..5c184171 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CRAZY125.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CRAZY126.ROM b/Source/Images/d_msxroms1/u0/CRAZY126.ROM new file mode 100644 index 00000000..8bfb76fc Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CRAZY126.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CRAZY127.ROM b/Source/Images/d_msxroms1/u0/CRAZY127.ROM new file mode 100644 index 00000000..238c77ef Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CRAZY127.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CRUSA129.ROM b/Source/Images/d_msxroms1/u0/CRUSA129.ROM new file mode 100644 index 00000000..6f357c36 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CRUSA129.ROM differ diff --git a/Source/Images/d_msxroms1/u0/CSOJA077.ROM b/Source/Images/d_msxroms1/u0/CSOJA077.ROM new file mode 100644 index 00000000..e8457e83 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/CSOJA077.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DAIDA131.ROM b/Source/Images/d_msxroms1/u0/DAIDA131.ROM new file mode 100644 index 00000000..ca1af6b2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DAIDA131.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DAMBU133.ROM b/Source/Images/d_msxroms1/u0/DAMBU133.ROM new file mode 100644 index 00000000..8a2800a3 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DAMBU133.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DANGE134.ROM b/Source/Images/d_msxroms1/u0/DANGE134.ROM new file mode 100644 index 00000000..c1009822 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DANGE134.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DAVID135.ROM b/Source/Images/d_msxroms1/u0/DAVID135.ROM new file mode 100644 index 00000000..b436aee2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DAVID135.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DDAYJ130.ROM b/Source/Images/d_msxroms1/u0/DDAYJ130.ROM new file mode 100644 index 00000000..2c2eb465 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DDAYJ130.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DECAT137.ROM b/Source/Images/d_msxroms1/u0/DECAT137.ROM new file mode 100644 index 00000000..6d5bd4c0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DECAT137.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DEMON140.ROM b/Source/Images/d_msxroms1/u0/DEMON140.ROM new file mode 100644 index 00000000..4f883d6f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DEMON140.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DEVIL142.ROM b/Source/Images/d_msxroms1/u0/DEVIL142.ROM new file mode 100644 index 00000000..b0434cbf Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DEVIL142.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DIGDU143.ROM b/Source/Images/d_msxroms1/u0/DIGDU143.ROM new file mode 100644 index 00000000..fd5a47ca Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DIGDU143.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DIPDI145.ROM b/Source/Images/d_msxroms1/u0/DIPDI145.ROM new file mode 100644 index 00000000..16150fc5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DIPDI145.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DOKID146.ROM b/Source/Images/d_msxroms1/u0/DOKID146.ROM new file mode 100644 index 00000000..67be6f81 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DOKID146.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DOORD147.ROM b/Source/Images/d_msxroms1/u0/DOORD147.ROM new file mode 100644 index 00000000..7714380f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DOORD147.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DOROD148.ROM b/Source/Images/d_msxroms1/u0/DOROD148.ROM new file mode 100644 index 00000000..46067a57 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DOROD148.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DOUBL149.ROM b/Source/Images/d_msxroms1/u0/DOUBL149.ROM new file mode 100644 index 00000000..b8968746 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DOUBL149.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DRAGO151.ROM b/Source/Images/d_msxroms1/u0/DRAGO151.ROM new file mode 100644 index 00000000..13bd55e8 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DRAGO151.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DRAGO154.ROM b/Source/Images/d_msxroms1/u0/DRAGO154.ROM new file mode 100644 index 00000000..628ad78e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DRAGO154.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DRAIN158.ROM b/Source/Images/d_msxroms1/u0/DRAIN158.ROM new file mode 100644 index 00000000..6a2f6a06 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DRAIN158.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DRCOP150.ROM b/Source/Images/d_msxroms1/u0/DRCOP150.ROM new file mode 100644 index 00000000..aa5b48df Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DRCOP150.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DRUAG159.ROM b/Source/Images/d_msxroms1/u0/DRUAG159.ROM new file mode 100644 index 00000000..86d0e5cf Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DRUAG159.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DUNGE161.ROM b/Source/Images/d_msxroms1/u0/DUNGE161.ROM new file mode 100644 index 00000000..7be6a3a7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DUNGE161.ROM differ diff --git a/Source/Images/d_msxroms1/u0/DUNKS162.ROM b/Source/Images/d_msxroms1/u0/DUNKS162.ROM new file mode 100644 index 00000000..c229af83 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/DUNKS162.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EAGLE164.ROM b/Source/Images/d_msxroms1/u0/EAGLE164.ROM new file mode 100644 index 00000000..3f0223c9 --- /dev/null +++ b/Source/Images/d_msxroms1/u0/EAGLE164.ROM @@ -0,0 +1,181 @@ +pppx?yyxx88>?<|xyyy}}}}||||?@<<<<<<<<<<<?c 8߾p??????0 ??????_~2!0p $(048@D@P`p 05@@@PPP``pp:(=2:ݖ0: +~:ݾ( 0O~0,q !~w~w666p:ݖ@:ݖ0 +:O~ : +q ~w~wq6pp_2!~!~! ~!0~>~!ͧq >2>!p͡q "!t͡q !x͡q !|͡q 6666~w66>&. &.~~~~~0 ~ݖ00~ ~ݖ0>ɯ~}rʯrʵr6666666:(*: +8(֠8 >ͨ֠͛~͛:(='22: +( (~w:ʠw:ʠw6>~(w~p8666!666~8664~864r:::: :2: Vp:2: +((((:H(!|!| ! }!'}!B}"##~2>2!X6#csZ|:wʠw: +( +(("0: 7:ʠw.: ':ʠw: :ʠw: :ʠw*: ###~ #^#V"##~22*: ~(Qt:<2#Nد2w2:=2~866_!/t^#VitQwjtttCuuuvHvvvwQwQwQwQw*###~ #^#V":p8P666P6 6 6͌w6h6h6686 +6660:p8(6668666͌w6t6t6 +6`666@6:p8@666@6 66͌w6666066P: +((: +8: *###"##~26>͌w6666`6 66: +G 66 p <͵t66`6:p8P666P66 6͌w6666066 6:p8@666@66 6͌w6h6h66066 6:p8(666(66 6͌w6\6\6 6066 6:p8P666P6 66͌w666 +606606:p8@666@666͌w6h6h660660_(666 6͌w6P6h6 +6066@:p8 066 +0666͌w666 6(6(w666 60>23x>2=222p!@@6#>23x>22>2p!(!`~!0!~!8!~: +( !@!~>~w##~w!~####~q_!Yx^#Vlxxxxxxxxx444qÖx4444qÖx4454qÖx~0~066666~q_!x^#Vozz"{x>y=zozozozozozozozoz~8 0@p~W{ ~@W{64~W{6~wW{6W{~< ɯ6P66F6@6 6: +8 ~8C~p8:ͥy4z44+6 +664~86466y{PqÖx:ݖ8 8:ݖ86 +6y{Pq–x4qÖx@p~('~P8 4~86~<w 4y{Pq–x4qÖx@p~(%(F~8 ~@8 C~x0:644~8)6~w 6~<0w6y{Pq–x4qÖx@p~(+ ~8264~86~w~ ~ 6y{Pq–x4qÖx~(,((($( ((0 +~w~w~w~_!:|~((4 ~ 86 =<~w#~((4 ~ 86 =<~w~ –x4~ږx6~w+~wÖx~w6 !!Bx!!Bx!! Bx!!0Bx! !@Bx!$!PBx!(!`ͺx!0!ͺx!8!ͺx!@!ͺx!H!ͺx!P!ͺx  | +   +|    }   '}    +  B}p%tG'%Ddw?%' &P%$L~<= U$E6Q6Z|4 ,@0)$AGɼ$(E#`eDghMAqM}$egBĥd'HgWFăZ: ~% + +<,'  m#$"%㵢q@`ba!4` aPyo"'G#u ԥ0 $%:~$$$$ $%4$pABAۨg ˗o ˟Ө1!6# !m">2~22=2bPPPY YY!t!t!t! >Vz>GG>22ANB+͎͛!`\!` +\!`\!h"\!h*\!h2\D!\\\!\\\!k +\ +\ +\ +\  +\+ +\!S \\!ǘF\!ܘ\2::82F:82*:F(֯2F >2 +>2H"2G2H>2>2 !6#n2 +͎A+NB!66`6666P66̓2@2D2ٍ>2!H: +0$o~2ɒ͖!@"Z͛ )>͸:H(::”h:: : : >2:¦:Fʦ2F͛ð:د2r̓F͏͵*͔͉:(=<282:(>ͨ !\> !$\::02:<2د266: <5566:<28 2:<2:<2:ZI>2:(,66 446(6,55686<66 44:<282:(=2:=22266:ȯ2>2:<28 2:<2: :(>2!">^28>2=2=2![ >M!\MZ!\!\6o:(6p6q6r6s6l6m6n6o#$ :!M:#M:G>(G:د2͖*:د2͖͖*ɬ5%Ƭ5%PpА0@P `0P:冧 :L8 +>>>:8 +6666ͫ:د2:( +((2@2D:`<2( +((::==82ɯ2@2D::<2د2:=2:G>G:د2:0-~\\+88>2z>2>2zψ: a [ U @:::@($2@<2~[8 +f8 >2>2ɯ2:Dȯ2D   4455> Fψ: =26p6s6t6w6x6{6|666~[8f0>2::د24ʹ: :0>0>0>>:([(H(8(%((n(^(K66 66 6(6, ̈́6 6$̈́6(6,S̈́66S6862~4444>~5555>:0 6666:3: <2_2:<2 @2:_ =2(&~8&55=2(~04422:D :@މ2@2D: <2~wq~wp6r6sj: <2~wu~wt6v6wF: <2~wx~wy6z6{": !<2~w|~w}6~6>:(%5p5p5p5p~p0wpwqwrws2:(%5t5t5t5t~t0wtwvwuww2:(%5x5x5x5x~x0wxwywzw{2:5|5|5|5|~|0w|w}w~w2: 1! \Վ:~:>2>2>`2 #:>2>2Վ6l6m6nH6o:=2 !$ \: :8 :د2[: د2:@:<2(G>:<2>2:0 <2= _!M:!>jM 0ψ~%0~%>20~cf:>2:د2ʹ͏:<2>F:د2> 2>!M>!M! GOA/\ yɶi:: <2:(4444ɯ2:(5555!:?͵!9\:0 : >: د2: ::>2=2??O!͵!\: : 82:O!͵!\!  :( :((( ( +#(2:x=2": 8%!$\!$\!$\͛>2O8???G 6|#yG>tw#6t!9\!{\!'\!,{\!0\!48\!4\!4\̓!>M#> My!> M#> M#: +< +0 GM#xM +G>! M !M !\!!\6p6q6rH6sՎ:d![ >~M!\>M!Z>M!]>Mrqqqqqqqgfffffffnnnn# %$stttttt}@:(%: +0O +o +g~8x0$o!: +0$o^#V\ \؏܏ԏ׏ۏߏُݏԏ4ԏ4ԏ4ԏ4ԏ4ԏ4ԏ4ԏ4aMOQSUWYc]_aMOQSUWY[]_aaaMOQSUWYc]_aMOQSUWY[]_aaaNPRTVXZV^`bNPRTVXZ\^`baaNPRTVXZV^`bNPRTVXZ\^`ba߾: ::<2 +د2* :GB(%0B:=0_V ?:<2:=0_V V2<2:<2@ABCDEFGHIJK: ::::(=2<2*:2!f0_L@_dDoD@olD<@tD4@|D,@D$@D!:! +::<2:<282:(5l5p*#"|:<2ɇ0_og>M#G>M# >M# yX8%4BQ_n} +   +    + +  +  +  + * >VV>@V<| } !2`:V!*`:V!G>~M# ( OB!>  M , + +* +)('&%$#":::<2د2: !` G=0_OGY:?M#!:G͹ ͏!":(: >2: +!X0$o~2ɒ:<2='''0$ox8)8 8 8 880(  ͏:<2: :<2  :<2د2: !` G=0_OGY>~HV >M: !͏!': G͹!6#͏2<26o!"   + +   + +  gH@ghDw@@wpD8@xD0@D(@D @DOP@O`DWP@W`D_L@_dDgH@ghDoD@olDw@@wpD<@tD8@xD4@|D0@D,@D(@D$@D#"Bb +bb"k*k2kN222: :F:82F:G:8͛~w~w222>)!p6#: ww:8: z=2 N+!6#͏! \!$\!q \ )K>)>͸2H22Fð͛!A \~ww 6 6 +6 6 66:82͏:((=2>͛̓>F~ F85 5 ~ F0>):82:<20F: +<2 +2 +%#Z>22ɯ222222ɯ22 2 : !M!\!Z\G:'201>G: '2 0$: G(: 0 <2 y>G: '2 0ޗ! Ow#yw#! G~ #G~ #G~##!!!6# >!V=!?\!\!\!\V8!\!`\!\ͩ!6#>2@$ +%# $#> %#$"""#  )"$ #$ +&"&"wxyz{|}~@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv!4#:('@!AD!E 2>O:2:H :^0>2: >22@:82<2@:د2_2F!E 2!AG:> 6~A0!:G+!|!|!|!|:<0 2>͛:<8>O\߈H@ 䨈(ț૨ +BB@"3*8/Vh0i. (oy*b w (00 jj"Ȫ*Phz*b-H ,( A $̀ۀ̠ 0  0 ( &-(  #wk@ (0 (&$h* ! ( !Ȟ )iM(襈 @ ݠ{8Xܸ(0880(8:0*:~*( +({((o:9xxynx\ "xy(h8 : +/W + +k? ; +zh9('h h(* *";j hh׀ 瀨驨蘨1Ā(!*߀{8̊Q8%HHHլ 3 [;(8hjKz*2("bh ":3 +j"z*((@"*`h*Z{Kx`:*b9(@:*(*9J*ݢ!׀hݨǨ`̠8̡@]]]ꄊɀJ +ˉ́ +(@j*bJ(~"(?H?*( H"(!hHh&Bhh**/*J8 +:*Jkjڪ8&*;z{KHo +  ݠ (׀( ((젢 ( ((G:(0x2G ::(0x2G( (::(0x2!⯾ #J# #´# #SJSڴS: :ʭ!"20+( +ʙ: :R!" :2>20+( G:2xG!" +:2>20+G:2xG!!~(͛!*~0%Ѣ":ˇO:Gy(2@> > > *" #~w#"" 5 #"*" #~w#""< 5 #"<*"< #~w#""<5 #"<*"~ww~( #0_#~w~ ~O?Gyw>w1#~0;#~7#ɀ`@0  _y͓_x_x<_>_>!f:2G0$o^#VSS#^#VSS#^#VSS2222>2@{: 2=2@!C6#!:2G0#o^#VSS22:ˇ2@![: 2!6#: 2@!:2G0$o^#VSS#^#VSS222:2@{: 2!$6#:62@ɸ]s뤼ͤ#'?IY3838?@?((Jh(8jc0 o*(8@ @ \` +ɚ@̀@`(( ((*蘂 +@BI1B)B(;X(@(X0 (".x2. ( "@"iP<"{*o +/ +8*(2(8"+ +`"x(z pp+s8_ ( _ !! "݈E H`ɹEM??~?????$??????~$~$@~  @ @ @ <~<>pp<~<?<~~<~~ @@@?@: 8࠾(; +((9 (@@ภ P}p {?0| u 0  ? 0 p0?s(Ԉ?)(p?/V#(=>v>r`0 `@ nyL@""0`@ 0 @@p0 @@ @@ p???<@o????† Ѐ7/o__߿߿ +,E`I8 >" `h4 .24@ |&B@AD!qq<< @@   H    +Td0@ +6xi]On + $بrjԤP! - @ HЀUਰ \ No newline at end of file diff --git a/Source/Images/d_msxroms1/u0/EGGER165.ROM b/Source/Images/d_msxroms1/u0/EGGER165.ROM new file mode 100644 index 00000000..8e8682e2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EGGER165.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ELEVA166.ROM b/Source/Images/d_msxroms1/u0/ELEVA166.ROM new file mode 100644 index 00000000..0ed7e625 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ELEVA166.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ERIKA167.ROM b/Source/Images/d_msxroms1/u0/ERIKA167.ROM new file mode 100644 index 00000000..eb002e22 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ERIKA167.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXAIN168.ROM b/Source/Images/d_msxroms1/u0/EXAIN168.ROM new file mode 100644 index 00000000..fd95272b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXAIN168.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXCHA169.ROM b/Source/Images/d_msxroms1/u0/EXCHA169.ROM new file mode 100644 index 00000000..9d1c2648 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXCHA169.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXERI170.ROM b/Source/Images/d_msxroms1/u0/EXERI170.ROM new file mode 100644 index 00000000..66d5ce27 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXERI170.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXERI171.ROM b/Source/Images/d_msxroms1/u0/EXERI171.ROM new file mode 100644 index 00000000..de17fa54 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXERI171.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXOID172.ROM b/Source/Images/d_msxroms1/u0/EXOID172.ROM new file mode 100644 index 00000000..7eba0c8d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXOID172.ROM differ diff --git a/Source/Images/d_msxroms1/u0/EXOID173.ROM b/Source/Images/d_msxroms1/u0/EXOID173.ROM new file mode 100644 index 00000000..642a20ef Binary files /dev/null and b/Source/Images/d_msxroms1/u0/EXOID173.ROM differ diff --git a/Source/Images/d_msxroms1/u0/F16FI175.ROM b/Source/Images/d_msxroms1/u0/F16FI175.ROM new file mode 100644 index 00000000..9bfb184f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/F16FI175.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FAIRY177.ROM b/Source/Images/d_msxroms1/u0/FAIRY177.ROM new file mode 100644 index 00000000..9a32ae74 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FAIRY177.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FATET176.ROM b/Source/Images/d_msxroms1/u0/FATET176.ROM new file mode 100644 index 00000000..0be36151 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FATET176.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FATHO183.ROM b/Source/Images/d_msxroms1/u0/FATHO183.ROM new file mode 100644 index 00000000..0e735b1a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FATHO183.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FINAL184.ROM b/Source/Images/d_msxroms1/u0/FINAL184.ROM new file mode 100644 index 00000000..92e0cd03 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FINAL184.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FINAL185.ROM b/Source/Images/d_msxroms1/u0/FINAL185.ROM new file mode 100644 index 00000000..93d54002 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FINAL185.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FIRER187.ROM b/Source/Images/d_msxroms1/u0/FIRER187.ROM new file mode 100644 index 00000000..f13d4eb5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FIRER187.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLAPP188.ROM b/Source/Images/d_msxroms1/u0/FLAPP188.ROM new file mode 100644 index 00000000..54c3af9f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLAPP188.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLAPP189.ROM b/Source/Images/d_msxroms1/u0/FLAPP189.ROM new file mode 100644 index 00000000..4a222886 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLAPP189.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLASH190.ROM b/Source/Images/d_msxroms1/u0/FLASH190.ROM new file mode 100644 index 00000000..77b56674 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLASH190.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLASH191.ROM b/Source/Images/d_msxroms1/u0/FLASH191.ROM new file mode 100644 index 00000000..95688391 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLASH191.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLICK192.ROM b/Source/Images/d_msxroms1/u0/FLICK192.ROM new file mode 100644 index 00000000..0b7b46be Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLICK192.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLICS193.ROM b/Source/Images/d_msxroms1/u0/FLICS193.ROM new file mode 100644 index 00000000..12ca4359 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLICS193.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FLIPP196.ROM b/Source/Images/d_msxroms1/u0/FLIPP196.ROM new file mode 100644 index 00000000..9817284c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FLIPP196.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FORMA197.ROM b/Source/Images/d_msxroms1/u0/FORMA197.ROM new file mode 100644 index 00000000..d4abd536 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FORMA197.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FROGG198.ROM b/Source/Images/d_msxroms1/u0/FROGG198.ROM new file mode 100644 index 00000000..147f006b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FROGG198.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FRONT199.ROM b/Source/Images/d_msxroms1/u0/FRONT199.ROM new file mode 100644 index 00000000..91a83d2e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FRONT199.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FRUIT200.ROM b/Source/Images/d_msxroms1/u0/FRUIT200.ROM new file mode 100644 index 00000000..e1c0ed85 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FRUIT200.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FUNKY201.ROM b/Source/Images/d_msxroms1/u0/FUNKY201.ROM new file mode 100644 index 00000000..4649feb0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FUNKY201.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FUTBO202.ROM b/Source/Images/d_msxroms1/u0/FUTBO202.ROM new file mode 100644 index 00000000..41a1ed17 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FUTBO202.ROM differ diff --git a/Source/Images/d_msxroms1/u0/FUUNT203.ROM b/Source/Images/d_msxroms1/u0/FUUNT203.ROM new file mode 100644 index 00000000..9a403236 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/FUUNT203.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GALAG204.ROM b/Source/Images/d_msxroms1/u0/GALAG204.ROM new file mode 100644 index 00000000..90b5d3c8 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GALAG204.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GALAX205.ROM b/Source/Images/d_msxroms1/u0/GALAX205.ROM new file mode 100644 index 00000000..6a2b1307 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GALAX205.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GAMEL208.ROM b/Source/Images/d_msxroms1/u0/GAMEL208.ROM new file mode 100644 index 00000000..fdaf71ba Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GAMEL208.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GAMEM209.ROM b/Source/Images/d_msxroms1/u0/GAMEM209.ROM new file mode 100644 index 00000000..5ed56039 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GAMEM209.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GAMEM210.ROM b/Source/Images/d_msxroms1/u0/GAMEM210.ROM new file mode 100644 index 00000000..cf2a9037 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GAMEM210.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GANGM213.ROM b/Source/Images/d_msxroms1/u0/GANGM213.ROM new file mode 100644 index 00000000..17ecd4b9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GANGM213.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GHOST216.ROM b/Source/Images/d_msxroms1/u0/GHOST216.ROM new file mode 100644 index 00000000..61489052 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GHOST216.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GLIDE217.ROM b/Source/Images/d_msxroms1/u0/GLIDE217.ROM new file mode 100644 index 00000000..2e6a7cb6 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GLIDE217.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GOKIB218.ROM b/Source/Images/d_msxroms1/u0/GOKIB218.ROM new file mode 100644 index 00000000..f0318e5c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GOKIB218.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GOLFG219.ROM b/Source/Images/d_msxroms1/u0/GOLFG219.ROM new file mode 100644 index 00000000..ba6c553f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GOLFG219.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GOMOK221.ROM b/Source/Images/d_msxroms1/u0/GOMOK221.ROM new file mode 100644 index 00000000..44fdf278 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GOMOK221.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GOONI222.ROM b/Source/Images/d_msxroms1/u0/GOONI222.ROM new file mode 100644 index 00000000..68f1f175 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GOONI222.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GPWOR223.ROM b/Source/Images/d_msxroms1/u0/GPWOR223.ROM new file mode 100644 index 00000000..245be796 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GPWOR223.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GREEN224.ROM b/Source/Images/d_msxroms1/u0/GREEN224.ROM new file mode 100644 index 00000000..fd22613e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GREEN224.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GROGS225.ROM b/Source/Images/d_msxroms1/u0/GROGS225.ROM new file mode 100644 index 00000000..c0d6e505 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GROGS225.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GUARD226.ROM b/Source/Images/d_msxroms1/u0/GUARD226.ROM new file mode 100644 index 00000000..6edce7ec Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GUARD226.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GULKA227.ROM b/Source/Images/d_msxroms1/u0/GULKA227.ROM new file mode 100644 index 00000000..1fe6f20d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GULKA227.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GUNFR228.ROM b/Source/Images/d_msxroms1/u0/GUNFR228.ROM new file mode 100644 index 00000000..82ff55ab Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GUNFR228.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GUNJI229.ROM b/Source/Images/d_msxroms1/u0/GUNJI229.ROM new file mode 100644 index 00000000..ac15476c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GUNJI229.ROM differ diff --git a/Source/Images/d_msxroms1/u0/GYROD230.ROM b/Source/Images/d_msxroms1/u0/GYROD230.ROM new file mode 100644 index 00000000..4172a36b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/GYROD230.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HADES232.ROM b/Source/Images/d_msxroms1/u0/HADES232.ROM new file mode 100644 index 00000000..4071ca20 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HADES232.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HAFAN233.ROM b/Source/Images/d_msxroms1/u0/HAFAN233.ROM new file mode 100644 index 00000000..62382291 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HAFAN233.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HANAF235.ROM b/Source/Images/d_msxroms1/u0/HANAF235.ROM new file mode 100644 index 00000000..67e26894 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HANAF235.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HANGO236.ROM b/Source/Images/d_msxroms1/u0/HANGO236.ROM new file mode 100644 index 00000000..ca873d98 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HANGO236.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HARAP237.ROM b/Source/Images/d_msxroms1/u0/HARAP237.ROM new file mode 100644 index 00000000..c2ca6818 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HARAP237.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HAUNT240.ROM b/Source/Images/d_msxroms1/u0/HAUNT240.ROM new file mode 100644 index 00000000..aa594aef Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HAUNT240.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HEAVY241.ROM b/Source/Images/d_msxroms1/u0/HEAVY241.ROM new file mode 100644 index 00000000..93577f99 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HEAVY241.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HEIST242.ROM b/Source/Images/d_msxroms1/u0/HEIST242.ROM new file mode 100644 index 00000000..e19d718a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HEIST242.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HELIT243.ROM b/Source/Images/d_msxroms1/u0/HELIT243.ROM new file mode 100644 index 00000000..a914b678 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HELIT243.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HEROJ231.ROM b/Source/Images/d_msxroms1/u0/HEROJ231.ROM new file mode 100644 index 00000000..7664ea9c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HEROJ231.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HIGHW244.ROM b/Source/Images/d_msxroms1/u0/HIGHW244.ROM new file mode 100644 index 00000000..215c156a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HIGHW244.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HIGHW245.ROM b/Source/Images/d_msxroms1/u0/HIGHW245.ROM new file mode 100644 index 00000000..a897fe6a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HIGHW245.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HISYA246.ROM b/Source/Images/d_msxroms1/u0/HISYA246.ROM new file mode 100644 index 00000000..b7d2c7ae Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HISYA246.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HITSU247.ROM b/Source/Images/d_msxroms1/u0/HITSU247.ROM new file mode 100644 index 00000000..67ba81d7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HITSU247.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HOLEI248.ROM b/Source/Images/d_msxroms1/u0/HOLEI248.ROM new file mode 100644 index 00000000..3e116511 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HOLEI248.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HOLEI249.ROM b/Source/Images/d_msxroms1/u0/HOLEI249.ROM new file mode 100644 index 00000000..22084fa7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HOLEI249.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HONKB250.ROM b/Source/Images/d_msxroms1/u0/HONKB250.ROM new file mode 100644 index 00000000..4f90e20b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HONKB250.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HOPPE251.ROM b/Source/Images/d_msxroms1/u0/HOPPE251.ROM new file mode 100644 index 00000000..47d39987 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HOPPE251.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HUDSO252.ROM b/Source/Images/d_msxroms1/u0/HUDSO252.ROM new file mode 100644 index 00000000..2fc2ec4b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HUDSO252.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HUSTL253.ROM b/Source/Images/d_msxroms1/u0/HUSTL253.ROM new file mode 100644 index 00000000..0217704e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HUSTL253.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYDLI254.ROM b/Source/Images/d_msxroms1/u0/HYDLI254.ROM new file mode 100644 index 00000000..9ffbc47d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYDLI254.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER257.ROM b/Source/Images/d_msxroms1/u0/HYPER257.ROM new file mode 100644 index 00000000..593c5e3e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER257.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER258.ROM b/Source/Images/d_msxroms1/u0/HYPER258.ROM new file mode 100644 index 00000000..368b8b42 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER258.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER259.ROM b/Source/Images/d_msxroms1/u0/HYPER259.ROM new file mode 100644 index 00000000..093755f0 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER259.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER260.ROM b/Source/Images/d_msxroms1/u0/HYPER260.ROM new file mode 100644 index 00000000..ab1bbe5c Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER260.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER261.ROM b/Source/Images/d_msxroms1/u0/HYPER261.ROM new file mode 100644 index 00000000..65da8d52 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER261.ROM differ diff --git a/Source/Images/d_msxroms1/u0/HYPER262.ROM b/Source/Images/d_msxroms1/u0/HYPER262.ROM new file mode 100644 index 00000000..78d8f534 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/HYPER262.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ICEWO263.ROM b/Source/Images/d_msxroms1/u0/ICEWO263.ROM new file mode 100644 index 00000000..68fe5f72 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ICEWO263.ROM differ diff --git a/Source/Images/d_msxroms1/u0/IGANI264.ROM b/Source/Images/d_msxroms1/u0/IGANI264.ROM new file mode 100644 index 00000000..d2277337 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/IGANI264.ROM differ diff --git a/Source/Images/d_msxroms1/u0/IGANI265.ROM b/Source/Images/d_msxroms1/u0/IGANI265.ROM new file mode 100644 index 00000000..eebeb05b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/IGANI265.ROM differ diff --git a/Source/Images/d_msxroms1/u0/INDIA266.ROM b/Source/Images/d_msxroms1/u0/INDIA266.ROM new file mode 100644 index 00000000..525f89e9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/INDIA266.ROM differ diff --git a/Source/Images/d_msxroms1/u0/IRIEG267.ROM b/Source/Images/d_msxroms1/u0/IRIEG267.ROM new file mode 100644 index 00000000..7ffb5bcc Binary files /dev/null and b/Source/Images/d_msxroms1/u0/IRIEG267.ROM differ diff --git a/Source/Images/d_msxroms1/u0/IRIEG268.ROM b/Source/Images/d_msxroms1/u0/IRIEG268.ROM new file mode 100644 index 00000000..c0908747 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/IRIEG268.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ISSUN269.ROM b/Source/Images/d_msxroms1/u0/ISSUN269.ROM new file mode 100644 index 00000000..801705f1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/ISSUN269.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JANKA272.ROM b/Source/Images/d_msxroms1/u0/JANKA272.ROM new file mode 100644 index 00000000..488fa29a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JANKA272.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JETSE273.ROM b/Source/Images/d_msxroms1/u0/JETSE273.ROM new file mode 100644 index 00000000..97c5d428 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JETSE273.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JIGSA274.ROM b/Source/Images/d_msxroms1/u0/JIGSA274.ROM new file mode 100644 index 00000000..295991b7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JIGSA274.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JISSE275.ROM b/Source/Images/d_msxroms1/u0/JISSE275.ROM new file mode 100644 index 00000000..5528d199 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JISSE275.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JPWIN270.ROM b/Source/Images/d_msxroms1/u0/JPWIN270.ROM new file mode 100644 index 00000000..04e7657d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JPWIN270.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JUMPC277.ROM b/Source/Images/d_msxroms1/u0/JUMPC277.ROM new file mode 100644 index 00000000..1d745007 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JUMPC277.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JUMPI279.ROM b/Source/Images/d_msxroms1/u0/JUMPI279.ROM new file mode 100644 index 00000000..9b76cda9 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JUMPI279.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JUMPJ276.ROM b/Source/Images/d_msxroms1/u0/JUMPJ276.ROM new file mode 100644 index 00000000..484aee0d Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JUMPJ276.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JUMPL278.ROM b/Source/Images/d_msxroms1/u0/JUMPL278.ROM new file mode 100644 index 00000000..56358488 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JUMPL278.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JUNOF280.ROM b/Source/Images/d_msxroms1/u0/JUNOF280.ROM new file mode 100644 index 00000000..728a51da Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JUNOF280.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JYANF281.ROM b/Source/Images/d_msxroms1/u0/JYANF281.ROM new file mode 100644 index 00000000..4cdd3a98 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JYANF281.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JYANK282.ROM b/Source/Images/d_msxroms1/u0/JYANK282.ROM new file mode 100644 index 00000000..312e435a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JYANK282.ROM differ diff --git a/Source/Images/d_msxroms1/u0/JYANY283.ROM b/Source/Images/d_msxroms1/u0/JYANY283.ROM new file mode 100644 index 00000000..a38ec42f Binary files /dev/null and b/Source/Images/d_msxroms1/u0/JYANY283.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KAGEN284.ROM b/Source/Images/d_msxroms1/u0/KAGEN284.ROM new file mode 100644 index 00000000..ff101dab Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KAGEN284.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KARAM285.ROM b/Source/Images/d_msxroms1/u0/KARAM285.ROM new file mode 100644 index 00000000..aab310b5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KARAM285.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KEYST287.ROM b/Source/Images/d_msxroms1/u0/KEYST287.ROM new file mode 100644 index 00000000..2ff1820a Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KEYST287.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KICKI288.ROM b/Source/Images/d_msxroms1/u0/KICKI288.ROM new file mode 100644 index 00000000..11e28f0b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KICKI288.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KINAS289.ROM b/Source/Images/d_msxroms1/u0/KINAS289.ROM new file mode 100644 index 00000000..8d9bf8f7 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KINAS289.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KINGB290.ROM b/Source/Images/d_msxroms1/u0/KINGB290.ROM new file mode 100644 index 00000000..48799c65 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KINGB290.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KINGS292.ROM b/Source/Images/d_msxroms1/u0/KINGS292.ROM new file mode 100644 index 00000000..052e59c5 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KINGS292.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KINNI294.ROM b/Source/Images/d_msxroms1/u0/KINNI294.ROM new file mode 100644 index 00000000..6d9e0e93 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KINNI294.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KNIGH295.ROM b/Source/Images/d_msxroms1/u0/KNIGH295.ROM new file mode 100644 index 00000000..586382fc Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KNIGH295.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KNIGH296.ROM b/Source/Images/d_msxroms1/u0/KNIGH296.ROM new file mode 100644 index 00000000..553593b8 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KNIGH296.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM300.ROM b/Source/Images/d_msxroms1/u0/KONAM300.ROM new file mode 100644 index 00000000..a3c28167 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM300.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM301.ROM b/Source/Images/d_msxroms1/u0/KONAM301.ROM new file mode 100644 index 00000000..508cb9c2 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM301.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM302.ROM b/Source/Images/d_msxroms1/u0/KONAM302.ROM new file mode 100644 index 00000000..a5b250f1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM302.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM303.ROM b/Source/Images/d_msxroms1/u0/KONAM303.ROM new file mode 100644 index 00000000..8910179b Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM303.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM304.ROM b/Source/Images/d_msxroms1/u0/KONAM304.ROM new file mode 100644 index 00000000..425119fa Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM304.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM305.ROM b/Source/Images/d_msxroms1/u0/KONAM305.ROM new file mode 100644 index 00000000..f2ddc197 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM305.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM306.ROM b/Source/Images/d_msxroms1/u0/KONAM306.ROM new file mode 100644 index 00000000..fba79319 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM306.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM307.ROM b/Source/Images/d_msxroms1/u0/KONAM307.ROM new file mode 100644 index 00000000..bc6feec3 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM307.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONAM308.ROM b/Source/Images/d_msxroms1/u0/KONAM308.ROM new file mode 100644 index 00000000..8b7d9319 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONAM308.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KONEK309.ROM b/Source/Images/d_msxroms1/u0/KONEK309.ROM new file mode 100644 index 00000000..f450a0e1 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KONEK309.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KUNGF310.ROM b/Source/Images/d_msxroms1/u0/KUNGF310.ROM new file mode 100644 index 00000000..a6f186a6 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KUNGF310.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KUNGF311.ROM b/Source/Images/d_msxroms1/u0/KUNGF311.ROM new file mode 100644 index 00000000..c77d1051 Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KUNGF311.ROM differ diff --git a/Source/Images/d_msxroms1/u0/KUNGF312.ROM b/Source/Images/d_msxroms1/u0/KUNGF312.ROM new file mode 100644 index 00000000..ba6ff72e Binary files /dev/null and b/Source/Images/d_msxroms1/u0/KUNGF312.ROM differ diff --git a/Source/Images/d_msxroms1/u0/ROMLIST.TXT b/Source/Images/d_msxroms1/u0/ROMLIST.TXT new file mode 100644 index 00000000..9bbaed80 --- /dev/null +++ b/Source/Images/d_msxroms1/u0/ROMLIST.TXT @@ -0,0 +1,495 @@ +379 LOADING GAMES OUT OF 481 ROMS + +Some require keyboard support and/or 2 joystick buttons. They are marked with a '?' in the list below +Some require the patcher (MSX8P.COM). They are marked with a 'P' in the list below +Some don't work at all. They are marked with a 'N' in the list below + +Y = (271) WORKS +YP= ( 55) USE MSX8P (PATCHER VERSION NEEDED DUE TO DIRECT VDP/PSG WRITES INSTEAD OF GOING THROUGH THE BIOS) +? = ( 53) RUNS BUT NOT PLAYABLE - POSSIBLY REQUIRES TWO BUTTON JOYSTICK OR UNSUPPORTED KEYBOARD CONTROLS +N = DOES NOT WORK + +STAT SHORT NAME LONG NAME (481 ROMS) +==== ============ ============================================ + Y 10YAR000.ROM 10-Yard Fight (Japan).rom + N0 3DGOL002.ROM 3-D Golf Simulation (Japan) (High Speed).rom + N0 3DGOL003.ROM 3-D Golf Simulation (Japan).rom + N0 3DTEN004.ROM 3D Tennis (Japan).rom + Y ACTMA007.ROM Actman (Japan).rom + Y ADVEN008.ROM Adven' Chuta! (Japan).rom + Y AEJAP005.ROM A.E. (Japan).rom + Y? ALBAT009.ROM Albatros (Japan).rom + NP8 ALCAZ010.ROM Alcazar - The Forgotten Fortress (Japan).rom + YP ALIBA011.ROM Alibaba and 40 Thieves (Japan).rom + YP ALIEN012.ROM Alien 8 (Japan).rom + YP? ALPHA014.ROM Alpha Roid (Japan).rom + YP ALPHA015.ROM Alpha Squadron (Japan).rom + Y AMERI016.ROM American Truck (Japan).rom + YP ANAZA017.ROM Anaza - Kaleidoscope Special (Japan).rom + Y? ANGEL018.ROM Angelo (Japan).rom + Y ANTAR020.ROM Antarctic Adventure (Europe).rom + YP ANTAR021.ROM Antarctic Adventure (Japan).rom + YP ANTYJ022.ROM Anty (Japan).rom + Y AQUAP023.ROM Aqua Polis SOS (Japan).rom + N4 AQUAT024.ROM Aquattack (Japan).rom + Y ARAMO025.ROM Aramo (Japan).rom + YP ARKAN026.ROM Arkanoid (Japan).rom + Y ATHLE027.ROM Athletic Ball (Japan).rom + N ATHLE028.ROM Athletic Land (Japan) (Beta).rom + YP ATHLE029.ROM Athletic Land (Japan).rom + Y ATTAC030.ROM Attack Four Volley Ball (Japan).rom + N4 BACKG032.ROM Back Gammon (Japan).rom + Y BACKG034.ROM Backgammon (Europe).rom + Y BACKT033.ROM Back to the Future (Japan).rom + YP BALAN035.ROM Balance (Japan).rom + Y BANAN036.ROM Banana (Japan).rom + Y BANKP037.ROM Bank Panic (Japan).rom + N5 BASIC038.ROM Basic Lessons 1 (Japan).rom + N BASIC039.ROM Basic Lessons 2 (Japan).rom + N4 BATTE041.ROM Batten Tanuki no Daibouken (Japan) (v1.03).rom + Y BATTL042.ROM Battle Cross (Japan).rom + Y BATTL043.ROM Battleship Clapton II (Japan).rom + Y BCSQU031.ROM B.C.'s Quest (Japan).rom + Y BEACH044.ROM Beach-Head (Europe).rom + N0 BEAMR045.ROM Beam Rider (Japan).rom + Y BECKY046.ROM Becky (Japan).rom + Y BEEFL047.ROM Bee & Flower (Japan).rom + Y BIFAM048.ROM Bifamu (Japan).rom + Y BINAR049.ROM Binary Land (Japan).rom + Y BLACK051.ROM Black Onyx, The (Japan).rom + Y? BLAGG052.ROM Blagger MSX (Europe) (Converted From Tape).rom + YP BLOCK053.ROM Block Hole (Korea) (Unl).rom + Y BLOCK054.ROM Blockade Runner (Japan).rom + Y BOGGY055.ROM Boggy '84 (Japan).rom + Y BOING056.ROM Boing Boing (Spain).rom + N8 BOKOS057.ROM Bokosuka Wars (Japan).rom + Y BOMBE059.ROM Bomber Man (Japan).rom + Y BOMBE060.ROM Bomber Man Special (Japan).rom + Y BOOGI061.ROM Boogie Woogi Jungle (Japan).rom + Y? BOOME062.ROM Boomerang (Japan).rom + Y BOSCO064.ROM Bosconian (Japan).rom + Y BOUKE065.ROM Bouken Roman - Dota (Japan).rom + Y BOULD066.ROM Boulder Dash (Japan).rom + Y BOUNC067.ROM Bouncing Block (Spain).rom + N0 BRAIN068.ROM Brain, The (Japan).rom + N0 BREAK070.ROM Break Out (Japan).rom + Y BROTH071.ROM Brother Adventure (Korea) (Unl).rom + Y BRUCE072.ROM Bruce Lee (Japan).rom + YP BUBBL073.ROM Bubble Bobble (Korea) (Unl).rom + N0 BURGE074.ROM Burgertime (Japan).rom + Y BURUT075.ROM Buru To Marty Kikiippatsu - Inspecteur Z (Japan).rom + Y BUTAM076.ROM Butam Pants (Japan).rom + Y CABBA078.ROM Cabbage Patch Kids (Japan).rom + YP? CANDO079.ROM Candoo Ninja (Japan).rom + Y CANNO080.ROM Cannon Ball (Japan).rom + Y CANNO081.ROM Cannon Fighter (Japan).rom + Y CAPTA082.ROM Captain Chef (Japan).rom + Y CARFI083.ROM Car Fighter (Japan).rom + YP CARJA084.ROM Car Jamboree (Japan).rom + Y CARRA085.ROM Car-Race (Japan).rom + Y CASIO086.ROM Casio Daishogai Keiba (Japan).rom + Y CASIO087.ROM Casio Pachinko-U.F.O. (Japan).rom + Y CASIO088.ROM Casio Ski Command (Japan).rom + Y CASIO089.ROM Casio Worldopen (Japan).rom + Y CASTL090.ROM Castle Excellent (Japan).rom + Y CASTL091.ROM Castle, The (Japan).rom + Y CHACK092.ROM Chack'n Pop (Japan).rom + Y CHALL093.ROM Challenge Derby (Japan).rom + Y CHAMP094.ROM Champion Boxing (Japan).rom + Y? CHAMP095.ROM Champion Ice Hockey (Japan).rom + Y CHAMP096.ROM Champion Kendou (Japan).rom + Y CHAMP097.ROM Champion Pro Wrestling (Japan).rom + Y CHAMP098.ROM Champion Soccer (Japan).rom + Y CHAMP099.ROM Championship Lode Runner (Japan).rom + Y? CHECK100.ROM Checkers in Tantan Tanuki (Japan).rom + NP4 CHESS101.ROM Chess (Japan).rom + NP4 CHESS102.ROM Chess Game, The (Europe).rom + Y CHOPL103.ROM Choplifter (Japan).rom + YP CHORO104.ROM Choro Q (Japan).rom + N4 CHUGA105.ROM Chugaku Hisshu Eibunpo 1 (Japan).rom + Y CIRCU106.ROM Circus Charlie (Japan).rom + Y CITYC107.ROM City Connection (Japan).rom + YP COAST108.ROM Coaster Race (Japan).rom + Y COLOR109.ROM Color Ball (Japan).rom + N0 COLUM110.ROM Columns (Japan).rom + Y COMEC112.ROM Comecocos (Spain).rom + YP COMEO111.ROM Come On! Picot (Japan).rom + N0 COMET113.ROM Comet Tail (Japan).rom + Y COMIC114.ROM Comic Bakery (Japan).rom + YP COMPU115.ROM Computer Billiards (Japan).rom + NP4 COMPU116.ROM Computer Nyuumon - Computer Lessons (Japan).rom + NP5 COMPU117.ROM Computer Othello (Japan).rom + YP COMPU118.ROM Computer Pachinko (Japan).rom + Y CONDO119.ROM Con-Dori (Japan).rom + N8 COSMO121.ROM Cosmo (Japan).rom + Y COSMO122.ROM Cosmo-Explorer (Japan).rom + N0 COURA123.ROM Courageous Perseus (Japan).rom + N0 CRAZY125.ROM Crazy Bullet (Japan).rom + Y CRAZY126.ROM Crazy Cars (Europe).rom + N0 CRAZY127.ROM Crazy Train (Japan).rom + Y CRUSA129.ROM Crusader (Japan).rom + N4 CSOJA077.ROM C-So! (Japan).rom + N4 DAIDA131.ROM Daidasso (Japan).rom + Y DAMBU133.ROM Dam Busters, The (Japan).rom + N0 DANGE134.ROM Danger X4 (Japan).rom + Y DAVID135.ROM David II (Japan).rom + Y DDAYJ130.ROM D-Day (Japan).rom + N0 DECAT137.ROM Decathlon (Japan).rom + N0 DEMON140.ROM Demon Crystal, The (Japan).rom + Y DEVIL142.ROM Devil's Heaven (Japan).rom + Y DIGDU143.ROM Dig Dug (Japan).rom + YP DIPDI145.ROM Dip Dip (Spain).rom + Y DOKID146.ROM Doki Doki Penguin Land (Japan).rom + Y DOORD147.ROM Doordoor (Japan).rom + N4 DOROD148.ROM Dorodon (Japan).rom + YP DOUBL149.ROM Double Dragon (Korea) (Unl).rom + Y? DRCOP150.ROM Dr. Copy (Japan).rom + Y DRAGO151.ROM Dragon Attack (Japan).rom + Y DRAGO154.ROM Dragon Slayer (Japan).rom + YP DRAIN158.ROM Drainer (Japan).rom + Y DRUAG159.ROM Druaga no Tou (Japan).rom + Y? DUNGE161.ROM Dungeon Master (Japan).rom + Y DUNKS162.ROM Dunk Shot (Japan).rom + NF EAGLE164.ROM Eagle Fighter (Japan).rom + N4 EGGER165.ROM Eggerland Mystery (Japan).rom + Y ELEVA166.ROM Elevator Action (Japan).rom + Y? ERIKA167.ROM Erika (Japan).rom + Y EXAIN168.ROM Exa Innova (Japan).rom + N0 EXCHA169.ROM Exchanger (Japan).rom + Y EXERI170.ROM Exerion (Japan).rom + Y EXERI171.ROM Exerion II - Zorni (Japan).rom + YP EXOID172.ROM Exoide-Z (Japan).rom + Y EXOID173.ROM Exoide-Z Area 5 (Japan).rom + N8 F16FI175.ROM F16 Fighting Falcon (Japan).rom + Y FAIRY177.ROM Fairy (Japan).rom + YP FATET176.ROM Fa Tetris (Korea) (Unl).rom + Y FATHO183.ROM Fathom (Japan).rom + Y FINAL184.ROM Final Justice (Japan).rom + Y FINAL185.ROM Final Mahjong (Japan).rom + Y FIRER187.ROM Fire Rescue (Japan).rom + Y FLAPP188.ROM Flappy (Japan).rom + Y FLAPP189.ROM Flappy - Limited 85 (Japan).rom + YP? FLASH190.ROM Flash Point (Korea) (Unl).rom + Y FLASH191.ROM Flash Splash (Japan).rom + Y FLICK192.ROM Flicky (Japan).rom + Y FLICS193.ROM Flics, Les (France).rom + Y FLIPP196.ROM Flipper Slipper (Japan).rom + Y FORMA197.ROM Formation Z (Japan).rom + YP FROGG198.ROM Frogger (Japan).rom + Y FRONT199.ROM Front Line (Japan).rom + Y FRUIT200.ROM Fruit Search (Japan).rom + Y FUNKY201.ROM Funky Mouse (Japan).rom + N8 FUTBO202.ROM Futbol (Spain).rom + Y FUUNT203.ROM Fuun Takeshijyou (Japan).rom + Y GALAG204.ROM Galaga (Japan).rom + Y GALAX205.ROM Galaxian (Japan).rom + N0 GAMEL208.ROM Game Land (Japan).rom + Y? GAMEM209.ROM Game Master (Europe).rom + Y? GAMEM210.ROM Game Master (Japan).rom + N0 GANGM213.ROM Gang Master (Japan).rom + YP GHOST216.ROM Ghostbusters (Europe).rom + Y? GLIDE217.ROM Glider (Japan).rom + Y GOKIB218.ROM Gokiburi Daisakusen - Bug Bomb (Japan).rom + N0 GOLFG219.ROM Golf Game (Japan).rom + YP? GOMOK221.ROM Gomok Narabe - Omo Go (Japan).rom + Y GOONI222.ROM Goonies, The (Japan).rom + Y GPWOR223.ROM GP World (Japan).rom + N9 GREEN224.ROM Green Beret (Europe).rom + Y GROGS225.ROM Grog's Revenge (Japan).rom + Y GUARD226.ROM Guardic (Japan).rom + Y GULKA227.ROM Gulkave (Japan).rom + YP GUNFR228.ROM Gun Fright (Japan).rom + Y GUNJI229.ROM Gunjin Shougi Mars (Japan).rom + YP GYROD230.ROM Gyrodine (Japan).rom + N0 HEROJ231.ROM H.E.R.O. (Japan).rom + Y HADES232.ROM Hades no Monsho (Japan).rom + Y HAFAN233.ROM Hafanuda Koi Koi - Gostop Godori (Japan).rom + YP HANAF235.ROM Hanafuta (Japan).rom + Y HANGO236.ROM Hang-On (Japan).rom + Y HARAP237.ROM Harapeko Pakkun (Japan).rom + Y HAUNT240.ROM Haunted Boynight (Japan).rom + Y HEAVY241.ROM Heavy Boxing (Japan).rom + Y HEIST242.ROM Heist, The (Japan).rom + Y HELIT243.ROM Helitank (Japan).rom + Y HIGHW244.ROM High Way Star (Japan).rom + Y HIGHW245.ROM High Way Star (Korea).rom + YP? HISYA246.ROM Hisya (Japan).rom + Y HITSU247.ROM Hitsuji Yai - Preety Sheep (Japan).rom + Y HOLEI248.ROM Hole in One (Japan).rom + Y? HOLEI249.ROM Hole in One Professional (Japan).rom + Y HONKB250.ROM Honkball (Japan).rom + YP HOPPE251.ROM Hopper (Europe).rom + Y? HUDSO252.ROM Hudson 3D Golf (Japan).rom + Y HUSTL253.ROM Hustle! Chumy (Japan).rom + Y HYDLI254.ROM Hydlide (Japan).rom + Y HYPER257.ROM Hyper Olympic 1 (Japan).rom + Y HYPER258.ROM Hyper Olympic 2 (Japan).rom + Y? HYPER259.ROM Hyper Rally (Japan).rom + Y HYPER260.ROM Hyper Sports 1 (Japan).rom + Y HYPER261.ROM Hyper Sports 2 (Japan).rom + N4 HYPER262.ROM Hyper Sports 3 (Japan).rom + Y ICEWO263.ROM Ice World (Japan).rom + Y IGANI264.ROM Iga Ninpouten - Small Ninja (Japan).rom + Y IGANI265.ROM Iga Ninpouten 2 - Small Ninja 2 (Japan).rom + Y INDIA266.ROM Indian no Bouken (Japan).rom + N0 IRIEG267.ROM Iriegas (Japan).rom + Y IRIEG268.ROM Iriegas - Theseus (Japan).rom + Y ISSUN269.ROM Issunhoushi No Donnamondai (Japan).rom + Y JPWIN270.ROM J.P. Winkle (Japan).rom + Y JANKA272.ROM Janka (Japan).rom + Y JETSE273.ROM Jet Set Willy (Japan).rom + Y JIGSA274.ROM Jigsaw Set (Japan).rom + Y JISSE275.ROM Jissen - 4-nin Mahjong (Japan).rom + Y JUMPJ276.ROM Jump (Japan).rom + Y JUMPC277.ROM Jump Coaster (Japan).rom + YP JUMPL278.ROM Jump Land (Japan).rom + Y JUMPI279.ROM Jumping Rabbit (Japan).rom + N0 JUNOF280.ROM Juno First (Japan).rom + Y JYANF281.ROM Jyan Friend (Japan).rom + Y JYANK282.ROM Jyankyo (Japan).rom + Y JYANY283.ROM Jyanyuu (Japan).rom + N4 KAGEN284.ROM Kage no Densetsu - Legend of Kage, The (Japan).rom + N0 KARAM285.ROM Karamaru (Japan).rom + N0 KEYST287.ROM Keystone Kapers (Japan).rom + YP KICKI288.ROM Kick It (Japan).rom + Y KINAS289.ROM Kinasai (Japan) (Unl).rom + Y KINGB290.ROM King & Balloon (Japan).rom + Y KINGS292.ROM King's Valley (Japan, Europe).rom + Y KINNI294.ROM Kinnikuman - Muscle Man (Japan).rom + YP KNIGH295.ROM Knight Lore (Japan).rom + Y KNIGH296.ROM Knightmare - Majou Densetsu (Japan).rom + Y KONAM300.ROM Konami's Baseball (Japan).rom + Y KONAM301.ROM Konami's Billiards (Europe).rom + Y KONAM302.ROM Konami's Boxing (Japan).rom + N4 KONAM303.ROM Konami's Football (Europe).rom + N4 KONAM304.ROM Konami's Golf (Japan).rom + Y? KONAM305.ROM Konami's Mahjong (Japan).rom + Y? KONAM306.ROM Konami's Ping-Pong (Japan).rom + N4 KONAM307.ROM Konami's Soccer (Japan).rom + Y KONAM308.ROM Konami's Tennis (Japan).rom + Y KONEK309.ROM Koneko no Daibouken - Catboy (Japan).rom + Y KUNGF310.ROM Kung Fu Acho (Japan).rom + Y KUNGF311.ROM Kung Fu Master (Japan).rom + Y KUNGF312.ROM Kung Fu Taigun (Japan).rom + N0 LADDE313.ROM Ladder Building (Japan).rom + YP LAPTI314.ROM Laptick 2 (Japan).rom + Y LEMAN315.ROM Le Mans 2 (Europe).rom + N8 LEONA317.ROM Leonard (Spain).rom + Y LODER319.ROM Lode Runner (Japan).rom + Y LODER320.ROM Lode Runner II (Japan).rom + N0 LORDO321.ROM Lord Over (Japan).rom + N3 LOTLO322.ROM Lot Lot (Japan).rom + Y LUNAR323.ROM Lunar Ball (Japan).rom + N7 MACAT325.ROM Mac Attack (Europe).rom + Y MACHI326.ROM Machinegun Joe vs The Mafia (Japan).rom + Y MACRO327.ROM Macross (Japan).rom + Y MAGIC328.ROM Magical Kid Wiz (Japan).rom + Y MAGIC329.ROM Magical Tree (Japan).rom + Y MANES331.ROM Manes (Japan).rom + Y MAPPY332.ROM Mappy (Japan).rom + N0 MARIN334.ROM Marine Battle (Japan).rom + YP? MARSI335.ROM Mars II (Japan).rom + Y? MASTE337.ROM Master Chess (Europe).rom + Y MEGAL338.ROM Megalopolis SOS (Japan).rom + Y? MIDNI340.ROM Midnight Brothers (Japan).rom + Y? MIDNI341.ROM Midnight Building (Japan).rom + Y? MIDWA342.ROM Midway (Japan).rom + Y? MILCA343.ROM Mil Caras (Spain).rom + Y MINIG344.ROM Mini Golf (Japan).rom + Y MOAIN347.ROM Moai no Hibou (Japan).rom + Y MOBIL348.ROM Mobile Planet Suthirus - Approach from the Westgate (Japan).rom + Y MOBIL349.ROM Mobile-Suit Gundam - Last Shooting (Japan).rom + YP MOKAR350.ROM Mokarimakka (Japan).rom + N0 MOLEJ351.ROM Mole (Japan).rom + Y? MOLEM352.ROM Mole Mole 2 (Japan).rom + YP? MONKE353.ROM Monkey Academy (Japan).rom + Y MONST354.ROM Monster's Fair (Japan).rom + N0 MOONL355.ROM Moon Landing (Japan).rom + Y MOONP356.ROM Moon Patrol (Japan).rom + Y MOONS357.ROM Moonsweeper (Japan).rom + N4 MOPIR358.ROM Mopiranger (Japan).rom + NC MORIT359.ROM Morita Kazuo no Othello (Japan).rom + YP? MOUSE360.ROM Mouser (Japan).rom + Y MRCHI361.ROM Mr. Chin (Japan).rom + Y? MRDOJ362.ROM Mr. Do (Japan).rom + Y MRDOS364.ROM Mr. Do's Wild Ride (Japan).rom + Y MRDOV363.ROM Mr. Do vs Unicorns (Japan).rom + N0 MSX21365.ROM MSX 21 (Japan).rom + Y MSXBA366.ROM MSX Baseball (Japan).rom + Y MSXBA367.ROM MSX Baseball II National (Japan).rom + N0 MSXDE368.ROM MSX Derby (Japan).rom + Y MSXRU369.ROM MSX Rugby (Japan).rom + Y MSXSO370.ROM MSX Soccer (Japan).rom + N0 NAUSI372.ROM Nausicaa (Japan).rom + Y NESSE378.ROM Nessen Koushiyen (Japan).rom + YP NIGHT379.ROM Night Shade (Japan).rom + Y NINJA380.ROM Ninja Jajamaru-kun (Japan).rom + YP NINJA381.ROM Ninja Princess (Japan).rom + Y NINJA382.ROM Ninjakun (Japan).rom + Y NINJA383.ROM Ninjakun Majou (Japan).rom + Y NINJY384.ROM Ninjya Kage (Japan).rom + Y? NYANN386.ROM Nyan Nyan Pro Wrestling (Japan).rom + Y NYORO387.ROM Nyorols (Japan).rom + Y OILSW389.ROM Oil's Well (Japan).rom + Y? OKAMI390.ROM Okami no Su (Japan).rom + Y OMACF388.ROM O'Mac Farmer (Japan).rom + Y OTHEL391.ROM Othello (Japan).rom + Y OYOID392.ROM Oyoide Tango (Japan).rom + Y PACHI394.ROM Pachi Com (Japan).rom + Y PACMA393.ROM Pac-Man (Japan).rom + Y PAIPA395.ROM Pai Panic (Japan).rom + N0 PAIRS396.ROM Pairs (Japan).rom + Y PANTH397.ROM Panther (Japan).rom + N0 PASSB399.ROM Pass Ball (Japan).rom + YP? PASTF400.ROM Pastfinder (Japan).rom + Y? PAYLO401.ROM Pay Load (Japan).rom + Y PEETA402.ROM Peetan (Japan).rom + Y PEGAS403.ROM Pegasus (Japan).rom + Y PENGU405.ROM Penguin-kun Wars (Japan).rom + YP? PICOP406.ROM Pico Pico (Japan).rom + Y PICTU407.ROM Picture Puzzle (Japan).rom + Y? PILLB408.ROM Pillbox (Japan).rom + Y? PINEA410.ROM Pine Applin (Japan).rom + YP? PINGB411.ROM Pingball Maker (Japan).rom + YP PINKY412.ROM Pinky Chase (Japan).rom + Y PIPIJ413.ROM Pipi (Japan).rom + Y PIPPO414.ROM Pippols (Japan).rom + YP PITFA415.ROM Pitfall II - Lost Caverns (Japan).rom + NP8 PITFA416.ROM Pitfall! (Japan).rom + Y PLAYB417.ROM Play Ball (Japan).rom + N4 POINY418.ROM Poiny X Senryosakusen - Operation Thanksgiving (Japan).rom + Y POLIC419.ROM Police Story, The (Japan).rom + YP POOYA420.ROM Pooyan (Japan).rom + Y POPPA421.ROM Poppaq the Fish (Japan).rom + N4 PROFE423.ROM Professional Baseball (Japan).rom + YP? PROFE424.ROM Professional Mahjong (Japan).rom + Y PROTE425.ROM Protector, The (Japan).rom + Y PUZZL427.ROM Puzzle Panic (Japan).rom + Y PYRAM428.ROM Pyramid Warp (Japan).rom + Y QBERT429.ROM Q-bert (Japan).rom + Y QUEEN430.ROM Queen's Golf (Japan).rom + Y RAIDO432.ROM Raid on Bungeling Bay (Japan).rom + Y RALLY433.ROM Rally-X (Japan).rom + YP? RAMBO434.ROM Rambo (Japan).rom + YP? REALT435.ROM Real Tennis (Japan).rom + Y REDZO436.ROM Red Zone (Japan).rom + N0 RENJU438.ROM Renju & Ojama Dogs (Japan).rom + Y RISEO439.ROM Rise Out from Dungeons (Japan).rom + N0 RIVER440.ROM River Raid (Japan).rom + Y ROADF441.ROM Road Fighter (Japan).rom + Y ROBOF443.ROM Robofrog (Japan).rom + NP8 ROCKN444.ROM Rock'n Bolt (Japan).rom + Y ROGER445.ROM Roger Rubbish (Europe).rom + Y? ROLLE446.ROM Roller Ball (Japan).rom + N0 ROTOR447.ROM Rotors (Japan).rom + YP SASAJ450.ROM Sasa (Japan).rom + Y? SAURU451.ROM Saurus Land (Japan).rom + Y SCARL452.ROM Scarlet 7 - The Mightiest Women (Japan).rom + Y SCION453.ROM Scion (Japan).rom + N0 SCOPE454.ROM Scope On - Fight in Space (Japan).rom + Y SCRAM455.ROM Scramble Eggs (Japan).rom + Y SEAHU456.ROM Sea Hunter (Europe).rom + Y SENJY458.ROM Senjyo (Japan).rom + N4 SEWER459.ROM Sewer Sam (Japan).rom + Y SHOUG460.ROM Shougi (Japan).rom + N4 SHOUG461.ROM Shougi 2 (Japan).rom + N0 SHOUG462.ROM Shougi Game (Japan).rom + Y SHOUG463.ROM Shougi Meijin (Japan).rom + Y SHOUG464.ROM Shougi Sinan 1 (Japan).rom + YP SHOUT465.ROM Shout Match (Japan).rom + YP SINBA466.ROM Sinbad (Japan).rom + YP SKOOT467.ROM Skooter (Japan).rom + Y SKYGA468.ROM Sky Galdo (Japan).rom + Y SKYJA469.ROM Sky Jaguar (Japan).rom + N8 SLAPS470.ROM Slapshot (Spain).rom + Y SNAKE471.ROM Snake It (Europe).rom + Y SOUKO473.ROM Soukoban (Japan).rom + Y SPACE474.ROM Space Camp (Japan).rom + Y SPACE475.ROM Space Invaders (Japan).rom + Y SPACE476.ROM Space Maze Attack (Japan).rom + Y SPACE477.ROM Space Trouble (Japan).rom + Y SPACE478.ROM Space Walk (Europe).rom + N0 SPARK479.ROM Sparkie (Japan).rom + Y SPELU480.ROM Spelunker (Japan).rom + N8 SPIDE481.ROM Spider, The (Japan).rom + Y SQUAR483.ROM Square Dancer (Japan).rom + Y SQUIS484.ROM Squish'em (Japan).rom + Y STARB485.ROM Star Blazer (Japan).rom + N0 STARC486.ROM Star Command (Japan).rom + Y STARF487.ROM Star Force (Japan).rom + Y STARS488.ROM Star Soldier (Japan).rom + Y? START489.ROM Star Trap (Japan).rom + Y? STARS490.ROM Starship Simulator (Japan).rom + Y STEPU491.ROM Step Up (Japan).rom + N8 STEPP492.ROM Stepper (Japan).rom + Y STONE493.ROM Stone of Wisdom, The (Japan).rom + N4 STRAN494.ROM Strange Loop (Japan).rom + Y SUPAR495.ROM Suparobo (Japan).rom + N0 SUPER496.ROM Super Billiards (Japan).rom + YP? SUPER499.ROM Super Boy I (Korea) (Unl).rom + YP? SUPER500.ROM Super Boy II (Korea) (Unl).rom + YP SUPER501.ROM Super Bubble Bobble (Korea) (Unl).rom + NP4 SUPER502.ROM Super Cobra (Japan).rom + YP SUPER503.ROM Super Columns (Japan).rom + YP SUPER504.ROM Super Cross Force (Europe).rom + Y SUPER505.ROM Super Drinker (Japan).rom + YP SUPER506.ROM Super Golf (Japan).rom + NP8 SUPER508.ROM Super Pachinko (Japan).rom + Y SUPER510.ROM Super Snake (Japan).rom + Y SUPER511.ROM Super Soccer (Japan).rom + Y SUPER512.ROM Super Tennis (Japan).rom + NP4 SUPER513.ROM Super Tripper (Spain).rom + YP SWEET514.ROM Sweet Acorn (Japan).rom + N4 SWING515.ROM Swing (Japan).rom + Y TANKB517.ROM Tank Battalion (Japan).rom + Y TATIC518.ROM Tatica (Japan).rom + Y TAWAR519.ROM Tawara-kun (Japan).rom + Y TEARO520.ROM Tear of Nile (Japan).rom + NP8 TELEB521.ROM Telebunnie (Japan).rom + Y TENSA522.ROM Tensai Rabbian Daifunsen (Japan).rom + Y? TENSI523.ROM Tensidachino Gogo (Japan).rom + YP TENSI524.ROM Tension (Spain).rom + NP8 TETRA525.ROM Tetra Horror (Japan).rom + Y TETRI526.ROM Tetris (Korea) (Unl).rom + NP8 TETSU527.ROM Tetsuman (Japan).rom + Y THEXD528.ROM Thexder (Japan).rom + Y? THUND529.ROM Thunder Ball (Japan).rom + N6 THUND530.ROM Thunderbolt (Japan).rom + YP TIMEP531.ROM Time Pilot (Japan).rom + YP TOPPL534.ROM Topple Zip (Japan).rom + Y TOPRO533.ROM Top Roller! (Japan).rom + Y TRACK535.ROM Track & Field 1 (Europe).rom + Y TRACK536.ROM Track & Field 2 (Europe).rom + Y TRAFF537.ROM Traffic (Japan).rom + N0 TRIAL538.ROM Trial Ski (Japan).rom + Y TRICK539.ROM Trick Boy (Japan).rom + YP TRITO540.ROM Tritorn (Japan).rom + N0 TRUMP541.ROM Trumpaid (Japan).rom + N8 TURBO543.ROM Turboat (Japan).rom + Y TWINB544.ROM Twin Bee (Japan).rom + YP TWINH545.ROM Twin Hammer (Europe).rom + Y TZRGR546.ROM TZR - Grand Prix Rider (Japan).rom + Y ULTRA547.ROM Ultraman (Japan).rom + YP? VENUS549.ROM Venus Fire (Japan).rom + NP4 VIDEO550.ROM Video Hustler (Japan).rom + Y VOLGU551.ROM Volguard (Japan).rom + Y WARPW552.ROM Warp & Warp (Japan).rom + YP WARRO553.ROM Warroid (Japan).rom + Y? WATER554.ROM Water Driver (Japan).rom + Y WONDE556.ROM Wonder Boy (Japan).rom + NP4 WRANG557.ROM Wrangler (Spain).rom + NP4 WRECK558.ROM Wreck, The (Europe).rom + YP XYXOL559.ROM Xyxolog (Japan).rom + N8 YABYU560.ROM Yab Yum (Netherlands).rom + Y YELLO561.ROM Yellow Submarine (Japan).rom + Y YIEAR562.ROM Yie Ar Kung-Fu (Japan).rom + N4 YIEAR563.ROM Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan).rom + YP YOKAI564.ROM Yokai Tanken Chimachima (Japan).rom + Y ZAIDE566.ROM Zaider - Battle of Peguss (Japan).rom + Y ZANAC567.ROM Zanac (Japan) (v2).rom + Y ZANAC568.ROM Zanac (Japan).rom + Y ZAXXO569.ROM Zaxxon (Japan).rom + N0 ZENJI570.ROM Zenji (Japan).rom + Y ZEXAS571.ROM Zexas Limited (Japan).rom + Y ZOOM9572.ROM Zoom 909 (Japan).rom +================= TESTED ALL ABOVE ================= diff --git a/Source/Images/d_msxroms2/ReadMe.txt b/Source/Images/d_msxroms2/ReadMe.txt new file mode 100644 index 00000000..be48416a --- /dev/null +++ b/Source/Images/d_msxroms2/ReadMe.txt @@ -0,0 +1,19 @@ +===== MSX ROMs Disk for RomWBW ===== + +This is disk 2 of 2 of the collection of MSX ROMs as provided by Les +Bird (ROM filenames L-Z). These ROMs are "run" by using the +appropriate variant of Les' MSX8 ROM loader. You can download the +loader binaries from https://github.com/lesbird/MSX8. You will need +appropriate hardware to run the loader. + +Please review the file ROMLIST.TXT for information on the current +operational status of the ROM and it's long file name/description. + +This disk (RomWBW slice) is not automatically included with the +RomWBW "combo" disk images. You can simply add it to a combo +image by appending it to the end. After booting your system, +you can use the ASSIGN command to map the slice to a drive letter. +Refer to the RomWBW User Guide for more information on this +process. + +-- WBW 11:15 AM 8/21/2024 diff --git a/Source/Images/d_msxroms2/u0/LADDE313.ROM b/Source/Images/d_msxroms2/u0/LADDE313.ROM new file mode 100644 index 00000000..019fe244 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LADDE313.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LAPTI314.ROM b/Source/Images/d_msxroms2/u0/LAPTI314.ROM new file mode 100644 index 00000000..9f8cb850 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LAPTI314.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LEMAN315.ROM b/Source/Images/d_msxroms2/u0/LEMAN315.ROM new file mode 100644 index 00000000..e56f0232 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LEMAN315.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LEONA317.ROM b/Source/Images/d_msxroms2/u0/LEONA317.ROM new file mode 100644 index 00000000..2c32d4d2 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LEONA317.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LODER319.ROM b/Source/Images/d_msxroms2/u0/LODER319.ROM new file mode 100644 index 00000000..088e5890 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LODER319.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LODER320.ROM b/Source/Images/d_msxroms2/u0/LODER320.ROM new file mode 100644 index 00000000..ed6bfb99 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LODER320.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LORDO321.ROM b/Source/Images/d_msxroms2/u0/LORDO321.ROM new file mode 100644 index 00000000..add678c5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LORDO321.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LOTLO322.ROM b/Source/Images/d_msxroms2/u0/LOTLO322.ROM new file mode 100644 index 00000000..8e261c7a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LOTLO322.ROM differ diff --git a/Source/Images/d_msxroms2/u0/LUNAR323.ROM b/Source/Images/d_msxroms2/u0/LUNAR323.ROM new file mode 100644 index 00000000..e521957e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/LUNAR323.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MACAT325.ROM b/Source/Images/d_msxroms2/u0/MACAT325.ROM new file mode 100644 index 00000000..e27a9947 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MACAT325.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MACHI326.ROM b/Source/Images/d_msxroms2/u0/MACHI326.ROM new file mode 100644 index 00000000..0da315b1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MACHI326.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MACRO327.ROM b/Source/Images/d_msxroms2/u0/MACRO327.ROM new file mode 100644 index 00000000..c4e0fbc6 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MACRO327.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MAGIC328.ROM b/Source/Images/d_msxroms2/u0/MAGIC328.ROM new file mode 100644 index 00000000..a61f859f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MAGIC328.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MAGIC329.ROM b/Source/Images/d_msxroms2/u0/MAGIC329.ROM new file mode 100644 index 00000000..dca241dd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MAGIC329.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MANES331.ROM b/Source/Images/d_msxroms2/u0/MANES331.ROM new file mode 100644 index 00000000..86473760 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MANES331.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MAPPY332.ROM b/Source/Images/d_msxroms2/u0/MAPPY332.ROM new file mode 100644 index 00000000..54e5a534 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MAPPY332.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MARIN334.ROM b/Source/Images/d_msxroms2/u0/MARIN334.ROM new file mode 100644 index 00000000..d7ae4d8f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MARIN334.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MARSI335.ROM b/Source/Images/d_msxroms2/u0/MARSI335.ROM new file mode 100644 index 00000000..7bd22b4d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MARSI335.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MASTE337.ROM b/Source/Images/d_msxroms2/u0/MASTE337.ROM new file mode 100644 index 00000000..6b96a20e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MASTE337.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MEGAL338.ROM b/Source/Images/d_msxroms2/u0/MEGAL338.ROM new file mode 100644 index 00000000..ebaf3722 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MEGAL338.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MIDNI340.ROM b/Source/Images/d_msxroms2/u0/MIDNI340.ROM new file mode 100644 index 00000000..be632be2 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MIDNI340.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MIDNI341.ROM b/Source/Images/d_msxroms2/u0/MIDNI341.ROM new file mode 100644 index 00000000..3277ff47 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MIDNI341.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MIDWA342.ROM b/Source/Images/d_msxroms2/u0/MIDWA342.ROM new file mode 100644 index 00000000..27d03ff7 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MIDWA342.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MILCA343.ROM b/Source/Images/d_msxroms2/u0/MILCA343.ROM new file mode 100644 index 00000000..1321fcee Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MILCA343.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MINIG344.ROM b/Source/Images/d_msxroms2/u0/MINIG344.ROM new file mode 100644 index 00000000..32392100 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MINIG344.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOAIN347.ROM b/Source/Images/d_msxroms2/u0/MOAIN347.ROM new file mode 100644 index 00000000..bc7d025b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOAIN347.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOBIL348.ROM b/Source/Images/d_msxroms2/u0/MOBIL348.ROM new file mode 100644 index 00000000..42269f88 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOBIL348.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOBIL349.ROM b/Source/Images/d_msxroms2/u0/MOBIL349.ROM new file mode 100644 index 00000000..c41f576e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOBIL349.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOKAR350.ROM b/Source/Images/d_msxroms2/u0/MOKAR350.ROM new file mode 100644 index 00000000..0cd06bc8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOKAR350.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOLEJ351.ROM b/Source/Images/d_msxroms2/u0/MOLEJ351.ROM new file mode 100644 index 00000000..4886b77f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOLEJ351.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOLEM352.ROM b/Source/Images/d_msxroms2/u0/MOLEM352.ROM new file mode 100644 index 00000000..cd8e90e6 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOLEM352.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MONKE353.ROM b/Source/Images/d_msxroms2/u0/MONKE353.ROM new file mode 100644 index 00000000..c8d7fcde Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MONKE353.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MONST354.ROM b/Source/Images/d_msxroms2/u0/MONST354.ROM new file mode 100644 index 00000000..276ec111 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MONST354.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOONL355.ROM b/Source/Images/d_msxroms2/u0/MOONL355.ROM new file mode 100644 index 00000000..9bbc115d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOONL355.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOONP356.ROM b/Source/Images/d_msxroms2/u0/MOONP356.ROM new file mode 100644 index 00000000..0fe7c6bd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOONP356.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOONS357.ROM b/Source/Images/d_msxroms2/u0/MOONS357.ROM new file mode 100644 index 00000000..ee915fef Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOONS357.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOPIR358.ROM b/Source/Images/d_msxroms2/u0/MOPIR358.ROM new file mode 100644 index 00000000..b1b8689d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOPIR358.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MORIT359.ROM b/Source/Images/d_msxroms2/u0/MORIT359.ROM new file mode 100644 index 00000000..a2812b15 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MORIT359.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MOUSE360.ROM b/Source/Images/d_msxroms2/u0/MOUSE360.ROM new file mode 100644 index 00000000..0473f3a7 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MOUSE360.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MRCHI361.ROM b/Source/Images/d_msxroms2/u0/MRCHI361.ROM new file mode 100644 index 00000000..2aa460ef Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MRCHI361.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MRDOJ362.ROM b/Source/Images/d_msxroms2/u0/MRDOJ362.ROM new file mode 100644 index 00000000..5ff956d1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MRDOJ362.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MRDOS364.ROM b/Source/Images/d_msxroms2/u0/MRDOS364.ROM new file mode 100644 index 00000000..5324d02f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MRDOS364.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MRDOV363.ROM b/Source/Images/d_msxroms2/u0/MRDOV363.ROM new file mode 100644 index 00000000..507fa77a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MRDOV363.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSX21365.ROM b/Source/Images/d_msxroms2/u0/MSX21365.ROM new file mode 100644 index 00000000..7c5e302f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSX21365.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSXBA366.ROM b/Source/Images/d_msxroms2/u0/MSXBA366.ROM new file mode 100644 index 00000000..82119452 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSXBA366.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSXBA367.ROM b/Source/Images/d_msxroms2/u0/MSXBA367.ROM new file mode 100644 index 00000000..cf40aade Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSXBA367.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSXDE368.ROM b/Source/Images/d_msxroms2/u0/MSXDE368.ROM new file mode 100644 index 00000000..8e44634f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSXDE368.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSXRU369.ROM b/Source/Images/d_msxroms2/u0/MSXRU369.ROM new file mode 100644 index 00000000..7f21d2d8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSXRU369.ROM differ diff --git a/Source/Images/d_msxroms2/u0/MSXSO370.ROM b/Source/Images/d_msxroms2/u0/MSXSO370.ROM new file mode 100644 index 00000000..0c7f91d0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/MSXSO370.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NAUSI372.ROM b/Source/Images/d_msxroms2/u0/NAUSI372.ROM new file mode 100644 index 00000000..1c5d0307 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NAUSI372.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NESSE378.ROM b/Source/Images/d_msxroms2/u0/NESSE378.ROM new file mode 100644 index 00000000..40221e3f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NESSE378.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NIGHT379.ROM b/Source/Images/d_msxroms2/u0/NIGHT379.ROM new file mode 100644 index 00000000..bb262e67 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NIGHT379.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NINJA380.ROM b/Source/Images/d_msxroms2/u0/NINJA380.ROM new file mode 100644 index 00000000..fe091240 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NINJA380.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NINJA381.ROM b/Source/Images/d_msxroms2/u0/NINJA381.ROM new file mode 100644 index 00000000..cd31d98a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NINJA381.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NINJA382.ROM b/Source/Images/d_msxroms2/u0/NINJA382.ROM new file mode 100644 index 00000000..56226573 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NINJA382.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NINJA383.ROM b/Source/Images/d_msxroms2/u0/NINJA383.ROM new file mode 100644 index 00000000..fa1736b0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NINJA383.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NINJY384.ROM b/Source/Images/d_msxroms2/u0/NINJY384.ROM new file mode 100644 index 00000000..4eb5c900 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NINJY384.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NYANN386.ROM b/Source/Images/d_msxroms2/u0/NYANN386.ROM new file mode 100644 index 00000000..8b4ad855 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NYANN386.ROM differ diff --git a/Source/Images/d_msxroms2/u0/NYORO387.ROM b/Source/Images/d_msxroms2/u0/NYORO387.ROM new file mode 100644 index 00000000..942a58af Binary files /dev/null and b/Source/Images/d_msxroms2/u0/NYORO387.ROM differ diff --git a/Source/Images/d_msxroms2/u0/OILSW389.ROM b/Source/Images/d_msxroms2/u0/OILSW389.ROM new file mode 100644 index 00000000..6c86e1b1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/OILSW389.ROM differ diff --git a/Source/Images/d_msxroms2/u0/OKAMI390.ROM b/Source/Images/d_msxroms2/u0/OKAMI390.ROM new file mode 100644 index 00000000..c4c9b8d8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/OKAMI390.ROM differ diff --git a/Source/Images/d_msxroms2/u0/OMACF388.ROM b/Source/Images/d_msxroms2/u0/OMACF388.ROM new file mode 100644 index 00000000..21511fc9 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/OMACF388.ROM differ diff --git a/Source/Images/d_msxroms2/u0/OTHEL391.ROM b/Source/Images/d_msxroms2/u0/OTHEL391.ROM new file mode 100644 index 00000000..ae1c2835 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/OTHEL391.ROM differ diff --git a/Source/Images/d_msxroms2/u0/OYOID392.ROM b/Source/Images/d_msxroms2/u0/OYOID392.ROM new file mode 100644 index 00000000..a1ad7ef8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/OYOID392.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PACHI394.ROM b/Source/Images/d_msxroms2/u0/PACHI394.ROM new file mode 100644 index 00000000..954f92f6 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PACHI394.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PACMA393.ROM b/Source/Images/d_msxroms2/u0/PACMA393.ROM new file mode 100644 index 00000000..effbf640 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PACMA393.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PAIPA395.ROM b/Source/Images/d_msxroms2/u0/PAIPA395.ROM new file mode 100644 index 00000000..8f503771 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PAIPA395.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PAIRS396.ROM b/Source/Images/d_msxroms2/u0/PAIRS396.ROM new file mode 100644 index 00000000..fb370703 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PAIRS396.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PANTH397.ROM b/Source/Images/d_msxroms2/u0/PANTH397.ROM new file mode 100644 index 00000000..f80515ff Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PANTH397.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PASSB399.ROM b/Source/Images/d_msxroms2/u0/PASSB399.ROM new file mode 100644 index 00000000..31fb6ad0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PASSB399.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PASTF400.ROM b/Source/Images/d_msxroms2/u0/PASTF400.ROM new file mode 100644 index 00000000..dc571dc8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PASTF400.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PAYLO401.ROM b/Source/Images/d_msxroms2/u0/PAYLO401.ROM new file mode 100644 index 00000000..23056884 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PAYLO401.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PEETA402.ROM b/Source/Images/d_msxroms2/u0/PEETA402.ROM new file mode 100644 index 00000000..ddee8bff Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PEETA402.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PEGAS403.ROM b/Source/Images/d_msxroms2/u0/PEGAS403.ROM new file mode 100644 index 00000000..6a44eae3 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PEGAS403.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PENGU405.ROM b/Source/Images/d_msxroms2/u0/PENGU405.ROM new file mode 100644 index 00000000..818aa4f3 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PENGU405.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PICOP406.ROM b/Source/Images/d_msxroms2/u0/PICOP406.ROM new file mode 100644 index 00000000..c6243153 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PICOP406.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PICTU407.ROM b/Source/Images/d_msxroms2/u0/PICTU407.ROM new file mode 100644 index 00000000..be5fc67d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PICTU407.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PILLB408.ROM b/Source/Images/d_msxroms2/u0/PILLB408.ROM new file mode 100644 index 00000000..57d1c6bd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PILLB408.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PINEA410.ROM b/Source/Images/d_msxroms2/u0/PINEA410.ROM new file mode 100644 index 00000000..414be4dc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PINEA410.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PINGB411.ROM b/Source/Images/d_msxroms2/u0/PINGB411.ROM new file mode 100644 index 00000000..3df3da4b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PINGB411.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PINKY412.ROM b/Source/Images/d_msxroms2/u0/PINKY412.ROM new file mode 100644 index 00000000..2c9e4076 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PINKY412.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PIPIJ413.ROM b/Source/Images/d_msxroms2/u0/PIPIJ413.ROM new file mode 100644 index 00000000..4427521c Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PIPIJ413.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PIPPO414.ROM b/Source/Images/d_msxroms2/u0/PIPPO414.ROM new file mode 100644 index 00000000..4ef9d3f4 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PIPPO414.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PITFA415.ROM b/Source/Images/d_msxroms2/u0/PITFA415.ROM new file mode 100644 index 00000000..cb50ccfc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PITFA415.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PITFA416.ROM b/Source/Images/d_msxroms2/u0/PITFA416.ROM new file mode 100644 index 00000000..1a867a7d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PITFA416.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PLAYB417.ROM b/Source/Images/d_msxroms2/u0/PLAYB417.ROM new file mode 100644 index 00000000..84b9646d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PLAYB417.ROM differ diff --git a/Source/Images/d_msxroms2/u0/POINY418.ROM b/Source/Images/d_msxroms2/u0/POINY418.ROM new file mode 100644 index 00000000..1507ec77 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/POINY418.ROM differ diff --git a/Source/Images/d_msxroms2/u0/POLIC419.ROM b/Source/Images/d_msxroms2/u0/POLIC419.ROM new file mode 100644 index 00000000..4c1577cf Binary files /dev/null and b/Source/Images/d_msxroms2/u0/POLIC419.ROM differ diff --git a/Source/Images/d_msxroms2/u0/POOYA420.ROM b/Source/Images/d_msxroms2/u0/POOYA420.ROM new file mode 100644 index 00000000..7583d86f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/POOYA420.ROM differ diff --git a/Source/Images/d_msxroms2/u0/POPPA421.ROM b/Source/Images/d_msxroms2/u0/POPPA421.ROM new file mode 100644 index 00000000..028d7cd7 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/POPPA421.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PROFE423.ROM b/Source/Images/d_msxroms2/u0/PROFE423.ROM new file mode 100644 index 00000000..727ace2e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PROFE423.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PROFE424.ROM b/Source/Images/d_msxroms2/u0/PROFE424.ROM new file mode 100644 index 00000000..4c5de4b9 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PROFE424.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PROTE425.ROM b/Source/Images/d_msxroms2/u0/PROTE425.ROM new file mode 100644 index 00000000..3b3a15cc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PROTE425.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PUZZL427.ROM b/Source/Images/d_msxroms2/u0/PUZZL427.ROM new file mode 100644 index 00000000..750db47e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PUZZL427.ROM differ diff --git a/Source/Images/d_msxroms2/u0/PYRAM428.ROM b/Source/Images/d_msxroms2/u0/PYRAM428.ROM new file mode 100644 index 00000000..dcc28930 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/PYRAM428.ROM differ diff --git a/Source/Images/d_msxroms2/u0/QBERT429.ROM b/Source/Images/d_msxroms2/u0/QBERT429.ROM new file mode 100644 index 00000000..dc5ae0f9 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/QBERT429.ROM differ diff --git a/Source/Images/d_msxroms2/u0/QUEEN430.ROM b/Source/Images/d_msxroms2/u0/QUEEN430.ROM new file mode 100644 index 00000000..6b704611 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/QUEEN430.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RAIDO432.ROM b/Source/Images/d_msxroms2/u0/RAIDO432.ROM new file mode 100644 index 00000000..bc7b4bb1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RAIDO432.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RALLY433.ROM b/Source/Images/d_msxroms2/u0/RALLY433.ROM new file mode 100644 index 00000000..7feac636 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RALLY433.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RAMBO434.ROM b/Source/Images/d_msxroms2/u0/RAMBO434.ROM new file mode 100644 index 00000000..c30e35cf Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RAMBO434.ROM differ diff --git a/Source/Images/d_msxroms2/u0/REALT435.ROM b/Source/Images/d_msxroms2/u0/REALT435.ROM new file mode 100644 index 00000000..e7793ee1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/REALT435.ROM differ diff --git a/Source/Images/d_msxroms2/u0/REDZO436.ROM b/Source/Images/d_msxroms2/u0/REDZO436.ROM new file mode 100644 index 00000000..fe07529b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/REDZO436.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RENJU438.ROM b/Source/Images/d_msxroms2/u0/RENJU438.ROM new file mode 100644 index 00000000..99f58d4a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RENJU438.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RISEO439.ROM b/Source/Images/d_msxroms2/u0/RISEO439.ROM new file mode 100644 index 00000000..a9358238 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RISEO439.ROM differ diff --git a/Source/Images/d_msxroms2/u0/RIVER440.ROM b/Source/Images/d_msxroms2/u0/RIVER440.ROM new file mode 100644 index 00000000..4aecab8e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/RIVER440.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROADF441.ROM b/Source/Images/d_msxroms2/u0/ROADF441.ROM new file mode 100644 index 00000000..af30c3a1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROADF441.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROBOF443.ROM b/Source/Images/d_msxroms2/u0/ROBOF443.ROM new file mode 100644 index 00000000..fa280613 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROBOF443.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROCKN444.ROM b/Source/Images/d_msxroms2/u0/ROCKN444.ROM new file mode 100644 index 00000000..48ea0181 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROCKN444.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROGER445.ROM b/Source/Images/d_msxroms2/u0/ROGER445.ROM new file mode 100644 index 00000000..3873d35f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROGER445.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROLLE446.ROM b/Source/Images/d_msxroms2/u0/ROLLE446.ROM new file mode 100644 index 00000000..70e84e2a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROLLE446.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ROMLIST.TXT b/Source/Images/d_msxroms2/u0/ROMLIST.TXT new file mode 100644 index 00000000..9bbaed80 --- /dev/null +++ b/Source/Images/d_msxroms2/u0/ROMLIST.TXT @@ -0,0 +1,495 @@ +379 LOADING GAMES OUT OF 481 ROMS + +Some require keyboard support and/or 2 joystick buttons. They are marked with a '?' in the list below +Some require the patcher (MSX8P.COM). They are marked with a 'P' in the list below +Some don't work at all. They are marked with a 'N' in the list below + +Y = (271) WORKS +YP= ( 55) USE MSX8P (PATCHER VERSION NEEDED DUE TO DIRECT VDP/PSG WRITES INSTEAD OF GOING THROUGH THE BIOS) +? = ( 53) RUNS BUT NOT PLAYABLE - POSSIBLY REQUIRES TWO BUTTON JOYSTICK OR UNSUPPORTED KEYBOARD CONTROLS +N = DOES NOT WORK + +STAT SHORT NAME LONG NAME (481 ROMS) +==== ============ ============================================ + Y 10YAR000.ROM 10-Yard Fight (Japan).rom + N0 3DGOL002.ROM 3-D Golf Simulation (Japan) (High Speed).rom + N0 3DGOL003.ROM 3-D Golf Simulation (Japan).rom + N0 3DTEN004.ROM 3D Tennis (Japan).rom + Y ACTMA007.ROM Actman (Japan).rom + Y ADVEN008.ROM Adven' Chuta! (Japan).rom + Y AEJAP005.ROM A.E. (Japan).rom + Y? ALBAT009.ROM Albatros (Japan).rom + NP8 ALCAZ010.ROM Alcazar - The Forgotten Fortress (Japan).rom + YP ALIBA011.ROM Alibaba and 40 Thieves (Japan).rom + YP ALIEN012.ROM Alien 8 (Japan).rom + YP? ALPHA014.ROM Alpha Roid (Japan).rom + YP ALPHA015.ROM Alpha Squadron (Japan).rom + Y AMERI016.ROM American Truck (Japan).rom + YP ANAZA017.ROM Anaza - Kaleidoscope Special (Japan).rom + Y? ANGEL018.ROM Angelo (Japan).rom + Y ANTAR020.ROM Antarctic Adventure (Europe).rom + YP ANTAR021.ROM Antarctic Adventure (Japan).rom + YP ANTYJ022.ROM Anty (Japan).rom + Y AQUAP023.ROM Aqua Polis SOS (Japan).rom + N4 AQUAT024.ROM Aquattack (Japan).rom + Y ARAMO025.ROM Aramo (Japan).rom + YP ARKAN026.ROM Arkanoid (Japan).rom + Y ATHLE027.ROM Athletic Ball (Japan).rom + N ATHLE028.ROM Athletic Land (Japan) (Beta).rom + YP ATHLE029.ROM Athletic Land (Japan).rom + Y ATTAC030.ROM Attack Four Volley Ball (Japan).rom + N4 BACKG032.ROM Back Gammon (Japan).rom + Y BACKG034.ROM Backgammon (Europe).rom + Y BACKT033.ROM Back to the Future (Japan).rom + YP BALAN035.ROM Balance (Japan).rom + Y BANAN036.ROM Banana (Japan).rom + Y BANKP037.ROM Bank Panic (Japan).rom + N5 BASIC038.ROM Basic Lessons 1 (Japan).rom + N BASIC039.ROM Basic Lessons 2 (Japan).rom + N4 BATTE041.ROM Batten Tanuki no Daibouken (Japan) (v1.03).rom + Y BATTL042.ROM Battle Cross (Japan).rom + Y BATTL043.ROM Battleship Clapton II (Japan).rom + Y BCSQU031.ROM B.C.'s Quest (Japan).rom + Y BEACH044.ROM Beach-Head (Europe).rom + N0 BEAMR045.ROM Beam Rider (Japan).rom + Y BECKY046.ROM Becky (Japan).rom + Y BEEFL047.ROM Bee & Flower (Japan).rom + Y BIFAM048.ROM Bifamu (Japan).rom + Y BINAR049.ROM Binary Land (Japan).rom + Y BLACK051.ROM Black Onyx, The (Japan).rom + Y? BLAGG052.ROM Blagger MSX (Europe) (Converted From Tape).rom + YP BLOCK053.ROM Block Hole (Korea) (Unl).rom + Y BLOCK054.ROM Blockade Runner (Japan).rom + Y BOGGY055.ROM Boggy '84 (Japan).rom + Y BOING056.ROM Boing Boing (Spain).rom + N8 BOKOS057.ROM Bokosuka Wars (Japan).rom + Y BOMBE059.ROM Bomber Man (Japan).rom + Y BOMBE060.ROM Bomber Man Special (Japan).rom + Y BOOGI061.ROM Boogie Woogi Jungle (Japan).rom + Y? BOOME062.ROM Boomerang (Japan).rom + Y BOSCO064.ROM Bosconian (Japan).rom + Y BOUKE065.ROM Bouken Roman - Dota (Japan).rom + Y BOULD066.ROM Boulder Dash (Japan).rom + Y BOUNC067.ROM Bouncing Block (Spain).rom + N0 BRAIN068.ROM Brain, The (Japan).rom + N0 BREAK070.ROM Break Out (Japan).rom + Y BROTH071.ROM Brother Adventure (Korea) (Unl).rom + Y BRUCE072.ROM Bruce Lee (Japan).rom + YP BUBBL073.ROM Bubble Bobble (Korea) (Unl).rom + N0 BURGE074.ROM Burgertime (Japan).rom + Y BURUT075.ROM Buru To Marty Kikiippatsu - Inspecteur Z (Japan).rom + Y BUTAM076.ROM Butam Pants (Japan).rom + Y CABBA078.ROM Cabbage Patch Kids (Japan).rom + YP? CANDO079.ROM Candoo Ninja (Japan).rom + Y CANNO080.ROM Cannon Ball (Japan).rom + Y CANNO081.ROM Cannon Fighter (Japan).rom + Y CAPTA082.ROM Captain Chef (Japan).rom + Y CARFI083.ROM Car Fighter (Japan).rom + YP CARJA084.ROM Car Jamboree (Japan).rom + Y CARRA085.ROM Car-Race (Japan).rom + Y CASIO086.ROM Casio Daishogai Keiba (Japan).rom + Y CASIO087.ROM Casio Pachinko-U.F.O. (Japan).rom + Y CASIO088.ROM Casio Ski Command (Japan).rom + Y CASIO089.ROM Casio Worldopen (Japan).rom + Y CASTL090.ROM Castle Excellent (Japan).rom + Y CASTL091.ROM Castle, The (Japan).rom + Y CHACK092.ROM Chack'n Pop (Japan).rom + Y CHALL093.ROM Challenge Derby (Japan).rom + Y CHAMP094.ROM Champion Boxing (Japan).rom + Y? CHAMP095.ROM Champion Ice Hockey (Japan).rom + Y CHAMP096.ROM Champion Kendou (Japan).rom + Y CHAMP097.ROM Champion Pro Wrestling (Japan).rom + Y CHAMP098.ROM Champion Soccer (Japan).rom + Y CHAMP099.ROM Championship Lode Runner (Japan).rom + Y? CHECK100.ROM Checkers in Tantan Tanuki (Japan).rom + NP4 CHESS101.ROM Chess (Japan).rom + NP4 CHESS102.ROM Chess Game, The (Europe).rom + Y CHOPL103.ROM Choplifter (Japan).rom + YP CHORO104.ROM Choro Q (Japan).rom + N4 CHUGA105.ROM Chugaku Hisshu Eibunpo 1 (Japan).rom + Y CIRCU106.ROM Circus Charlie (Japan).rom + Y CITYC107.ROM City Connection (Japan).rom + YP COAST108.ROM Coaster Race (Japan).rom + Y COLOR109.ROM Color Ball (Japan).rom + N0 COLUM110.ROM Columns (Japan).rom + Y COMEC112.ROM Comecocos (Spain).rom + YP COMEO111.ROM Come On! Picot (Japan).rom + N0 COMET113.ROM Comet Tail (Japan).rom + Y COMIC114.ROM Comic Bakery (Japan).rom + YP COMPU115.ROM Computer Billiards (Japan).rom + NP4 COMPU116.ROM Computer Nyuumon - Computer Lessons (Japan).rom + NP5 COMPU117.ROM Computer Othello (Japan).rom + YP COMPU118.ROM Computer Pachinko (Japan).rom + Y CONDO119.ROM Con-Dori (Japan).rom + N8 COSMO121.ROM Cosmo (Japan).rom + Y COSMO122.ROM Cosmo-Explorer (Japan).rom + N0 COURA123.ROM Courageous Perseus (Japan).rom + N0 CRAZY125.ROM Crazy Bullet (Japan).rom + Y CRAZY126.ROM Crazy Cars (Europe).rom + N0 CRAZY127.ROM Crazy Train (Japan).rom + Y CRUSA129.ROM Crusader (Japan).rom + N4 CSOJA077.ROM C-So! (Japan).rom + N4 DAIDA131.ROM Daidasso (Japan).rom + Y DAMBU133.ROM Dam Busters, The (Japan).rom + N0 DANGE134.ROM Danger X4 (Japan).rom + Y DAVID135.ROM David II (Japan).rom + Y DDAYJ130.ROM D-Day (Japan).rom + N0 DECAT137.ROM Decathlon (Japan).rom + N0 DEMON140.ROM Demon Crystal, The (Japan).rom + Y DEVIL142.ROM Devil's Heaven (Japan).rom + Y DIGDU143.ROM Dig Dug (Japan).rom + YP DIPDI145.ROM Dip Dip (Spain).rom + Y DOKID146.ROM Doki Doki Penguin Land (Japan).rom + Y DOORD147.ROM Doordoor (Japan).rom + N4 DOROD148.ROM Dorodon (Japan).rom + YP DOUBL149.ROM Double Dragon (Korea) (Unl).rom + Y? DRCOP150.ROM Dr. Copy (Japan).rom + Y DRAGO151.ROM Dragon Attack (Japan).rom + Y DRAGO154.ROM Dragon Slayer (Japan).rom + YP DRAIN158.ROM Drainer (Japan).rom + Y DRUAG159.ROM Druaga no Tou (Japan).rom + Y? DUNGE161.ROM Dungeon Master (Japan).rom + Y DUNKS162.ROM Dunk Shot (Japan).rom + NF EAGLE164.ROM Eagle Fighter (Japan).rom + N4 EGGER165.ROM Eggerland Mystery (Japan).rom + Y ELEVA166.ROM Elevator Action (Japan).rom + Y? ERIKA167.ROM Erika (Japan).rom + Y EXAIN168.ROM Exa Innova (Japan).rom + N0 EXCHA169.ROM Exchanger (Japan).rom + Y EXERI170.ROM Exerion (Japan).rom + Y EXERI171.ROM Exerion II - Zorni (Japan).rom + YP EXOID172.ROM Exoide-Z (Japan).rom + Y EXOID173.ROM Exoide-Z Area 5 (Japan).rom + N8 F16FI175.ROM F16 Fighting Falcon (Japan).rom + Y FAIRY177.ROM Fairy (Japan).rom + YP FATET176.ROM Fa Tetris (Korea) (Unl).rom + Y FATHO183.ROM Fathom (Japan).rom + Y FINAL184.ROM Final Justice (Japan).rom + Y FINAL185.ROM Final Mahjong (Japan).rom + Y FIRER187.ROM Fire Rescue (Japan).rom + Y FLAPP188.ROM Flappy (Japan).rom + Y FLAPP189.ROM Flappy - Limited 85 (Japan).rom + YP? FLASH190.ROM Flash Point (Korea) (Unl).rom + Y FLASH191.ROM Flash Splash (Japan).rom + Y FLICK192.ROM Flicky (Japan).rom + Y FLICS193.ROM Flics, Les (France).rom + Y FLIPP196.ROM Flipper Slipper (Japan).rom + Y FORMA197.ROM Formation Z (Japan).rom + YP FROGG198.ROM Frogger (Japan).rom + Y FRONT199.ROM Front Line (Japan).rom + Y FRUIT200.ROM Fruit Search (Japan).rom + Y FUNKY201.ROM Funky Mouse (Japan).rom + N8 FUTBO202.ROM Futbol (Spain).rom + Y FUUNT203.ROM Fuun Takeshijyou (Japan).rom + Y GALAG204.ROM Galaga (Japan).rom + Y GALAX205.ROM Galaxian (Japan).rom + N0 GAMEL208.ROM Game Land (Japan).rom + Y? GAMEM209.ROM Game Master (Europe).rom + Y? GAMEM210.ROM Game Master (Japan).rom + N0 GANGM213.ROM Gang Master (Japan).rom + YP GHOST216.ROM Ghostbusters (Europe).rom + Y? GLIDE217.ROM Glider (Japan).rom + Y GOKIB218.ROM Gokiburi Daisakusen - Bug Bomb (Japan).rom + N0 GOLFG219.ROM Golf Game (Japan).rom + YP? GOMOK221.ROM Gomok Narabe - Omo Go (Japan).rom + Y GOONI222.ROM Goonies, The (Japan).rom + Y GPWOR223.ROM GP World (Japan).rom + N9 GREEN224.ROM Green Beret (Europe).rom + Y GROGS225.ROM Grog's Revenge (Japan).rom + Y GUARD226.ROM Guardic (Japan).rom + Y GULKA227.ROM Gulkave (Japan).rom + YP GUNFR228.ROM Gun Fright (Japan).rom + Y GUNJI229.ROM Gunjin Shougi Mars (Japan).rom + YP GYROD230.ROM Gyrodine (Japan).rom + N0 HEROJ231.ROM H.E.R.O. (Japan).rom + Y HADES232.ROM Hades no Monsho (Japan).rom + Y HAFAN233.ROM Hafanuda Koi Koi - Gostop Godori (Japan).rom + YP HANAF235.ROM Hanafuta (Japan).rom + Y HANGO236.ROM Hang-On (Japan).rom + Y HARAP237.ROM Harapeko Pakkun (Japan).rom + Y HAUNT240.ROM Haunted Boynight (Japan).rom + Y HEAVY241.ROM Heavy Boxing (Japan).rom + Y HEIST242.ROM Heist, The (Japan).rom + Y HELIT243.ROM Helitank (Japan).rom + Y HIGHW244.ROM High Way Star (Japan).rom + Y HIGHW245.ROM High Way Star (Korea).rom + YP? HISYA246.ROM Hisya (Japan).rom + Y HITSU247.ROM Hitsuji Yai - Preety Sheep (Japan).rom + Y HOLEI248.ROM Hole in One (Japan).rom + Y? HOLEI249.ROM Hole in One Professional (Japan).rom + Y HONKB250.ROM Honkball (Japan).rom + YP HOPPE251.ROM Hopper (Europe).rom + Y? HUDSO252.ROM Hudson 3D Golf (Japan).rom + Y HUSTL253.ROM Hustle! Chumy (Japan).rom + Y HYDLI254.ROM Hydlide (Japan).rom + Y HYPER257.ROM Hyper Olympic 1 (Japan).rom + Y HYPER258.ROM Hyper Olympic 2 (Japan).rom + Y? HYPER259.ROM Hyper Rally (Japan).rom + Y HYPER260.ROM Hyper Sports 1 (Japan).rom + Y HYPER261.ROM Hyper Sports 2 (Japan).rom + N4 HYPER262.ROM Hyper Sports 3 (Japan).rom + Y ICEWO263.ROM Ice World (Japan).rom + Y IGANI264.ROM Iga Ninpouten - Small Ninja (Japan).rom + Y IGANI265.ROM Iga Ninpouten 2 - Small Ninja 2 (Japan).rom + Y INDIA266.ROM Indian no Bouken (Japan).rom + N0 IRIEG267.ROM Iriegas (Japan).rom + Y IRIEG268.ROM Iriegas - Theseus (Japan).rom + Y ISSUN269.ROM Issunhoushi No Donnamondai (Japan).rom + Y JPWIN270.ROM J.P. Winkle (Japan).rom + Y JANKA272.ROM Janka (Japan).rom + Y JETSE273.ROM Jet Set Willy (Japan).rom + Y JIGSA274.ROM Jigsaw Set (Japan).rom + Y JISSE275.ROM Jissen - 4-nin Mahjong (Japan).rom + Y JUMPJ276.ROM Jump (Japan).rom + Y JUMPC277.ROM Jump Coaster (Japan).rom + YP JUMPL278.ROM Jump Land (Japan).rom + Y JUMPI279.ROM Jumping Rabbit (Japan).rom + N0 JUNOF280.ROM Juno First (Japan).rom + Y JYANF281.ROM Jyan Friend (Japan).rom + Y JYANK282.ROM Jyankyo (Japan).rom + Y JYANY283.ROM Jyanyuu (Japan).rom + N4 KAGEN284.ROM Kage no Densetsu - Legend of Kage, The (Japan).rom + N0 KARAM285.ROM Karamaru (Japan).rom + N0 KEYST287.ROM Keystone Kapers (Japan).rom + YP KICKI288.ROM Kick It (Japan).rom + Y KINAS289.ROM Kinasai (Japan) (Unl).rom + Y KINGB290.ROM King & Balloon (Japan).rom + Y KINGS292.ROM King's Valley (Japan, Europe).rom + Y KINNI294.ROM Kinnikuman - Muscle Man (Japan).rom + YP KNIGH295.ROM Knight Lore (Japan).rom + Y KNIGH296.ROM Knightmare - Majou Densetsu (Japan).rom + Y KONAM300.ROM Konami's Baseball (Japan).rom + Y KONAM301.ROM Konami's Billiards (Europe).rom + Y KONAM302.ROM Konami's Boxing (Japan).rom + N4 KONAM303.ROM Konami's Football (Europe).rom + N4 KONAM304.ROM Konami's Golf (Japan).rom + Y? KONAM305.ROM Konami's Mahjong (Japan).rom + Y? KONAM306.ROM Konami's Ping-Pong (Japan).rom + N4 KONAM307.ROM Konami's Soccer (Japan).rom + Y KONAM308.ROM Konami's Tennis (Japan).rom + Y KONEK309.ROM Koneko no Daibouken - Catboy (Japan).rom + Y KUNGF310.ROM Kung Fu Acho (Japan).rom + Y KUNGF311.ROM Kung Fu Master (Japan).rom + Y KUNGF312.ROM Kung Fu Taigun (Japan).rom + N0 LADDE313.ROM Ladder Building (Japan).rom + YP LAPTI314.ROM Laptick 2 (Japan).rom + Y LEMAN315.ROM Le Mans 2 (Europe).rom + N8 LEONA317.ROM Leonard (Spain).rom + Y LODER319.ROM Lode Runner (Japan).rom + Y LODER320.ROM Lode Runner II (Japan).rom + N0 LORDO321.ROM Lord Over (Japan).rom + N3 LOTLO322.ROM Lot Lot (Japan).rom + Y LUNAR323.ROM Lunar Ball (Japan).rom + N7 MACAT325.ROM Mac Attack (Europe).rom + Y MACHI326.ROM Machinegun Joe vs The Mafia (Japan).rom + Y MACRO327.ROM Macross (Japan).rom + Y MAGIC328.ROM Magical Kid Wiz (Japan).rom + Y MAGIC329.ROM Magical Tree (Japan).rom + Y MANES331.ROM Manes (Japan).rom + Y MAPPY332.ROM Mappy (Japan).rom + N0 MARIN334.ROM Marine Battle (Japan).rom + YP? MARSI335.ROM Mars II (Japan).rom + Y? MASTE337.ROM Master Chess (Europe).rom + Y MEGAL338.ROM Megalopolis SOS (Japan).rom + Y? MIDNI340.ROM Midnight Brothers (Japan).rom + Y? MIDNI341.ROM Midnight Building (Japan).rom + Y? MIDWA342.ROM Midway (Japan).rom + Y? MILCA343.ROM Mil Caras (Spain).rom + Y MINIG344.ROM Mini Golf (Japan).rom + Y MOAIN347.ROM Moai no Hibou (Japan).rom + Y MOBIL348.ROM Mobile Planet Suthirus - Approach from the Westgate (Japan).rom + Y MOBIL349.ROM Mobile-Suit Gundam - Last Shooting (Japan).rom + YP MOKAR350.ROM Mokarimakka (Japan).rom + N0 MOLEJ351.ROM Mole (Japan).rom + Y? MOLEM352.ROM Mole Mole 2 (Japan).rom + YP? MONKE353.ROM Monkey Academy (Japan).rom + Y MONST354.ROM Monster's Fair (Japan).rom + N0 MOONL355.ROM Moon Landing (Japan).rom + Y MOONP356.ROM Moon Patrol (Japan).rom + Y MOONS357.ROM Moonsweeper (Japan).rom + N4 MOPIR358.ROM Mopiranger (Japan).rom + NC MORIT359.ROM Morita Kazuo no Othello (Japan).rom + YP? MOUSE360.ROM Mouser (Japan).rom + Y MRCHI361.ROM Mr. Chin (Japan).rom + Y? MRDOJ362.ROM Mr. Do (Japan).rom + Y MRDOS364.ROM Mr. Do's Wild Ride (Japan).rom + Y MRDOV363.ROM Mr. Do vs Unicorns (Japan).rom + N0 MSX21365.ROM MSX 21 (Japan).rom + Y MSXBA366.ROM MSX Baseball (Japan).rom + Y MSXBA367.ROM MSX Baseball II National (Japan).rom + N0 MSXDE368.ROM MSX Derby (Japan).rom + Y MSXRU369.ROM MSX Rugby (Japan).rom + Y MSXSO370.ROM MSX Soccer (Japan).rom + N0 NAUSI372.ROM Nausicaa (Japan).rom + Y NESSE378.ROM Nessen Koushiyen (Japan).rom + YP NIGHT379.ROM Night Shade (Japan).rom + Y NINJA380.ROM Ninja Jajamaru-kun (Japan).rom + YP NINJA381.ROM Ninja Princess (Japan).rom + Y NINJA382.ROM Ninjakun (Japan).rom + Y NINJA383.ROM Ninjakun Majou (Japan).rom + Y NINJY384.ROM Ninjya Kage (Japan).rom + Y? NYANN386.ROM Nyan Nyan Pro Wrestling (Japan).rom + Y NYORO387.ROM Nyorols (Japan).rom + Y OILSW389.ROM Oil's Well (Japan).rom + Y? OKAMI390.ROM Okami no Su (Japan).rom + Y OMACF388.ROM O'Mac Farmer (Japan).rom + Y OTHEL391.ROM Othello (Japan).rom + Y OYOID392.ROM Oyoide Tango (Japan).rom + Y PACHI394.ROM Pachi Com (Japan).rom + Y PACMA393.ROM Pac-Man (Japan).rom + Y PAIPA395.ROM Pai Panic (Japan).rom + N0 PAIRS396.ROM Pairs (Japan).rom + Y PANTH397.ROM Panther (Japan).rom + N0 PASSB399.ROM Pass Ball (Japan).rom + YP? PASTF400.ROM Pastfinder (Japan).rom + Y? PAYLO401.ROM Pay Load (Japan).rom + Y PEETA402.ROM Peetan (Japan).rom + Y PEGAS403.ROM Pegasus (Japan).rom + Y PENGU405.ROM Penguin-kun Wars (Japan).rom + YP? PICOP406.ROM Pico Pico (Japan).rom + Y PICTU407.ROM Picture Puzzle (Japan).rom + Y? PILLB408.ROM Pillbox (Japan).rom + Y? PINEA410.ROM Pine Applin (Japan).rom + YP? PINGB411.ROM Pingball Maker (Japan).rom + YP PINKY412.ROM Pinky Chase (Japan).rom + Y PIPIJ413.ROM Pipi (Japan).rom + Y PIPPO414.ROM Pippols (Japan).rom + YP PITFA415.ROM Pitfall II - Lost Caverns (Japan).rom + NP8 PITFA416.ROM Pitfall! (Japan).rom + Y PLAYB417.ROM Play Ball (Japan).rom + N4 POINY418.ROM Poiny X Senryosakusen - Operation Thanksgiving (Japan).rom + Y POLIC419.ROM Police Story, The (Japan).rom + YP POOYA420.ROM Pooyan (Japan).rom + Y POPPA421.ROM Poppaq the Fish (Japan).rom + N4 PROFE423.ROM Professional Baseball (Japan).rom + YP? PROFE424.ROM Professional Mahjong (Japan).rom + Y PROTE425.ROM Protector, The (Japan).rom + Y PUZZL427.ROM Puzzle Panic (Japan).rom + Y PYRAM428.ROM Pyramid Warp (Japan).rom + Y QBERT429.ROM Q-bert (Japan).rom + Y QUEEN430.ROM Queen's Golf (Japan).rom + Y RAIDO432.ROM Raid on Bungeling Bay (Japan).rom + Y RALLY433.ROM Rally-X (Japan).rom + YP? RAMBO434.ROM Rambo (Japan).rom + YP? REALT435.ROM Real Tennis (Japan).rom + Y REDZO436.ROM Red Zone (Japan).rom + N0 RENJU438.ROM Renju & Ojama Dogs (Japan).rom + Y RISEO439.ROM Rise Out from Dungeons (Japan).rom + N0 RIVER440.ROM River Raid (Japan).rom + Y ROADF441.ROM Road Fighter (Japan).rom + Y ROBOF443.ROM Robofrog (Japan).rom + NP8 ROCKN444.ROM Rock'n Bolt (Japan).rom + Y ROGER445.ROM Roger Rubbish (Europe).rom + Y? ROLLE446.ROM Roller Ball (Japan).rom + N0 ROTOR447.ROM Rotors (Japan).rom + YP SASAJ450.ROM Sasa (Japan).rom + Y? SAURU451.ROM Saurus Land (Japan).rom + Y SCARL452.ROM Scarlet 7 - The Mightiest Women (Japan).rom + Y SCION453.ROM Scion (Japan).rom + N0 SCOPE454.ROM Scope On - Fight in Space (Japan).rom + Y SCRAM455.ROM Scramble Eggs (Japan).rom + Y SEAHU456.ROM Sea Hunter (Europe).rom + Y SENJY458.ROM Senjyo (Japan).rom + N4 SEWER459.ROM Sewer Sam (Japan).rom + Y SHOUG460.ROM Shougi (Japan).rom + N4 SHOUG461.ROM Shougi 2 (Japan).rom + N0 SHOUG462.ROM Shougi Game (Japan).rom + Y SHOUG463.ROM Shougi Meijin (Japan).rom + Y SHOUG464.ROM Shougi Sinan 1 (Japan).rom + YP SHOUT465.ROM Shout Match (Japan).rom + YP SINBA466.ROM Sinbad (Japan).rom + YP SKOOT467.ROM Skooter (Japan).rom + Y SKYGA468.ROM Sky Galdo (Japan).rom + Y SKYJA469.ROM Sky Jaguar (Japan).rom + N8 SLAPS470.ROM Slapshot (Spain).rom + Y SNAKE471.ROM Snake It (Europe).rom + Y SOUKO473.ROM Soukoban (Japan).rom + Y SPACE474.ROM Space Camp (Japan).rom + Y SPACE475.ROM Space Invaders (Japan).rom + Y SPACE476.ROM Space Maze Attack (Japan).rom + Y SPACE477.ROM Space Trouble (Japan).rom + Y SPACE478.ROM Space Walk (Europe).rom + N0 SPARK479.ROM Sparkie (Japan).rom + Y SPELU480.ROM Spelunker (Japan).rom + N8 SPIDE481.ROM Spider, The (Japan).rom + Y SQUAR483.ROM Square Dancer (Japan).rom + Y SQUIS484.ROM Squish'em (Japan).rom + Y STARB485.ROM Star Blazer (Japan).rom + N0 STARC486.ROM Star Command (Japan).rom + Y STARF487.ROM Star Force (Japan).rom + Y STARS488.ROM Star Soldier (Japan).rom + Y? START489.ROM Star Trap (Japan).rom + Y? STARS490.ROM Starship Simulator (Japan).rom + Y STEPU491.ROM Step Up (Japan).rom + N8 STEPP492.ROM Stepper (Japan).rom + Y STONE493.ROM Stone of Wisdom, The (Japan).rom + N4 STRAN494.ROM Strange Loop (Japan).rom + Y SUPAR495.ROM Suparobo (Japan).rom + N0 SUPER496.ROM Super Billiards (Japan).rom + YP? SUPER499.ROM Super Boy I (Korea) (Unl).rom + YP? SUPER500.ROM Super Boy II (Korea) (Unl).rom + YP SUPER501.ROM Super Bubble Bobble (Korea) (Unl).rom + NP4 SUPER502.ROM Super Cobra (Japan).rom + YP SUPER503.ROM Super Columns (Japan).rom + YP SUPER504.ROM Super Cross Force (Europe).rom + Y SUPER505.ROM Super Drinker (Japan).rom + YP SUPER506.ROM Super Golf (Japan).rom + NP8 SUPER508.ROM Super Pachinko (Japan).rom + Y SUPER510.ROM Super Snake (Japan).rom + Y SUPER511.ROM Super Soccer (Japan).rom + Y SUPER512.ROM Super Tennis (Japan).rom + NP4 SUPER513.ROM Super Tripper (Spain).rom + YP SWEET514.ROM Sweet Acorn (Japan).rom + N4 SWING515.ROM Swing (Japan).rom + Y TANKB517.ROM Tank Battalion (Japan).rom + Y TATIC518.ROM Tatica (Japan).rom + Y TAWAR519.ROM Tawara-kun (Japan).rom + Y TEARO520.ROM Tear of Nile (Japan).rom + NP8 TELEB521.ROM Telebunnie (Japan).rom + Y TENSA522.ROM Tensai Rabbian Daifunsen (Japan).rom + Y? TENSI523.ROM Tensidachino Gogo (Japan).rom + YP TENSI524.ROM Tension (Spain).rom + NP8 TETRA525.ROM Tetra Horror (Japan).rom + Y TETRI526.ROM Tetris (Korea) (Unl).rom + NP8 TETSU527.ROM Tetsuman (Japan).rom + Y THEXD528.ROM Thexder (Japan).rom + Y? THUND529.ROM Thunder Ball (Japan).rom + N6 THUND530.ROM Thunderbolt (Japan).rom + YP TIMEP531.ROM Time Pilot (Japan).rom + YP TOPPL534.ROM Topple Zip (Japan).rom + Y TOPRO533.ROM Top Roller! (Japan).rom + Y TRACK535.ROM Track & Field 1 (Europe).rom + Y TRACK536.ROM Track & Field 2 (Europe).rom + Y TRAFF537.ROM Traffic (Japan).rom + N0 TRIAL538.ROM Trial Ski (Japan).rom + Y TRICK539.ROM Trick Boy (Japan).rom + YP TRITO540.ROM Tritorn (Japan).rom + N0 TRUMP541.ROM Trumpaid (Japan).rom + N8 TURBO543.ROM Turboat (Japan).rom + Y TWINB544.ROM Twin Bee (Japan).rom + YP TWINH545.ROM Twin Hammer (Europe).rom + Y TZRGR546.ROM TZR - Grand Prix Rider (Japan).rom + Y ULTRA547.ROM Ultraman (Japan).rom + YP? VENUS549.ROM Venus Fire (Japan).rom + NP4 VIDEO550.ROM Video Hustler (Japan).rom + Y VOLGU551.ROM Volguard (Japan).rom + Y WARPW552.ROM Warp & Warp (Japan).rom + YP WARRO553.ROM Warroid (Japan).rom + Y? WATER554.ROM Water Driver (Japan).rom + Y WONDE556.ROM Wonder Boy (Japan).rom + NP4 WRANG557.ROM Wrangler (Spain).rom + NP4 WRECK558.ROM Wreck, The (Europe).rom + YP XYXOL559.ROM Xyxolog (Japan).rom + N8 YABYU560.ROM Yab Yum (Netherlands).rom + Y YELLO561.ROM Yellow Submarine (Japan).rom + Y YIEAR562.ROM Yie Ar Kung-Fu (Japan).rom + N4 YIEAR563.ROM Yie Ar Kung-Fu II - The Emperor Yie-Gah (Japan).rom + YP YOKAI564.ROM Yokai Tanken Chimachima (Japan).rom + Y ZAIDE566.ROM Zaider - Battle of Peguss (Japan).rom + Y ZANAC567.ROM Zanac (Japan) (v2).rom + Y ZANAC568.ROM Zanac (Japan).rom + Y ZAXXO569.ROM Zaxxon (Japan).rom + N0 ZENJI570.ROM Zenji (Japan).rom + Y ZEXAS571.ROM Zexas Limited (Japan).rom + Y ZOOM9572.ROM Zoom 909 (Japan).rom +================= TESTED ALL ABOVE ================= diff --git a/Source/Images/d_msxroms2/u0/ROTOR447.ROM b/Source/Images/d_msxroms2/u0/ROTOR447.ROM new file mode 100644 index 00000000..f3cea3f2 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ROTOR447.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SASAJ450.ROM b/Source/Images/d_msxroms2/u0/SASAJ450.ROM new file mode 100644 index 00000000..28efe046 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SASAJ450.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SAURU451.ROM b/Source/Images/d_msxroms2/u0/SAURU451.ROM new file mode 100644 index 00000000..26838656 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SAURU451.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SCARL452.ROM b/Source/Images/d_msxroms2/u0/SCARL452.ROM new file mode 100644 index 00000000..7cc462cf Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SCARL452.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SCION453.ROM b/Source/Images/d_msxroms2/u0/SCION453.ROM new file mode 100644 index 00000000..cb6f9451 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SCION453.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SCOPE454.ROM b/Source/Images/d_msxroms2/u0/SCOPE454.ROM new file mode 100644 index 00000000..d26218ec Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SCOPE454.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SCRAM455.ROM b/Source/Images/d_msxroms2/u0/SCRAM455.ROM new file mode 100644 index 00000000..2ea77e05 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SCRAM455.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SEAHU456.ROM b/Source/Images/d_msxroms2/u0/SEAHU456.ROM new file mode 100644 index 00000000..3b3b0783 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SEAHU456.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SENJY458.ROM b/Source/Images/d_msxroms2/u0/SENJY458.ROM new file mode 100644 index 00000000..2ea1eb01 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SENJY458.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SEWER459.ROM b/Source/Images/d_msxroms2/u0/SEWER459.ROM new file mode 100644 index 00000000..52b08e5d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SEWER459.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUG460.ROM b/Source/Images/d_msxroms2/u0/SHOUG460.ROM new file mode 100644 index 00000000..7f798d9b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUG460.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUG461.ROM b/Source/Images/d_msxroms2/u0/SHOUG461.ROM new file mode 100644 index 00000000..afb712e7 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUG461.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUG462.ROM b/Source/Images/d_msxroms2/u0/SHOUG462.ROM new file mode 100644 index 00000000..2d50bafd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUG462.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUG463.ROM b/Source/Images/d_msxroms2/u0/SHOUG463.ROM new file mode 100644 index 00000000..dac21bb1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUG463.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUG464.ROM b/Source/Images/d_msxroms2/u0/SHOUG464.ROM new file mode 100644 index 00000000..e2c706c8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUG464.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SHOUT465.ROM b/Source/Images/d_msxroms2/u0/SHOUT465.ROM new file mode 100644 index 00000000..dfb01c8d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SHOUT465.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SINBA466.ROM b/Source/Images/d_msxroms2/u0/SINBA466.ROM new file mode 100644 index 00000000..1e9db136 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SINBA466.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SKOOT467.ROM b/Source/Images/d_msxroms2/u0/SKOOT467.ROM new file mode 100644 index 00000000..34839e19 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SKOOT467.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SKYGA468.ROM b/Source/Images/d_msxroms2/u0/SKYGA468.ROM new file mode 100644 index 00000000..21aecf06 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SKYGA468.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SKYJA469.ROM b/Source/Images/d_msxroms2/u0/SKYJA469.ROM new file mode 100644 index 00000000..974b3802 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SKYJA469.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SLAPS470.ROM b/Source/Images/d_msxroms2/u0/SLAPS470.ROM new file mode 100644 index 00000000..ed630e38 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SLAPS470.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SNAKE471.ROM b/Source/Images/d_msxroms2/u0/SNAKE471.ROM new file mode 100644 index 00000000..21f8728c Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SNAKE471.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SOUKO473.ROM b/Source/Images/d_msxroms2/u0/SOUKO473.ROM new file mode 100644 index 00000000..156842b8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SOUKO473.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPACE474.ROM b/Source/Images/d_msxroms2/u0/SPACE474.ROM new file mode 100644 index 00000000..3c5262f7 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPACE474.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPACE475.ROM b/Source/Images/d_msxroms2/u0/SPACE475.ROM new file mode 100644 index 00000000..a8563ff0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPACE475.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPACE476.ROM b/Source/Images/d_msxroms2/u0/SPACE476.ROM new file mode 100644 index 00000000..b4c298ff Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPACE476.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPACE477.ROM b/Source/Images/d_msxroms2/u0/SPACE477.ROM new file mode 100644 index 00000000..237d8d68 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPACE477.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPACE478.ROM b/Source/Images/d_msxroms2/u0/SPACE478.ROM new file mode 100644 index 00000000..5ff85c6a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPACE478.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPARK479.ROM b/Source/Images/d_msxroms2/u0/SPARK479.ROM new file mode 100644 index 00000000..c7ff1e8d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPARK479.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPELU480.ROM b/Source/Images/d_msxroms2/u0/SPELU480.ROM new file mode 100644 index 00000000..3f8113e5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPELU480.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SPIDE481.ROM b/Source/Images/d_msxroms2/u0/SPIDE481.ROM new file mode 100644 index 00000000..c48d0587 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SPIDE481.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SQUAR483.ROM b/Source/Images/d_msxroms2/u0/SQUAR483.ROM new file mode 100644 index 00000000..02d888d8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SQUAR483.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SQUIS484.ROM b/Source/Images/d_msxroms2/u0/SQUIS484.ROM new file mode 100644 index 00000000..872f3be6 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SQUIS484.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STARB485.ROM b/Source/Images/d_msxroms2/u0/STARB485.ROM new file mode 100644 index 00000000..fa6f401e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STARB485.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STARC486.ROM b/Source/Images/d_msxroms2/u0/STARC486.ROM new file mode 100644 index 00000000..21ee5f4e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STARC486.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STARF487.ROM b/Source/Images/d_msxroms2/u0/STARF487.ROM new file mode 100644 index 00000000..d6a4e72b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STARF487.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STARS488.ROM b/Source/Images/d_msxroms2/u0/STARS488.ROM new file mode 100644 index 00000000..4a9ebfe8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STARS488.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STARS490.ROM b/Source/Images/d_msxroms2/u0/STARS490.ROM new file mode 100644 index 00000000..a2012b26 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STARS490.ROM differ diff --git a/Source/Images/d_msxroms2/u0/START489.ROM b/Source/Images/d_msxroms2/u0/START489.ROM new file mode 100644 index 00000000..5dc04e21 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/START489.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STEPP492.ROM b/Source/Images/d_msxroms2/u0/STEPP492.ROM new file mode 100644 index 00000000..5e9f6624 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STEPP492.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STEPU491.ROM b/Source/Images/d_msxroms2/u0/STEPU491.ROM new file mode 100644 index 00000000..3b6de729 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STEPU491.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STONE493.ROM b/Source/Images/d_msxroms2/u0/STONE493.ROM new file mode 100644 index 00000000..cfd98b64 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STONE493.ROM differ diff --git a/Source/Images/d_msxroms2/u0/STRAN494.ROM b/Source/Images/d_msxroms2/u0/STRAN494.ROM new file mode 100644 index 00000000..2cddf3fc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/STRAN494.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPAR495.ROM b/Source/Images/d_msxroms2/u0/SUPAR495.ROM new file mode 100644 index 00000000..905a4dac Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPAR495.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER496.ROM b/Source/Images/d_msxroms2/u0/SUPER496.ROM new file mode 100644 index 00000000..f2c547c0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER496.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER499.ROM b/Source/Images/d_msxroms2/u0/SUPER499.ROM new file mode 100644 index 00000000..8e572374 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER499.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER500.ROM b/Source/Images/d_msxroms2/u0/SUPER500.ROM new file mode 100644 index 00000000..1da662fa Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER500.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER501.ROM b/Source/Images/d_msxroms2/u0/SUPER501.ROM new file mode 100644 index 00000000..5fd76c4d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER501.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER502.ROM b/Source/Images/d_msxroms2/u0/SUPER502.ROM new file mode 100644 index 00000000..76cf511c Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER502.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER503.ROM b/Source/Images/d_msxroms2/u0/SUPER503.ROM new file mode 100644 index 00000000..31e39f9f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER503.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER504.ROM b/Source/Images/d_msxroms2/u0/SUPER504.ROM new file mode 100644 index 00000000..7376c5bc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER504.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER505.ROM b/Source/Images/d_msxroms2/u0/SUPER505.ROM new file mode 100644 index 00000000..e30264c8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER505.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER506.ROM b/Source/Images/d_msxroms2/u0/SUPER506.ROM new file mode 100644 index 00000000..3957fcd6 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER506.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER508.ROM b/Source/Images/d_msxroms2/u0/SUPER508.ROM new file mode 100644 index 00000000..ff7440f8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER508.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER510.ROM b/Source/Images/d_msxroms2/u0/SUPER510.ROM new file mode 100644 index 00000000..e7798b15 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER510.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER511.ROM b/Source/Images/d_msxroms2/u0/SUPER511.ROM new file mode 100644 index 00000000..ee4c00ff Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER511.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER512.ROM b/Source/Images/d_msxroms2/u0/SUPER512.ROM new file mode 100644 index 00000000..22d3de53 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER512.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SUPER513.ROM b/Source/Images/d_msxroms2/u0/SUPER513.ROM new file mode 100644 index 00000000..82c46538 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SUPER513.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SWEET514.ROM b/Source/Images/d_msxroms2/u0/SWEET514.ROM new file mode 100644 index 00000000..a4e84575 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SWEET514.ROM differ diff --git a/Source/Images/d_msxroms2/u0/SWING515.ROM b/Source/Images/d_msxroms2/u0/SWING515.ROM new file mode 100644 index 00000000..deedc9ba Binary files /dev/null and b/Source/Images/d_msxroms2/u0/SWING515.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TANKB517.ROM b/Source/Images/d_msxroms2/u0/TANKB517.ROM new file mode 100644 index 00000000..60a350e5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TANKB517.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TATIC518.ROM b/Source/Images/d_msxroms2/u0/TATIC518.ROM new file mode 100644 index 00000000..b5885e3f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TATIC518.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TAWAR519.ROM b/Source/Images/d_msxroms2/u0/TAWAR519.ROM new file mode 100644 index 00000000..edba0ed3 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TAWAR519.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TEARO520.ROM b/Source/Images/d_msxroms2/u0/TEARO520.ROM new file mode 100644 index 00000000..f45c8c94 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TEARO520.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TELEB521.ROM b/Source/Images/d_msxroms2/u0/TELEB521.ROM new file mode 100644 index 00000000..10a181a0 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TELEB521.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TENSA522.ROM b/Source/Images/d_msxroms2/u0/TENSA522.ROM new file mode 100644 index 00000000..b3dc8df2 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TENSA522.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TENSI523.ROM b/Source/Images/d_msxroms2/u0/TENSI523.ROM new file mode 100644 index 00000000..45b04fdd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TENSI523.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TENSI524.ROM b/Source/Images/d_msxroms2/u0/TENSI524.ROM new file mode 100644 index 00000000..dcdb9423 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TENSI524.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TETRA525.ROM b/Source/Images/d_msxroms2/u0/TETRA525.ROM new file mode 100644 index 00000000..e856081b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TETRA525.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TETRI526.ROM b/Source/Images/d_msxroms2/u0/TETRI526.ROM new file mode 100644 index 00000000..d73af1aa Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TETRI526.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TETSU527.ROM b/Source/Images/d_msxroms2/u0/TETSU527.ROM new file mode 100644 index 00000000..21ac3c25 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TETSU527.ROM differ diff --git a/Source/Images/d_msxroms2/u0/THEXD528.ROM b/Source/Images/d_msxroms2/u0/THEXD528.ROM new file mode 100644 index 00000000..b290c4d8 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/THEXD528.ROM differ diff --git a/Source/Images/d_msxroms2/u0/THUND529.ROM b/Source/Images/d_msxroms2/u0/THUND529.ROM new file mode 100644 index 00000000..0c91682c Binary files /dev/null and b/Source/Images/d_msxroms2/u0/THUND529.ROM differ diff --git a/Source/Images/d_msxroms2/u0/THUND530.ROM b/Source/Images/d_msxroms2/u0/THUND530.ROM new file mode 100644 index 00000000..e0833da5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/THUND530.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TIMEP531.ROM b/Source/Images/d_msxroms2/u0/TIMEP531.ROM new file mode 100644 index 00000000..5cadad1e Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TIMEP531.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TOPPL534.ROM b/Source/Images/d_msxroms2/u0/TOPPL534.ROM new file mode 100644 index 00000000..03c8f2d2 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TOPPL534.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TOPRO533.ROM b/Source/Images/d_msxroms2/u0/TOPRO533.ROM new file mode 100644 index 00000000..67bb2ebd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TOPRO533.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRACK535.ROM b/Source/Images/d_msxroms2/u0/TRACK535.ROM new file mode 100644 index 00000000..4717a132 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRACK535.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRACK536.ROM b/Source/Images/d_msxroms2/u0/TRACK536.ROM new file mode 100644 index 00000000..f1d6f286 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRACK536.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRAFF537.ROM b/Source/Images/d_msxroms2/u0/TRAFF537.ROM new file mode 100644 index 00000000..266a2e3c Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRAFF537.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRIAL538.ROM b/Source/Images/d_msxroms2/u0/TRIAL538.ROM new file mode 100644 index 00000000..e4fd5a6b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRIAL538.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRICK539.ROM b/Source/Images/d_msxroms2/u0/TRICK539.ROM new file mode 100644 index 00000000..a3b51702 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRICK539.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRITO540.ROM b/Source/Images/d_msxroms2/u0/TRITO540.ROM new file mode 100644 index 00000000..b4f4bd47 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRITO540.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TRUMP541.ROM b/Source/Images/d_msxroms2/u0/TRUMP541.ROM new file mode 100644 index 00000000..c262b465 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TRUMP541.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TURBO543.ROM b/Source/Images/d_msxroms2/u0/TURBO543.ROM new file mode 100644 index 00000000..425361d1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TURBO543.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TWINB544.ROM b/Source/Images/d_msxroms2/u0/TWINB544.ROM new file mode 100644 index 00000000..0acb5ba5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TWINB544.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TWINH545.ROM b/Source/Images/d_msxroms2/u0/TWINH545.ROM new file mode 100644 index 00000000..085b73fc Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TWINH545.ROM differ diff --git a/Source/Images/d_msxroms2/u0/TZRGR546.ROM b/Source/Images/d_msxroms2/u0/TZRGR546.ROM new file mode 100644 index 00000000..79063952 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/TZRGR546.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ULTRA547.ROM b/Source/Images/d_msxroms2/u0/ULTRA547.ROM new file mode 100644 index 00000000..c72e3b1f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ULTRA547.ROM differ diff --git a/Source/Images/d_msxroms2/u0/VENUS549.ROM b/Source/Images/d_msxroms2/u0/VENUS549.ROM new file mode 100644 index 00000000..1868ec69 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/VENUS549.ROM differ diff --git a/Source/Images/d_msxroms2/u0/VIDEO550.ROM b/Source/Images/d_msxroms2/u0/VIDEO550.ROM new file mode 100644 index 00000000..54ac5feb Binary files /dev/null and b/Source/Images/d_msxroms2/u0/VIDEO550.ROM differ diff --git a/Source/Images/d_msxroms2/u0/VOLGU551.ROM b/Source/Images/d_msxroms2/u0/VOLGU551.ROM new file mode 100644 index 00000000..04f0802d Binary files /dev/null and b/Source/Images/d_msxroms2/u0/VOLGU551.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WARPW552.ROM b/Source/Images/d_msxroms2/u0/WARPW552.ROM new file mode 100644 index 00000000..b0cd05e4 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WARPW552.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WARRO553.ROM b/Source/Images/d_msxroms2/u0/WARRO553.ROM new file mode 100644 index 00000000..7d8fd51f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WARRO553.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WATER554.ROM b/Source/Images/d_msxroms2/u0/WATER554.ROM new file mode 100644 index 00000000..fdf4a9eb Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WATER554.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WONDE556.ROM b/Source/Images/d_msxroms2/u0/WONDE556.ROM new file mode 100644 index 00000000..1d7dbe0a Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WONDE556.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WRANG557.ROM b/Source/Images/d_msxroms2/u0/WRANG557.ROM new file mode 100644 index 00000000..fa72406b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WRANG557.ROM differ diff --git a/Source/Images/d_msxroms2/u0/WRECK558.ROM b/Source/Images/d_msxroms2/u0/WRECK558.ROM new file mode 100644 index 00000000..33c785cf Binary files /dev/null and b/Source/Images/d_msxroms2/u0/WRECK558.ROM differ diff --git a/Source/Images/d_msxroms2/u0/XYXOL559.ROM b/Source/Images/d_msxroms2/u0/XYXOL559.ROM new file mode 100644 index 00000000..0a47a373 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/XYXOL559.ROM differ diff --git a/Source/Images/d_msxroms2/u0/YABYU560.ROM b/Source/Images/d_msxroms2/u0/YABYU560.ROM new file mode 100644 index 00000000..798378d1 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/YABYU560.ROM differ diff --git a/Source/Images/d_msxroms2/u0/YELLO561.ROM b/Source/Images/d_msxroms2/u0/YELLO561.ROM new file mode 100644 index 00000000..e3c572cb Binary files /dev/null and b/Source/Images/d_msxroms2/u0/YELLO561.ROM differ diff --git a/Source/Images/d_msxroms2/u0/YIEAR562.ROM b/Source/Images/d_msxroms2/u0/YIEAR562.ROM new file mode 100644 index 00000000..483d2c9b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/YIEAR562.ROM differ diff --git a/Source/Images/d_msxroms2/u0/YIEAR563.ROM b/Source/Images/d_msxroms2/u0/YIEAR563.ROM new file mode 100644 index 00000000..052c56a9 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/YIEAR563.ROM differ diff --git a/Source/Images/d_msxroms2/u0/YOKAI564.ROM b/Source/Images/d_msxroms2/u0/YOKAI564.ROM new file mode 100644 index 00000000..cc232151 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/YOKAI564.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZAIDE566.ROM b/Source/Images/d_msxroms2/u0/ZAIDE566.ROM new file mode 100644 index 00000000..4fbe2559 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZAIDE566.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZANAC567.ROM b/Source/Images/d_msxroms2/u0/ZANAC567.ROM new file mode 100644 index 00000000..4054ee2b Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZANAC567.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZANAC568.ROM b/Source/Images/d_msxroms2/u0/ZANAC568.ROM new file mode 100644 index 00000000..a2d873b5 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZANAC568.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZAXXO569.ROM b/Source/Images/d_msxroms2/u0/ZAXXO569.ROM new file mode 100644 index 00000000..30ac56fd Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZAXXO569.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZENJI570.ROM b/Source/Images/d_msxroms2/u0/ZENJI570.ROM new file mode 100644 index 00000000..27e5d502 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZENJI570.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZEXAS571.ROM b/Source/Images/d_msxroms2/u0/ZEXAS571.ROM new file mode 100644 index 00000000..b671d99f Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZEXAS571.ROM differ diff --git a/Source/Images/d_msxroms2/u0/ZOOM9572.ROM b/Source/Images/d_msxroms2/u0/ZOOM9572.ROM new file mode 100644 index 00000000..2dbcb313 Binary files /dev/null and b/Source/Images/d_msxroms2/u0/ZOOM9572.ROM differ diff --git a/Source/Images/d_nzcom/ReadMe.txt b/Source/Images/d_nzcom/ReadMe.txt index 15d11f7e..7c45e6f7 100644 --- a/Source/Images/d_nzcom/ReadMe.txt +++ b/Source/Images/d_nzcom/ReadMe.txt @@ -1,4 +1,4 @@ -===== NZCOM Disk for RomWBW ===== +===== NZ-COM Disk for RomWBW ===== This disk is one of several ready-to-run disks provided with RomWBW. It contains NZ-COM, which is an implementation of the @@ -16,10 +16,10 @@ User Guide.pdf" document found in the Doc directory of the RomWBW Distribution. The primary documentation for NZ-COM is the "NZCOM Users Manual.pdf" -document contained in the Doc directory of the RomWBW distribution. +document contained in the Doc/CPM directory of the RomWBW distribution. This document is a supplement to the primary documentation. Additionally, please review the file called RELEASE.NOT on this disk which contains -a variety of updates regarding the NZ-COM distribuition. +a variety of updates regarding the NZ-COM distribution. The starting point for the disk content was the final official release of NZ-COM which is generally available on the Internet. A minimal @@ -30,27 +30,24 @@ use the system effectively. == Usage == -NZCOM is not designed to load directly from the boot tracks of a +NZ-COM is not designed to load directly from the boot tracks of a disk. Instead, it expects to be loaded from an already running OS. This disk has been configured to boot using ZSDOS with a -PROFILE.SUB command file that automatically loads NZCOM. So, NZCOM +PROFILE.SUB command file that automatically loads NZ-COM. So, NZ-COM will load completely without any intervention, but you may notice -that ZSDOS loads first, then ZSDOS loads NZCOM. This is normal. - -There is no DIR command. Use SDZ or ZXD instead. +that ZSDOS loads first, then ZSDOS loads NZ-COM. This is normal. *** TODO: Date stamping *** == Notes == -NZCOM is distributed in an unconfigured state. The following was -done to create a minimal ready-to-run setup for RomWBW: +NZ-COM is distributed in an unconfigured state. The following was +done to create a ready-to-run setup for RomWBW: - Ran MKZCM and saved default configuration to NZCOM.ZCM and NZCOM.ENV. - Extract VT100 TCAP from Z3TCAP.LBR and saved it as TCAP.Z3T. - Created PROFILE.SUB to launch NZCOM at startup. - - Created empty STARTZCM.COM. - Original TCSELECT.COM was removed and replaced with a newer version from the Z3 files. - TCAP.LBR and Z3TCAP.TCP were removed and replaced with @@ -59,6 +56,20 @@ done to create a minimal ready-to-run setup for RomWBW: versions are provided from Common files. - Replaced ZRDOS with ZSDOS in NZCOM.LBR. The standalone ZRDOS.ZRL and ZSDOS.ZRL files were saved. + - Copied ARUNZ.COM to CMDRUN.COM + - Moved all configuration files to 14: per ZCPR3 conventions + - Moved all help and documentation files to 10: per ZCPR3 conventions + - Moved executables to 15: per ZCPR3 conventions + - Updated HELP.COM to search for help files in A10: instead of A15: + - Updated LBRHELP.COM to search for help files in A10: instead of A15: + - Updated STARTZCM with + ZPATH /C=A0:,$$:,A15: /D=A0:,A15: + NZCOM TCAP.Z3T + - Updated NZCOM.NDR in NZCOM.LBR with new directory names: + A 0: SYSTEM A 10: HELP A 14: CONFIG A 15: ROOT + - Moved DOCFILES.LBR to 10: + - Moved all TCJ files to 10: + - Added REN, SAVE, and SP commands to ALIAS.CMD The following additional customizations were also performed: @@ -73,251 +84,14 @@ The following additional customizations were also performed: - Z3LOC.COM - ZCNFG.COM -== NZCOM Files == - -The following files came from the official NZCOM distribution. These -are generally documented in the "NZCOM Users Manual.pdf" document in -the Doc directory of the RomWBW distribution. Note that some of the -files included in the NZ-COM distribution are not listed below because -they have been superseded by more recent versions listed in other -sections below. For example, TCSELECT is not listed here, but a more -recent version is included and documented in the General Purpose -Applications section below. - -!(C)1988 - Original copyright (since placed in public domain) -!NZ-COM - Software marker directory entry (empty file) -!VERS--1.2H - Version marker directory entry (empty file) -ALIAS.CMD - Sample alias definitions for use with ARUNZ -ARUNZ.COM - Alias-RUN-forZ-System command alias execution -BGZRDS19.LBR - ??? -CLEDINST.COM - Configure RCP-resident command line editor -CLEDSAVE.COM - Save RCP-resident command line editor history -CONFIG.LBR - Various configuration files for use with ZCNFG -CPSET.COM - Displays/defines CRT/PRT characteristics -DOCFILES.LBR - Documentation and help files collected into an LBR file -EDITNDR.COM - Edit named directory register in memory -FCP.LBR - Library of alternative FCP modules -FF.COM - File finder utility -HELP.COM - (HELPC14) is an improved version of the help utility -HLPFILES.LBR - Various app help files for use with LBRHELP -IF.COM - Extended flow control tester -JETLDR.COM - Z-System package loader -LBRHELP.COM - Help file viewer for use with help file libraries (.LBR) -LDIR.COM - Directory lister for libraries (.LBR) -LPUT.COM - Puts file(s) into a library (.LBR) -LSH-HELP.COM - Display LSH help when LSH is running -LSH.COM - Command history shell and command line editor -LSH.WZ - User manual for LSH -LSHINST.COM - LSH configuration editor -LX.COM - Execute programs directly from a library (.LBR) -MKZCM.COM - Create/update NZ-COM load environment -NAME.COM - Quickly add or remove a name for a single directory -NZ-DBASE.INF - dBase II application note regarding SUBMIT files -NZBLITZ.COM - Rapid coldboot of complete NZ-COM system image -NZBLTZ14.CFG - ZCNFG configuration file for NZBLITZ -NZBLTZ14.HZP - Help file for NZBLITZ -NZCOM.COM - Loads and launches NZ-COM system -NZCOM.ENV - Z-System environment descriptor -NZCOM.LBR - Library containing NZ-COM system modules -NZCOM.ZCM - NZ-COM environment descriptor (alternate format) -NZCPR.LBR - Library of alternative ZCPR modules -PATH.COM - Set/display command search path -PROFILE.SUB - Command file to auto-start NZ-COM at system boot -PUBLIC.COM - Specify ZRDOS public directories/user areas -PWD.COM - Displays DU and Directory Names with paging -RCP.LBR - Library of alternative RCP modules -RELEASE.NOT - Update information on NZ-COM -SAINST.COM - Install/configure SALIAS -SALIAS.COM - Screen oriented alias editor -SAVENDR.COM - Writes the named directory register to disk -SDZ.COM - Enhanced directory lister -SHOW.COM - Display Z-System configuration information -STARTZCM.COM - Commands to execute after NZ-COM is launched -SUB.COM - Enhanced version of SUBMIT -TCJ.INF - Description of included articles from The Computer Journal -TCJ*.WZ - Selected articles from The Computer Journal -TY3ERA.COM - Type 3 erase command -TY3REN.COM - Type 3 rename command -TY4ERA.COM - Type 4 erase command -TY4REN.COM - Type 4 rename command -TY4SAVE.COM - Type 4 save command -TY4SP.COM - Type 4 disk space command -VIEW.COM - Quad directional file viewer -XTCAP.COM - Interactive Extended TCAP Installer -Z3TCAP.TCP - Database of terminal descriptors -ZERR.COM - Z34 Error Handler -ZEX.COM - Powerful command line processor -ZF-DIM.COM - Point-and-shoot user interface for dim-video terminals -ZF-REV.COM - Point-and-shoot user interface for reverse-video terminals -ZFILEB38.LZT - Brief listing of Z-System support programs -ZFILER.CMD - Macro script file for ZFILER -ZHELPERS.LZT - List of volunteers who will help installing Z-System -ZLT.COM - File lister with support for compressed files -ZNODES66.LZT - List of Z-Node remote access systems -ZRDOS.ZRL - Relocatable version of ZRDOS BDOS module -ZSDOS.ZRL - Relocatable version of ZSDOS 1.1 BDOS module -ZSYSTEM.IZF - Information on Z-System and related products - -== CP/M 2.2 Files == - -The following files have been included from CP/M 2.2. These files -provide various functionality that is not really available from the -ZSDOS applications themselves. For example, the CP/M 2.2 application -called STAT is useful for modifying the IOBYTE. Most of these -applications are documented in the "CPM Manual.pdf" document in the Doc -directory of the RomWBW distribution. - -ASM.COM - DRI 8080 assembler producing Intel hex files -LIB.COM - DRI relocatable object file librarian -LINK.COM - DRI relocatable object file linker -LOAD.COM - DRI loader for Intel hex files -MAC.COM - DRI 8080 macro assembler producing Intel hex files -RMAC.COM - DRI 8080 macro assembler producing relocatable object files -STAT.COM - DRI multi-purpose file/disk/device info & configuration tool -SUBMIT.COM - DRI batch file submission tool -XSUB.COM - DRI batch file enhancer resident system extension - -== ZSDOS Files == - -The following files came from the official ZSDOS distribution. These -are generally documented in the "ZSDOS Manual.pdf" document in the Doc -directory of the RomWBW distribution. These files are relevant under -NZ-COM because ZSDOS is a part of the NZ-COM system. - -BGPATCH.HEX - Patches BackGrounder II for ZSDOS 1.1 compatibility -CLOCKS.DAT - Library of clock drivers -COPY.CFG - ZCNFG configuration file for COPY -COPY.COM - Enhanced file copy tool -COPY.UPD - Document describing updates to COPY program -DATSWEEP.COM - File management utility w/ date/time stamp awareness -DSCONFIG.COM - Program to configure DATSWEEP -FA16.CFG - ZCNFG configuration file for FILEATTR -FA16.DOC - Documentation for FILEATTR -FA16A.FOR - Summary of FILEATTR program version 16a -FA16CFG.TXT - Document describes FILEATTR configuration options -FILEATTR.COM - Set and/or display file attributes -FILEDATE.CFG - ZCNFG configuration fie for FILEDATE -FILEDATE.COM - Date/time stamping aware disk directory utility -INITDIR.CFG - ZCNFG configuration file for INITDIR -INITDIR.COM - Prepare disk for P2DOS date/time stamping -LDDS.COM - Load DateStamper date/time stamping resident extension -LDNZT.COM - Load NZT date/time stamping resident extension -LDP2D.COM - Load P2DOS date/time stamping resident extension -PUTBG.COM - Updated replacement for BackGrounder II PUTBG program -PUTDS.COM - Prepare disk for DateStamper date/time stamping -RELOG.COM - Clear fixed disk login vector in ZSDOS (see manual) -SETTERM.COM - Terminal configuration utility for DATSWEEP & DSCONFIG -SETUPZST.COM - Creates customized date/time stamping resident extensions -STAMPS.DAT - Library of available date/time stamping modules for SETUPZST -TD.CFG - ZCNFG configuration file for TD -TD.COM - Read and set system real-time clock -TERMBASE.DAT - Library of terminals used by SETTERM -TESTCLOK.COM - Test a selected clock driver -ZCAL.COM - Display a small one-month calendar to the screen -ZCNFG.COM - Configuration tool for programs with .CFG files -ZCNFG24.CFG - ZCNFG configuration file for ZCNFG -ZPATH.COM - Set or display ZSDOS and ZCPR search paths -ZSCONFIG.COM - Dynamically configure features of ZSDOS operating system -ZSVSTAMP.COM - Preserves file date/time stamp across modifications -ZSVSTAMP.DOC - Document describes the use and operation of ZSVSTAMP - -== RomWBW Supplemental Applications == - -The following files provide specific functionality enabled by -RomWBW enhancements. These applications are documented in the -"RomWBW Applications.pdf" document in the Doc directory of the -RomWBW Distribution. - -ASSIGN.COM - Assign,remove,swap drive letters of RomWBW disk slices -FAT.COM - MS-DOS FAT filesystem tool (list, copy, delete, format, etc.) -FDU.COM - Test floppy hardware and format floppy disks -FORMAT.COM - Placeholder application with formatting instructions -INTTEST.COM - Test RomWBW interrupt processing on your hardware -MODE.COM - Change serial line characteristics (baud rate, etc.) -RTC.COM - Test real time clock hardware on your system -SURVEY.COM - Display system resources summary -SYSCOPY.COM - Copy system tracks to disks (make bootable) -SYSGEN.COM - Copy system tracks to disks (DRI version) -TALK.COM - Route console I/O to & from specified serial port -TIMER.COM - Test and display system timer ticks -TUNE.COM - Play .PT2, .PT3, and .MYM audio files on supported hardware -XM.COM - XModem file transfer application -ZMP.COM - ZModem communications program (requires dedicated comm port) -ZMP.DOC - Documentation for ZMP -ZMP.HLP - Help file for ZMP -ZMXFER.OVR - Overlay file for ZMP -ZMTERM.OVR - Overlay file for ZMP -ZMINIT.OVR - Overlay file for ZMP -ZMCONFIG.OVR - Overlay file for ZMP - -== General Purpose Applications == - -The following files are commonly used CP/M applications that -are generally useful in any CP/M-like system. In general, there is -no documentation for these applications included with the RomWBW -distribution. Some provide command line help themselves. Some -are fairly obvious. - -CLRDIR.COM - Initializes the directory area of a disk -COMPARE.COM - Compare content of two files (binary) -CRUNCH.COM - Compress file(s) using Crunch algorithm -CRUNCH28.CFG - ZCNFG configuration file for CRUNCH & UNCR -DDTZ.COM - Z80 debug tool (modified to use RST 6) -DDTZ.DOC - Documentation for DDTZ -EX.COM - Batch file processor (alternative to DRI SUBMIT) -FDISK80.COM - Hard disk partitioning tool (from John Coffman) -FIND.COM - Search all drives for a file (from Jay Cotton) -FLASH.COM - Program FLASH chips in-situ (from Will Sowerbutts) -FLASH.DOC - Documentation for FLASH -MBASIC.COM - Microsoft BASIC language interpreter -NULU.COM - Library (.LBR) management tool -PMARC.COM - Create or add file(s) to .PMA archive -PMEXT.COM - Extract file(s) from .PMA/.LZH/.LHA archive -RMXSUB1.COM - Remove XSUB1 RSX from memory (from Lars Nelson) -SUPERSUB.COM - Enhanced replacement for DRI SUBMIT -SUPERSUB.DOC - Documentation for SUPERSUB -TDLBASIC.COM - TDL Zapple 12K BASIC language interpreter -UNARC.COM - Extract file(s) from .ARC or .ARK archive -UNARC.DOC - Documentation for UNARC -UNCR.COM - Decompress Crunched file(s) -UNZIP.COM - UNZIPZ extracts from all MS-DOS ZIP files (from Lars Nelson) -UNZIP.DOC - Documentation for UNZIPZ -XSUB1.COM - Replacement for DRI SUB (from Lars Nelson) -ZAP.COM - Interactive disk & file utility -ZDE.COM - Compact WordStar-like editor -ZDENST.COM - Installation/configuration tool for ZDE -KERCPM22.COM - Kermit file transfer application -LBREXT.COM - Extract file from .LBR libraries -LBREXT36.CFG - ZCNFG configuration file for LBREXT -ZXD.COM - Enhanced directory lister w/ date/time stamp support -ZXD.CFG - ZCNFG configuration file for ZXD -BBCBASIC.COM - BBC BASIC CP/M Version 3.00 by R.T.Russell -BBCBASIC.TXT - Help file for BBC BASIC -GENHEX.COM - Generates an Intel Hex file from the input file -LS.COM - An alternative file listing to DIR -LSWEEP.COM - Can extract and view member files of an .LBR archive - -== Testing Applications (User Area 2) == - -User area 2 contains a variety of hardware testing applications. -These are generally user contributed and have no documentation. -Additionally, they are frequently not compatible with all RomWBW -hardware. They are included here as a convenience. If applicable, -your hardware documentation should refer to them and provide usage -instructions. - -== Sample Tune Files (User Area 3) == - -User area 3 contains sample audio files that can be played using -the TUNE application. - -== CP/NET 1.2 (User Area 4) == +While including Z3PLUS disk image the SHOW.COM and HELP.COM +files were renamed to ZSHOW.COM and ZHELP.COM for consistency +with Z3PLUS, and ZPM3 -User area 4 contains a full implementation of the CP/NET 1.2 -client provided by Doug Miller. Please read the README.TXT file -in this user area for more information. +== NZ-COM Files == -N.B., at a minimum, some of the files in this user area must be copied -to user area 0 for CP/NET to work properly. +For a description of the files contained in this disk please see the +"Rom WBW Disk Catalog.pdf" document contained in the Doc directory +of the RomWBW distribution. --- WBW 11:19 AM 1/22/2024 \ No newline at end of file +-- WBW 7:14 PM 8/17/2024 diff --git a/Source/Images/d_nzcom/u0/ALIAS.CMD b/Source/Images/d_nzcom/u0/ALIAS.CMD deleted file mode 100644 index 936006c3..00000000 Binary files a/Source/Images/d_nzcom/u0/ALIAS.CMD and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/HELP.COM b/Source/Images/d_nzcom/u0/HELP.COM deleted file mode 100644 index 58b4d6fc..00000000 Binary files a/Source/Images/d_nzcom/u0/HELP.COM and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/LBRHELP.COM b/Source/Images/d_nzcom/u0/LBRHELP.COM deleted file mode 100644 index eb1ef6ee..00000000 Binary files a/Source/Images/d_nzcom/u0/LBRHELP.COM and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/NZCOM.LBR b/Source/Images/d_nzcom/u0/NZCOM.LBR index ba93bc11..b62e3240 100644 Binary files a/Source/Images/d_nzcom/u0/NZCOM.LBR and b/Source/Images/d_nzcom/u0/NZCOM.LBR differ diff --git a/Source/Images/d_nzcom/u0/PROFILE.SUB b/Source/Images/d_nzcom/u0/PROFILE.SUB index e7c32d08..f494e311 100644 --- a/Source/Images/d_nzcom/u0/PROFILE.SUB +++ b/Source/Images/d_nzcom/u0/PROFILE.SUB @@ -1,2 +1,2 @@ -NZCOM NZCOM.ZCM TCAP.Z3T - \ No newline at end of file +NZCOM NZCOM.ZCM + \ No newline at end of file diff --git a/Source/Images/d_nzcom/u0/SAINST.COM b/Source/Images/d_nzcom/u0/SAINST.COM deleted file mode 100644 index 1e6db48f..00000000 Binary files a/Source/Images/d_nzcom/u0/SAINST.COM and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/SALIAS.COM b/Source/Images/d_nzcom/u0/SALIAS.COM deleted file mode 100644 index 9b85e041..00000000 Binary files a/Source/Images/d_nzcom/u0/SALIAS.COM and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/STARTZCM.COM b/Source/Images/d_nzcom/u0/STARTZCM.COM index 2deda943..bfd1ce2b 100644 Binary files a/Source/Images/d_nzcom/u0/STARTZCM.COM and b/Source/Images/d_nzcom/u0/STARTZCM.COM differ diff --git a/Source/Images/d_nzcom/u0/BGZRDS19.LBR b/Source/Images/d_nzcom/u10/BGZRDS19.LBR similarity index 100% rename from Source/Images/d_nzcom/u0/BGZRDS19.LBR rename to Source/Images/d_nzcom/u10/BGZRDS19.LBR diff --git a/Source/Images/d_nzcom/u0/NZ-DBASE.INF b/Source/Images/d_nzcom/u10/NZ-DBASE.INF similarity index 100% rename from Source/Images/d_nzcom/u0/NZ-DBASE.INF rename to Source/Images/d_nzcom/u10/NZ-DBASE.INF diff --git a/Source/Images/d_nzcom/u0/NZBLTZ14.HZP b/Source/Images/d_nzcom/u10/NZBLTZ14.HZP similarity index 100% rename from Source/Images/d_nzcom/u0/NZBLTZ14.HZP rename to Source/Images/d_nzcom/u10/NZBLTZ14.HZP diff --git a/Source/Images/d_nzcom/u0/RELEASE.NOT b/Source/Images/d_nzcom/u10/RELEASE.NOT similarity index 100% rename from Source/Images/d_nzcom/u0/RELEASE.NOT rename to Source/Images/d_nzcom/u10/RELEASE.NOT diff --git a/Source/Images/d_nzcom/u0/NZBLTZ14.CFG b/Source/Images/d_nzcom/u14/NZBLTZ14.CFG similarity index 100% rename from Source/Images/d_nzcom/u0/NZBLTZ14.CFG rename to Source/Images/d_nzcom/u14/NZBLTZ14.CFG diff --git a/Source/Images/d_nzcom/u15/ALIAS.CMD b/Source/Images/d_nzcom/u15/ALIAS.CMD new file mode 100644 index 00000000..7e60b436 Binary files /dev/null and b/Source/Images/d_nzcom/u15/ALIAS.CMD differ diff --git a/Source/Images/d_nzcom/u15/CMDRUN.COM b/Source/Images/d_nzcom/u15/CMDRUN.COM new file mode 100644 index 00000000..041b87c4 Binary files /dev/null and b/Source/Images/d_nzcom/u15/CMDRUN.COM differ diff --git a/Source/Images/d_nzcom/u0/MKZCM.COM b/Source/Images/d_nzcom/u15/MKZCM.COM similarity index 100% rename from Source/Images/d_nzcom/u0/MKZCM.COM rename to Source/Images/d_nzcom/u15/MKZCM.COM diff --git a/Source/Images/d_nzcom/u0/NZBLITZ.COM b/Source/Images/d_nzcom/u15/NZBLITZ.COM similarity index 100% rename from Source/Images/d_nzcom/u0/NZBLITZ.COM rename to Source/Images/d_nzcom/u15/NZBLITZ.COM diff --git a/Source/Images/d_nzcom/u0/PUBLIC.COM b/Source/Images/d_nzcom/u15/PUBLIC.COM similarity index 100% rename from Source/Images/d_nzcom/u0/PUBLIC.COM rename to Source/Images/d_nzcom/u15/PUBLIC.COM diff --git a/Source/Images/d_nzcom/u0/SUB.COM b/Source/Images/d_nzcom/u15/SUB.COM similarity index 100% rename from Source/Images/d_nzcom/u0/SUB.COM rename to Source/Images/d_nzcom/u15/SUB.COM diff --git a/Source/Images/d_qpm/ReadMe.txt b/Source/Images/d_qpm/ReadMe.txt index 5704aba2..7765bc86 100644 --- a/Source/Images/d_qpm/ReadMe.txt +++ b/Source/Images/d_qpm/ReadMe.txt @@ -36,12 +36,12 @@ code brakpoints. This conflicts the use of that vector for any system that is using interrupt mode 1. DEBUGZ can be configured (using DBGINST) to use a different vector. -The QSTAMP program, which is used to initialize a disk for date/time -stamping, misbehavews when run on the (new) RomWBW 1024 directory -format disks. It creates an invalid directory entry for the date/time -stamp data file. This is definitely a QP/M issue. The directory entry -can be manually corrected. Specifically the byte offset 15 should -contain the number of 128-byte records in the file. Instead, it is set +The QSTAMP program, which is used to initialize a disk for date/time +stamping, misbehavews when run on the (new) RomWBW 1024 directory +format disks. It creates an invalid directory entry for the date/time +stamp data file. This is definitely a QP/M issue. The directory entry +can be manually corrected. Specifically the byte offset 15 should +contain the number of 128-byte records in the file. Instead, it is set to 0x01. You can edit the entry, change it to 0x80 and everything starts working. @@ -92,7 +92,7 @@ The following files have been included from CP/M 2.2. These files provide various functionality that is not really available from the ZSDOS applications themselves. For example, the CP/M 2.2 application called STAT is useful for modifying the IOBYTE. Most of these -applications are documented in the "CPM Manual.pdf" document in the Doc +applications are documented in the "CPM Manual.pdf" document in the Doc/CPM directory of the RomWBW distribution. ASM.COM - DRI 8080 assembler producing Intel hex files @@ -175,7 +175,7 @@ LBREXT.COM - Extract file from .LBR libraries LBREXT36.CFG - ZCNFG configuration file for LBREXT ZXD.COM - Enhanced directory lister w/ date/time stamp support ZXD.CFG - ZCNFG configuration file for ZXD -BBCBASIC.COM - BBC BASIC CP/M Version 3.00 by R.T.Russell +BBCBASIC.COM - BBC BASIC CP/M Version by R.T.Russell BBCBASIC.TXT - Help file for BBC BASIC GENHEX.COM - Generates an Intel Hex file from the input file LS.COM - An alternative file listing to DIR diff --git a/Source/Images/d_tpascal/Readme.txt b/Source/Images/d_tpascal/Readme.txt index e318f988..10a736ca 100644 --- a/Source/Images/d_tpascal/Readme.txt +++ b/Source/Images/d_tpascal/Readme.txt @@ -8,7 +8,7 @@ and mathematician. Turbo Pascal closely follows the definition of Standard Pascal as defined in the Pascal User Manual and Report with a few minor differences. -The manual can be found in the Docs directory, +The manual can be found in the Docs/Language directory, Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf A good overview of using Turbo Pascal in CP/M is available at diff --git a/Source/Images/d_z3plus/ReadMe.txt b/Source/Images/d_z3plus/ReadMe.txt new file mode 100644 index 00000000..77441594 --- /dev/null +++ b/Source/Images/d_z3plus/ReadMe.txt @@ -0,0 +1,111 @@ + +===== Z3PLUS Disk for RomWBW ===== + +This disk is one of several ready-to-run disks provided with +RomWBW. It contains Z3PLUS, which is an implementation of the +Z-System. You may also see Z3PLUS referred to as ZCPR 3.4. This is +a powerful replacement for CP/M 3. + +The disk is bootable as is (the operating system image is already +embedded in the system tracks) and can be launched from the RomWBW +Loader prompt. See the Usage and Notes sections below for more +information on how Z3PLUS is loaded. + +The remainder of this document describes the usage and contents of +this disk. It is highly recommended that you review the "RomWBW +User Guide.pdf" document found in the Doc directory of the +RomWBW Distribution. + +The primary documentation for Z3PLUS is the "Z3PLUS Users Manual.pdf" +document contained in the Doc/CPM directory of the RomWBW distribution. +This document is a supplement to the primary documentation. Additionally, +please review the file called RELEASE.NOT on this disk which contains +a variety of updates regarding the Z3PLUS distribution. + +The starting point for the disk content was the final official release of +Z3PLUS which is generally available on the Internet. A minimal +system generation was done just sufficient to get Z3PLUS to run under +RomWBW. Z3PLUS is extremely configurable and far more powerful than +DRI CP/M. It is almost mandatory that you read the Z3PLUS manual to +use the system effectively. + +== Usage == + +Z3PLUS is not designed to load directly from the boot tracks of a +disk. Instead, it expects to be loaded from an already running +OS. This disk has been configured to boot using CP/M 3 with a +PROFILE.SUB command file that automatically loads Z3PLUS. So, Z3PLUS +will load completely without any intervention, but you may notice +that CP/M 3 loads first, then CP/M 3 loads Z3PLUS. This is normal. + +== Configration == + +Z3PLUS is distributed in an unconfigured state. The following was +done to create a ready-to-run setup for RomWBW: + + - Created PROFILE.SUB to launch Z3PLUS at startup. + - Created STARTZ3P.COM (alias) with + Z3PLUS /Q + PATH /C $$$$ A15 A0 + - Replaced DEFAULT.Z3T (IN Z3PLUS.LBR) with VT100 Term Definiton: + - Replaced DEFAULT.NDR (IN Z3PLUS.LBR) with new directory names: + A0:SYSTEM A10:HELP A14:CONFIG A15: ROOT + - Copied ARUNZ.COM to CMDRUN.COM + - Added REN, SAVE, and SP commands to ALIAS.CMD + +== Notes == + +One of the bigger changes when deploying this image was the consoliadation +of Files between NZCOM and Z3PLUS. Both of these distributions came +from the same vendor and share the Same DNA, the primary difference being the +underlying OS (and BDOS) being eithe CP/M 2.2 (NZCOM) or CP/M 3 (Z3PLUS) + +Thus a new "Common/NZ3PLUS" folder was created and sharded files +move here, to avoid significant duplication. This was done with NZ-COM files (primarily) +to ensure backwards compatability, and any improvements (done in NZ-COM) stick. + +Carried over from the NZCOM Changes + - Extract VT100 TCAP from Z3TCAP.LBR and saved it as TCAP.Z3T. + - Original TCSELECT.COM was removed and replaced with a newer version + from the Z3 files. TCAP.LBR and Z3TCAP.TCP were removed and replaced with + Z3TCAP.LBR from new TCSELECT distribution. + - Updated HELP.COM to search for help files in A10: instead of A15: + - Updated LBRHELP.COM to search for help files in A10: instead of A15: + +Files Moved + - Moved all help and documentation files to 10: per ZCPR3 conventions + - Moved DOCFILES.LBR to 10: + - Moved all TCJ files to 10: + - Moved all configuration files to 14: per ZCPR3 conventions + - Moved executables to 15: per ZCPR3 conventions + +Files Removed because newer versions are already included: + - COPY.COM + - CRUNCH.COM + - UNCRUNCH.COM + - LBREXT.COM + - ZCNFG.COM + +== Files == + +For a description of the files contained in this disk please see the +"Rom WBW Disk Catalog.pdf" document contained in the Doc directory +of the RomWBW distribution. + +=========================================== + +== Suggestions == + +Some of the files currenty in A15 (NZCOM and Z3PLUS) look more like they +should be in A0, as they are part of system definition / config +rather than a general purpose utility .e.g. + - ALIAS.CMD - this one in particular contains config + - CMDRUN.COM - effectivly config since it is a copy of one of 2 files + - ????? + + + + + + + diff --git a/Source/Images/d_z3plus/u0/!(C)1988 b/Source/Images/d_z3plus/u0/!(C)1988 new file mode 100644 index 00000000..1be7cc2f --- /dev/null +++ b/Source/Images/d_z3plus/u0/!(C)1988 @@ -0,0 +1,20 @@ + Z3PLUS COPYRIGHT (c) 1988 + by + Bridger Mitchell + + +Z3PLUS(tm) - The Z-System for CP/M Plus, is copyright 1988 by +Bridger Mitchell, all rights reserved. + +The Z3PLUS files and the Z3PLUS User's Manual may not be +reproduced or distributed in any form. A licensed user may +make backup/archival copies for his or her own use only. + +Z3PLUS is available from: + +Bridger Mitchell +Plu*Perfect Systems +410 23rd Street +Santa Monica CA 90402 + + distributed with Z3PLUS has been patchedto \ No newline at end of file diff --git a/Source/Images/d_z3plus/u0/!VERS--1.02F b/Source/Images/d_z3plus/u0/!VERS--1.02F new file mode 100644 index 00000000..e69de29b diff --git a/Source/Images/d_z3plus/u0/!Z3PLUS b/Source/Images/d_z3plus/u0/!Z3PLUS new file mode 100644 index 00000000..e69de29b diff --git a/Source/Images/d_z3plus/u0/PROFILE.SUB b/Source/Images/d_z3plus/u0/PROFILE.SUB new file mode 100644 index 00000000..841d1413 --- /dev/null +++ b/Source/Images/d_z3plus/u0/PROFILE.SUB @@ -0,0 +1,2 @@ +z3plus + \ No newline at end of file diff --git a/Source/Images/d_z3plus/u0/RCP.LBR b/Source/Images/d_z3plus/u0/RCP.LBR new file mode 100644 index 00000000..fdc452f6 Binary files /dev/null and b/Source/Images/d_z3plus/u0/RCP.LBR differ diff --git a/Source/Images/d_z3plus/u0/STARTZ3P.COM b/Source/Images/d_z3plus/u0/STARTZ3P.COM new file mode 100644 index 00000000..44d77f3d Binary files /dev/null and b/Source/Images/d_z3plus/u0/STARTZ3P.COM differ diff --git a/Source/Images/d_z3plus/u0/Z3PLUS.COM b/Source/Images/d_z3plus/u0/Z3PLUS.COM new file mode 100644 index 00000000..29717aa4 Binary files /dev/null and b/Source/Images/d_z3plus/u0/Z3PLUS.COM differ diff --git a/Source/Images/d_z3plus/u0/Z3PLUS.LBR b/Source/Images/d_z3plus/u0/Z3PLUS.LBR new file mode 100644 index 00000000..f1f51b37 Binary files /dev/null and b/Source/Images/d_z3plus/u0/Z3PLUS.LBR differ diff --git a/Source/Images/d_z3plus/u10/PATCH4SK.HEX b/Source/Images/d_z3plus/u10/PATCH4SK.HEX new file mode 100644 index 00000000..14b59ae1 Binary files /dev/null and b/Source/Images/d_z3plus/u10/PATCH4SK.HEX differ diff --git a/Source/Images/d_z3plus/u10/PATCHSK.SUB b/Source/Images/d_z3plus/u10/PATCHSK.SUB new file mode 100644 index 00000000..b38fbfdc Binary files /dev/null and b/Source/Images/d_z3plus/u10/PATCHSK.SUB differ diff --git a/Source/Images/d_z3plus/u10/RELEASE.NOT b/Source/Images/d_z3plus/u10/RELEASE.NOT new file mode 100644 index 00000000..5573f0e6 --- /dev/null +++ b/Source/Images/d_z3plus/u10/RELEASE.NOT @@ -0,0 +1,295 @@ + + RELEASE.NOT - UPDATE INFORMATION ON Z3PLUS + + +Please understand that unlike purely commercial enterprises, Z-System is +mainly the work of enthusiasts. As such, Z-System never truly reaches +completion; each new development is more of a plateau upon which further +innovation occurs. Though we have done our best, the printed documentation +inevitably lags behind the most recent enhancements. Try to consult as +much material as possible about a given command before proceeding; if there +is a help or document file pertaining to the command, it supercedes printed +instructions, especially with regard to such matters as syntax or technical +specifications. + + +Notes of September 12, 1991 +=========================== + +Release 1.02E involves a significant updating of the support utilities +that we distribute as a courtesy with Z3PLUS. We suggest that any Z-System +user who is not in regular contact with a Z-Node consider taking advantage +of the Z-System Software Update Service (ZSUS). Here are some of the +important changes with this release. + +ZCNFG.COM, CONFIG.LBR: + Al Hawley has introduced a powerful and convenient method for + configuring programs. ZCNFG works either with individual CFG files + or with CFG files stored in the CONFIG.LBR library. For example, + try running the command "ZCNFG ZLT". ZCNFG will automatically + extract ZLT15.CFG from CONFIG.LBR. + +LBREXT.COM: + This replaces LGET for extracting member files from LBR library + files. + +ZHELP.COM, LBRHELP.COM, HLPFILES.LBR: + ZHELP (actually HELPC14) is an improved version of the help utility. + It can work with normal help files (HLP) and crunched help files + (HZP). LBRHELP can work with normal or crunched help files that are + stored in a library (which is where we have put all the help files + distributed with NZCOM and Z3PLUS). + +DOCFILES.LBR: + Documentation and help files have been collected into an LBR file. + +ZLT.COM: + This is a full Z-System replacement for LT, and it handles the + latest LZH-compressed files. + +COPY.COM: + This is the version of COPY from the ZSDOS/ZDDOS release. Enter + "COPY //" for syntax information. It replaces a dangerously + defective copy program provided with earlier releases. + +LSH.COM, LSH.WZ, LSH-HELP.COM, LSHINST.COM, ZERR.COM: + These are the latest LSH command history shell and command-line + editor and the associated error handler (fixed-log versions). These + completely replace EASE. + +CLEDINST.COM, CLEDSAVE.COM: + A transient history shell like LSH can be slow on floppy systems + with sluggish disk drives, even if the files have been placed in + optimal locations. Some of the RCP modules supplied no include an + RCP-resident command-line editor called CLED. Its features can be + configured using CLEDINST.COM, and the history can be saved to a + file using CLEDSAVE.COM. + +TCAP.LBR, XTCAP.COM: + A number of programs now require a terminal capabilities descriptor + (TCAP) with extended functions. The standard TCAPs loaded with + TCSELECT do not have these functions. TCAP.LBR is a collection of + extended TCAPs for some terminals. XTCAP.COM is a program that can + add the most important extensions to a standard TCAP (it is a quick- + and-dirty fix until the full set of TCAPs is updated). + +VIEW.COM: + This is Bridger Mitchell's file viewing utility. It is very + powerful (but it requires an extended TCAP). + +NAME.COM: + This program can quickly add or remove a name for a single + directory. + +TCJ.INF: + TCJ has a new publisher (one of our own Z-Node sysops), and this + file tells how to take out a subscription (which all Z-System users + absolutely should do!). + +ZFILEB38.LZT: + This is the BRIEF listing of all the support programs currently + available for use with Z-System. There is another file which + includes descriptions of all the programs, but it would fill up an + entire diskette! + + + +Notes of November 5, 1989 +========================= + + + 1. TCSELECT PROBLEM. + 2. LSH REPLACES EASE. + 3. COPY LDIR.COM TO A0:. + 4. CHOICE OF MODULE SIZES. + 5. YOU NEED REN.COM. + 6. ZHELP.COM. + 7. OSBORNE EXECUTIVE ROM BUG. + 8. SMARTKEY BUGS. + 9. COMPATIBILITY WITH BYE. + 10. MINOR UPDATE NOTES. + 11. TO NEW Z-SYSTEM USERS. + 12. NEW DEFAULTS AND NEW FILES: FCP.LBR, RCP.LBR. + + +1. TCSELECT PROBLEM. + +A problem has been discovered with the operation of TCSELECT as described +in the manual. TCSELECT is a Z-System program and does not function +reliably under CP/M (on some systems it causes a crash). Fortunately, there +is a simple fix: reverse the order of the instructions in the manual. Boot +up Z3PLUS before attempting to create MYTERM.Z3T, and run TCSELECT only +after Z3PLUS is running. Remember that you need both TCSELECT.COM and +Z3TCAP.TCP to generate your .Z3T file. The entries in the Z3TCAP library +for the Xerox computers have been patched to correct a long-standing error. + + +2. LSH REPLACES EASE. + +EASE has been replaced by a newer, more versatile, and well-behaved program +named LSH (Log SHell). Like EASE, LSH allows you to edit command lines +using WordStar-like control. Consult LSH.WZ before use for general +information and/or run HELPLSH while running LSH for a display of LSH's +capabilities. LSHINST installs and customizes LSH to taste. Error +handling is now taken care of by ZERR.COM, a separate program. Our great� +thanks to Rob Friefeld for writing these superb Z-System tools and for� +allowing us to include them with NZ-COM. + + +3. COPY LDIR.COM TO A0:. + +We neglected to include LDIR.COM in the list of files to copy to your A0: +directory. Some of the examples in the manual will not work correctly if +LDIR is not available as a command. + + +4. CHOICE OF MODULE SIZES. + +Because of the page alignment of the Z3PLUS system, if the total number of +records required by the NDR, FCP, and RCP combined is an odd number, you +can generally increase the size of one of the modules by 1 record without +losing any additional TPA. We have, therefore, increased the number of +names in the NDR from 14, as stated in the manual, to 21. Until you reach +a large number of names (more than 60), you can figure one record of memory +for each 7 names. + + +5. YOU NEED REN.COM. + +Because there is no resident REN command with the standard version of +Z3PLUS, you should copy the transient version TY4REN.COM to directory A0: +under the name REN.COM. + + +6. ZHELP.COM. + +The standard form of HELP.COM sets up a file control block with the file +type H?P in it so that either an HLP or a squeezed HQP file can be opened. +While this works with a CP/M-2.2 BDOS (which is happy to open the first +file that matches a wildcard FCB), it is trapped as an error by the +CP/M-Plus BDOS. The version of ZHELP distributed with Z3PLUS has been +patched to look only for HLP files. If you pick up any later releases of +this program, it is possible that you will experience this problem. We +will try to alert the programming community to this problem so that future +Z-System programs will be compatible with CP/M-Plus. + + +7. OSBORNE EXECUTIVE ROM BUG. + +Testing on an early version (1.20) of the Executive's boot ROM showed that +Z3PLUS would not load because the ROM misused the Z80 index registers. +Version 1.21 of the Osborne Executive ROM works correctly and is available +from FOG (First Osborne Group). Alternatively, a utility named TPATCH is +available on bulletin boards. TPATCH can be run after cold-booting the +Executive, and before Z3PLUS is loaded. + + +8. SMARTKEY BUGS. + +Smartkey II version 1.0A will often not run on banked-memory CP/M Plus +computers; this problem is more likely to occur if Z3PLUS is loaded. The +SUBMIT file PATCHSK.SUB, which installs PATCH4SK.HEX into Smartkey, appears +to correct this bug. + +If you use Smartkey, read the submit file carefully, be sure you have +exactly this version of Smartkey and the other necessary files, and test on +your system. + +We and other users would appreciate hearing from you whether/how-well this +works. We cannot support the Smartkey product but will be happy to make +the source code of the patch available for others to develop further. + + +9. COMPATIBILITY WITH BYE. + +BYE, the remote access program for CP/M, causes some difficulties when run +with Z3PLUS. In technical terms, BYE alters the bytes in the CP/M-Plus SCB, +which Z3PLUS uses to tell when a CP/M-Plus SUBMIT job is running, and BYE +does not restore these bytes on exit. Since SUBMIT jobs have a higher +priority than shells in the Z-System command hierarchy, BYE causes Z3PLUS +to simply return when the user attempts to run shell programs such as +ZFILER or LSH under (or after) BYE. + +If you MUST use shells with BYE, you can remove SUBMIT job detection by +installing the patch below. The only drawback is that SUBMIT and shells +will no longer run concurrently. However, the new ZEX 5.0 (included in +this package) surpasses SUBMIT for all purposes except startup of Z3PLUS +(not affected by the patch) and extremely TPA-critical situations, so this +should not be a problem. + +The patch is as follows. Extract your DEFCP3.ZRL file from Z3PLUS.LBR. +Use a patcher to look at the first page of the file. You should find the +string "Z3PLUSCP 6/25/88 v 1.00". If so, go to offset 985 hex in the file. +The two bytes at this location should be D6 and C3 hex. Change them to AF +AF. Now use LPUT or NULU to put DEFCP3.ZRL back in Z3PLUS.LBR and restart +Z3PLUS. + + +10. MINOR UPDATE NOTES. + +- The RCP WHLQ command no longer used. "WHL" alone displays the current + wheel status. As before, "WHL password" turns the wheel byte on. "WHL + xxx" now turns the wheel byte OFF if xxx is something other than the + correct password. + +- ARUNZ is now a type-4 program which loads at the highest possible + memory location so as to save lower memory for immediate re-execution + with GO. See ARUNZ09R.DZC and TCJ31.MZG (as well as your NZ-COM or + Z3PLUS manual) for more on the amazing ARUNZ. + +- VLU is no longer included, as it was not reliable. Please use LDIR, + LGET, LPUT, and LT instead to manipulate library files. + +- At this writing, we are sorry to note that both Z-Node Central and the + Lillipute Z-Nodes mentioned in Chapter 7 of your manual are out of + service. Z-Nodes 2 and 3 are still going strong, however, as are the + many others listed in ZNODES.LST. Z-Node 2 is the new Z-Node Central. + We cannot recommend highly enough that you get a modem and investigate at + least one Z-Node as a source of inspiration and support. + +- Version 5.0 of the ZEX batch processor replaces earlier versions. ZEX + now runs under both NZ-COM and Z3PLUS and is a very powerful means of + customizing programs and commands. The ZEX.RSX file mentioned in the + manual is no longer required. See ZEX50.DZC for help. + + +11. TO NEW Z-SYSTEM USERS. + +- All files whose middle filetype character is "Z" (e.g., SAMPLE.DZC) are + "crunched" files which must be uncompressed with LT.COM or UNCRUNCH.COM + before use. + +- As outlined in section 4.3.2 of your manual, most Z-System programs + have built-in help; type the name of any program followed by "//" for a + short description if you are confused. + +- Finally, it is not at all necessary to master every nuance of the system + before it becomes useful. Please don't try to devour all of Z-System at + once. Instead, we suggest that you decide what aspects of the system you + will find most helpful and try to master one or two of those before + exploring further. We think you will find that if you choose wisely, + learning one aspect fully not only makes that aspect of your computing + world easier, it also equips you with the skills and confidence with + which to surmount other aspects of Z-System more confidently. + + +12. NEW DEFAULTS AND NEW FILES: FCP.LBR, RCP.LBR. + +To minimize disk space requirements, Z3PLUS.LBR contains only some standard +configurations of the FCP and RCP modules. Alternative versions of these +modules are now supplied in separate libraries. Modules can be loaded +directly from these libraries, or individual files can be extracted and put +into Z3PLUS.LBR to replace the default files. Each library has a brief DOC +file describing the modules (some of which are the default versions included +in Z3PLUS.LBR). + +Carson Wilson and Rob Friefeld have made some major changes in the RCP code +(see the DOC file in RCP.LBR). The standard RCP module is now 18 records +long instead of 16, and the large RCP module is 36 records long. The system +configuration files DEFAULT.Z3P and LARGE.Z3P have been edited to reflect +these changes. The TPA requirements listed on page 54 of the manual are no +longer correct. + + + - End of RELEASE.NOT - + diff --git a/Source/Images/d_z3plus/u15/ALIAS.CMD b/Source/Images/d_z3plus/u15/ALIAS.CMD new file mode 100644 index 00000000..a6f81a93 Binary files /dev/null and b/Source/Images/d_z3plus/u15/ALIAS.CMD differ diff --git a/Source/Images/d_z80asm/Readme.txt b/Source/Images/d_z80asm/Readme.txt index 153d3107..03d79c26 100644 --- a/Source/Images/d_z80asm/Readme.txt +++ b/Source/Images/d_z80asm/Readme.txt @@ -6,9 +6,9 @@ and stores the output in either a core-image, Intel hex format, or relocatable object file. The mnemonics recognized are those of Zilog/Mostek. The optional listing output may be sent to a disk file, the console and/or the printer, in any combination. Output files may also be generated containing cross-reference -information on each symbol used. +information on each symbol used. -The manual is available in the Doc directory, +The manual is available in the Doc/Language directory, z80asm (SLR Systems).pdf A run through of using the assembler is available at diff --git a/Source/Images/d_zpm3/u0/ROMWBW.TXT b/Source/Images/d_zpm3/ReadMe.txt similarity index 100% rename from Source/Images/d_zpm3/u0/ROMWBW.TXT rename to Source/Images/d_zpm3/ReadMe.txt diff --git a/Source/Images/d_zpm3/u0/HELP.HLP b/Source/Images/d_zpm3/u0/HELP.HLP deleted file mode 100644 index 428c767a..00000000 Binary files a/Source/Images/d_zpm3/u0/HELP.HLP and /dev/null differ diff --git a/Source/Images/d_zpm3/u10/ALIAS.HLP b/Source/Images/d_zpm3/u10/ALIAS.HLP deleted file mode 100644 index c255ce8e..00000000 --- a/Source/Images/d_zpm3/u10/ALIAS.HLP +++ /dev/null @@ -1,167 +0,0 @@ -; - - ALIA 1.5 - - The ZCPR3 ALIAS Facility - - A - The ALIAS Command - - E - ALIAS Examples - - S - Summary of ALIAS Variables - -:A - -Command: ALIAS - - Syntax: ALIA [[dir:]cmndname] - -Function: - - Th ALIA facilit i th scrip expansio utilit o ZCPR3 -A Alia i CO fil create b th ALIA progra whic -contain on o mor command (separate b semicolons t b -place i th Comman Lin Buffer Whe th Alia i invoked -parameter fro th comman lin ar implante int th scrip -containe withi th Alias an th resultin ne comman lin i -place int th Comman Lin Buffe an executed. - - -Options: - None - -Comments: - - ZCPR MUS b implemente wit a Externa Comman Lin -Buffe i orde fo ALIA t work. - - Th scrip o th interna comman lin support paramete -passin i manne simila t ZE an SUB Th variable $n -wher < < 9 ma b place int th script an th -correspondin parameter wil b substitute fo th indicate -variables Th variabl $ i th nam o th Alia itself Th -variabl $ i th entir tai o th comman line. - - - Ne variables $ an $U ar available $ expand int -th lette o th dis whic wa logge i a th tim th Alia -wa expande (th hom disk) an $ expand int numbe (i -ASCI chars representin th use are whic wa logge i a -th tim th Alia wa expande (th hom user). - - Th ZCPR Syste fil name ar availabl t th Alia a -th variable $F fo NAME.TYP $N fo NAM an $T fo TYP -wher < < 4 $F refer t th prototyp SH.VA filenam -whil $F refer t NAME.TY o Syste Fil 1 $N refer t NAM -o Syste Fil 1 etc Not tha th SETFIL comman i use t -defin th content o th Syste fil names. - - '$$ expand int singl '$' I fact an unrecognize -variabl afte '$ wil expan t itself - - - ne ALIA variabl i introduce a Versio 1.5 th -Pointer I wil retur th content o an know memor -locatio (plu a optiona offset) I take th for.. - $.ADDR[+OFF][[.OFF[+OFF]][.OFF[+OFF]] - - Fo example o m NZCO system.. - -$. (0001H D50 Bio War boo entry -$.1- (0001H D50 Beginnin o Bios -$. (0006H C70 BDO entry - -$.10 (0109H E78 Z3EN address -$.109.2 (Z3ENV+22H E88 Z3MS buffe address -$.109.22+ Z3MSG+ E88 Progra Erro Flag -$.109.1 (Z3ENV+18H E90 Z3C address -$.109.18. (Z3CL E9x NXTCH pointer - - - Summary of Alias Variables - - $0 - Name of Alias - $n - Parameter from Command Line (1 <= n <= 9) - - $* - Tail of Command Line (everything after the verb) - - $D - Curren Driv Letter - $U - Curren Use Number - - $F Prototyp SH.VA Shel Variabl File - $Fn - FILENAME.TYP of System File n (1 <= n <= 4) - $Nn - FILENAME of System File n - $T TY o Syste Fil n - - $.add Ne Pointe variable - - $$ - The character '$' - - - - -Error Messages: (onl one) - - "Ovfl mean tha eithe particula comman tai ha -expande beyon 12 character an woul overflo TBUF i i -wer ru o th expande comman lines combine wit th -remainde o th content o th comman lin buffer i to lon -t fi i th comman lin buffer. - -:S - - Summary of Alias Variables - - $0 - Name of Alias - $n - Parameter from Command Line (1 <= n <= 9) - - $* - Tail of Command Line (everything after the verb) - - $D - Home Disk - $U - Home User - - $F SH.VA prototyp Shel Variabl filename - $Fn - FILENAME.TYP of System File n (1 <= n <= 4) - $Nn - FILENAME of System File n - $T TY o Syste Fil n - - $.add Ne Pointe variable - - $$ - The character '$' - -:E - - Examples of Aliases - -Case 1: - - Th use i constantl issuin th followin command i th -orde indicated: - - ASM myfile.BBZ - LOAD myfile - - He can generalize it with the following Alias script: - - ASM $1.BBZ;LOAD $1 - - If this Alias is named MYASM.COM, then typing - -"MYASM test" will be equivalent to "ASM test.BBZ;LOAD test" - -Case 2: - - Sam a Cas excep t th Curren Drive no necessaril -driv B: - - AS $1.$D$DZ;LOA $1 - -Cas 3: - - Imagin yo hav change disk i th driv an yo wan -t displa it director an spac available Yo woul normall -execut ^ t war boot the mayb XDI C fo th display A -alia ca reduc thi t singl characte command X. - - JUM 0;XDI C: - \ No newline at end of file diff --git a/Source/Images/d_zpm3/u15/alias.com b/Source/Images/d_zpm3/u15/alias.com deleted file mode 100644 index bdd1e667..00000000 Binary files a/Source/Images/d_zpm3/u15/alias.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/copy.com b/Source/Images/d_zpm3/u15/copy.com deleted file mode 100644 index 606c81a5..00000000 Binary files a/Source/Images/d_zpm3/u15/copy.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/date.com b/Source/Images/d_zpm3/u15/date.com deleted file mode 100644 index 67a84b2d..00000000 Binary files a/Source/Images/d_zpm3/u15/date.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/device.com b/Source/Images/d_zpm3/u15/device.com deleted file mode 100644 index 78075a3f..00000000 Binary files a/Source/Images/d_zpm3/u15/device.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/dir.com b/Source/Images/d_zpm3/u15/dir.com deleted file mode 100644 index 16ead13b..00000000 Binary files a/Source/Images/d_zpm3/u15/dir.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/dump.com b/Source/Images/d_zpm3/u15/dump.com deleted file mode 100644 index 97c10c03..00000000 Binary files a/Source/Images/d_zpm3/u15/dump.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/ed.com b/Source/Images/d_zpm3/u15/ed.com deleted file mode 100644 index 203eafd7..00000000 Binary files a/Source/Images/d_zpm3/u15/ed.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/editndr.com b/Source/Images/d_zpm3/u15/editndr.com deleted file mode 100644 index 149cb98c..00000000 Binary files a/Source/Images/d_zpm3/u15/editndr.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/erase.com b/Source/Images/d_zpm3/u15/erase.com deleted file mode 100644 index cdc3ea60..00000000 Binary files a/Source/Images/d_zpm3/u15/erase.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/gencom.com b/Source/Images/d_zpm3/u15/gencom.com deleted file mode 100644 index d0816425..00000000 Binary files a/Source/Images/d_zpm3/u15/gencom.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/get.com b/Source/Images/d_zpm3/u15/get.com deleted file mode 100644 index 7f12456e..00000000 Binary files a/Source/Images/d_zpm3/u15/get.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/help.com b/Source/Images/d_zpm3/u15/help.com deleted file mode 100644 index 3a4d4394..00000000 Binary files a/Source/Images/d_zpm3/u15/help.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/hexcom.com b/Source/Images/d_zpm3/u15/hexcom.com deleted file mode 100644 index e8eb54b4..00000000 Binary files a/Source/Images/d_zpm3/u15/hexcom.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/initdir.com b/Source/Images/d_zpm3/u15/initdir.com deleted file mode 100644 index 03cce335..00000000 Binary files a/Source/Images/d_zpm3/u15/initdir.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/patch.com b/Source/Images/d_zpm3/u15/patch.com deleted file mode 100644 index 548b266e..00000000 Binary files a/Source/Images/d_zpm3/u15/patch.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/pip.com b/Source/Images/d_zpm3/u15/pip.com deleted file mode 100644 index e1321a2a..00000000 Binary files a/Source/Images/d_zpm3/u15/pip.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/put.com b/Source/Images/d_zpm3/u15/put.com deleted file mode 100644 index c9d35243..00000000 Binary files a/Source/Images/d_zpm3/u15/put.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/rename.com b/Source/Images/d_zpm3/u15/rename.com deleted file mode 100644 index 8582175f..00000000 Binary files a/Source/Images/d_zpm3/u15/rename.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/salias.com b/Source/Images/d_zpm3/u15/salias.com deleted file mode 100644 index b9f3562f..00000000 Binary files a/Source/Images/d_zpm3/u15/salias.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/save.com b/Source/Images/d_zpm3/u15/save.com deleted file mode 100644 index 03ceb989..00000000 Binary files a/Source/Images/d_zpm3/u15/save.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/savendr.com b/Source/Images/d_zpm3/u15/savendr.com deleted file mode 100644 index bf8d1125..00000000 Binary files a/Source/Images/d_zpm3/u15/savendr.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/sdz.com b/Source/Images/d_zpm3/u15/sdz.com deleted file mode 100644 index 46f81fdc..00000000 Binary files a/Source/Images/d_zpm3/u15/sdz.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/set.com b/Source/Images/d_zpm3/u15/set.com deleted file mode 100644 index e4c374dc..00000000 Binary files a/Source/Images/d_zpm3/u15/set.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/setdef.com b/Source/Images/d_zpm3/u15/setdef.com deleted file mode 100644 index 005ac7ad..00000000 Binary files a/Source/Images/d_zpm3/u15/setdef.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/show.com b/Source/Images/d_zpm3/u15/show.com deleted file mode 100644 index 5f2458ec..00000000 Binary files a/Source/Images/d_zpm3/u15/show.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/submit.com b/Source/Images/d_zpm3/u15/submit.com deleted file mode 100644 index e0473c7c..00000000 Binary files a/Source/Images/d_zpm3/u15/submit.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/type.com b/Source/Images/d_zpm3/u15/type.com deleted file mode 100644 index 17e695f2..00000000 Binary files a/Source/Images/d_zpm3/u15/type.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/zcnfg.com b/Source/Images/d_zpm3/u15/zcnfg.com deleted file mode 100644 index ae423dc5..00000000 Binary files a/Source/Images/d_zpm3/u15/zcnfg.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/zex.com b/Source/Images/d_zpm3/u15/zex.com deleted file mode 100644 index cd46405d..00000000 Binary files a/Source/Images/d_zpm3/u15/zex.com and /dev/null differ diff --git a/Source/Images/d_zpm3/u15/zsid.com b/Source/Images/d_zpm3/u15/zsid.com deleted file mode 100644 index 686b3775..00000000 Binary files a/Source/Images/d_zpm3/u15/zsid.com and /dev/null differ diff --git a/Source/Images/d_zsdos/ReadMe.txt b/Source/Images/d_zsdos/ReadMe.txt index 53cfd778..02be339b 100644 --- a/Source/Images/d_zsdos/ReadMe.txt +++ b/Source/Images/d_zsdos/ReadMe.txt @@ -15,7 +15,7 @@ ZSDOS is a replacement for the BDOS portion of the CP/M 2.2 operating system. Since it does not include it's own command processor, the the ZCPR D&J Command Processor has been included. -The primary documentation for ZSDOS and ZCPR 1 are contained in the Doc +The primary documentation for ZSDOS and ZCPR 1 are contained in the Doc/CPM directory of the RomWBW distribution. The specific files are "ZSDOS Manual.pdf", "ZCPR Manual.pdf", and "ZCPR-DJ.doc". This document is a supplement to the primary documentation. @@ -141,7 +141,7 @@ distribution as possible. == ZSDOS 1.1 Files == The following files came from the official ZSDOS distribution. These -are generally documented in the "ZSDOS Manual.pdf" document in the Doc +are generally documented in the "ZSDOS Manual.pdf" document in the Doc/CPM directory of the RomWBW distribution. Note that some of the files included in the ZSDOS distribution are not listed below because they have been superseded by more recent versions listed in other sections @@ -192,7 +192,7 @@ The following files have been included from CP/M 2.2. These files provide various functionality that is not really available from the ZSDOS applications themselves. For example, the CP/M 2.2 application called STAT is useful for modifying the IOBYTE. Most of these -applications are documented in the "CPM Manual.pdf" document in the Doc +applications are documented in the "CPM Manual.pdf" document in the Doc/CPM directory of the RomWBW distribution. ASM.COM - DRI 8080 assembler producing Intel hex files @@ -275,7 +275,7 @@ LBREXT.COM - Extract file from .LBR libraries LBREXT36.CFG - ZCNFG configuration file for LBREXT ZXD.COM - Enhanced directory lister w/ date/time stamp support ZXD.CFG - ZCNFG configuration file for ZXD -BBCBASIC.COM - BBC BASIC CP/M Version 3.00 by R.T.Russell +BBCBASIC.COM - BBC BASIC CP/M Version by R.T.Russell BBCBASIC.TXT - Help file for BBC BASIC GENHEX.COM - Generates an Intel Hex file from the input file LS.COM - An alternative file listing to DIR @@ -304,4 +304,4 @@ in this user area for more information. N.B., at a minimum, some of the files in this user area must be copied to user area 0 for CP/NET to work properly. --- WBW 3:20 PM 8/27/2021 \ No newline at end of file +-- WBW 3:20 PM 8/27/2021 diff --git a/Source/ZSDOS/Distribution/-README.0 b/Source/Images/d_zsdos/u0/-README.0 similarity index 100% rename from Source/ZSDOS/Distribution/-README.0 rename to Source/Images/d_zsdos/u0/-README.0 diff --git a/Source/Images/d_zsdos/u0/COPY.CFG b/Source/Images/d_zsdos/u0/COPY.CFG deleted file mode 100644 index e55fcebf..00000000 Binary files a/Source/Images/d_zsdos/u0/COPY.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/LICENSE.TXT b/Source/Images/d_zsdos/u0/LICENSE.TXT similarity index 100% rename from Source/ZSDOS/Distribution/LICENSE.TXT rename to Source/Images/d_zsdos/u0/LICENSE.TXT diff --git a/Source/ZSDOS/Distribution/README.1ST b/Source/Images/d_zsdos/u0/README.1ST similarity index 100% rename from Source/ZSDOS/Distribution/README.1ST rename to Source/Images/d_zsdos/u0/README.1ST diff --git a/Source/Images/d_zsdos/u0/ZCNFG24.CFG b/Source/Images/d_zsdos/u0/ZCNFG24.CFG deleted file mode 100644 index 1bfe49bf..00000000 Binary files a/Source/Images/d_zsdos/u0/ZCNFG24.CFG and /dev/null differ diff --git a/Source/Images/fd_aztecc.txt b/Source/Images/fd_aztecc.txt new file mode 100644 index 00000000..7192617c --- /dev/null +++ b/Source/Images/fd_aztecc.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_aztecc/ReadMe.txt 0: diff --git a/Source/Images/fd_bascomp.txt b/Source/Images/fd_bascomp.txt new file mode 100644 index 00000000..950aa805 --- /dev/null +++ b/Source/Images/fd_bascomp.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_bascomp/ReadMe.txt 0: diff --git a/Source/Images/fd_bp.txt b/Source/Images/fd_bp.txt index 0fbfb8d0..dad5bc77 100644 --- a/Source/Images/fd_bp.txt +++ b/Source/Images/fd_bp.txt @@ -11,7 +11,10 @@ # #../../Binary/Apps/*.com 15: ../../Binary/Apps/assign.com 15: +#../../Binary/Apps/bbcbasic.com 15: +#../../Binary/Apps/bbcbasic.txt 15: ../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: ../../Binary/Apps/fat.com 15: ../../Binary/Apps/fdu.com 15: ../../Binary/Apps/fdu.doc 15: @@ -36,18 +39,13 @@ ../../Binary/Apps/zmconfig.ovr 15: ../../Binary/Apps/zmd.com 15: ../../Binary/Apps/vgmplay.com 15: - -# Add Tune sample files -# -../../Binary/Apps/Tunes/*.pt? 3: -../../Binary/Apps/Tunes/*.mym 3: -../../Binary/Apps/Tunes/*.vgm 3: # # Add Common Applications # -Common/All/*.* 15: +Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: Common/CPM22/*.* 15: -#Common/Z/u10/*.* 10: Common/Z/u14/*.* 14: Common/Z/u15/*.* 15: Common/Z3/u10/*.* 10: diff --git a/Source/Images/fd_cowgol.txt b/Source/Images/fd_cowgol.txt new file mode 100644 index 00000000..d90c4bdd --- /dev/null +++ b/Source/Images/fd_cowgol.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_cowgol/ReadMe.txt 0: diff --git a/Source/Images/fd_cpm22.txt b/Source/Images/fd_cpm22.txt index e83c35b3..bd240422 100644 --- a/Source/Images/fd_cpm22.txt +++ b/Source/Images/fd_cpm22.txt @@ -8,6 +8,7 @@ d_cpm22/ReadMe.txt 0: #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -33,17 +34,13 @@ d_cpm22/ReadMe.txt 0: ../../Binary/Apps/zmd.com 0: ../../Binary/Apps/vgmplay.com 0: # -# Add Tune sample files -# -../../Binary/Apps/Tunes/*.pt? 3: -../../Binary/Apps/Tunes/*.mym 3: -../../Binary/Apps/Tunes/*.vgm 3: -# # Add OS image # ../CPM22/cpm_wbw.sys 0:cpm.sys # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: diff --git a/Source/Images/fd_cpm3.txt b/Source/Images/fd_cpm3.txt index d932c40f..9131bf5b 100644 --- a/Source/Images/fd_cpm3.txt +++ b/Source/Images/fd_cpm3.txt @@ -1,4 +1,8 @@ # +# Add the ReadMe document +# +d_cpm3/ReadMe.txt 0: +# # Add files from CPM3 build # ../CPM3/cpmldr.com 0: @@ -16,7 +20,6 @@ ../CPM3/cpm3bnk.sys 0: ../CPM3/gencpm.dat 0: ../CPM3/cpm3.sys 0: -../CPM3/readme.1st 0: ../CPM3/cpm3fix.pat 0: # # Add RomWBW utilities @@ -24,6 +27,7 @@ #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -51,5 +55,7 @@ # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM3/*.* 0: diff --git a/Source/Images/fd_fortran.txt b/Source/Images/fd_fortran.txt new file mode 100644 index 00000000..2bda53c7 --- /dev/null +++ b/Source/Images/fd_fortran.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_fortran/ReadMe.txt 0: diff --git a/Source/Images/fd_games.txt b/Source/Images/fd_games.txt new file mode 100644 index 00000000..f4495305 --- /dev/null +++ b/Source/Images/fd_games.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_games/ReadMe.txt 0: diff --git a/Source/Images/fd_hitechc.txt b/Source/Images/fd_hitechc.txt new file mode 100644 index 00000000..b20cdc4a --- /dev/null +++ b/Source/Images/fd_hitechc.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_hitechc/ReadMe.txt 0: diff --git a/Source/Images/fd_nzcom.txt b/Source/Images/fd_nzcom.txt index 140cdd32..f80cc0d5 100644 --- a/Source/Images/fd_nzcom.txt +++ b/Source/Images/fd_nzcom.txt @@ -3,25 +3,28 @@ # d_nzcom/ReadMe.txt 0: # -# Include selected CP/M 2.2 files +# Include CP/M 2.2 files # -d_cpm22/u0/STAT.COM 0: d_cpm22/u0/SUBMIT.COM 0: -d_cpm22/u0/XSUB.COM 0: +d_cpm22/u0/*.* 15: # # Add RomWBW utilities # -#../../Binary/Apps/*.com 0: -../../Binary/Apps/assign.com 0: -../../Binary/Apps/cpuspd.com 0: -../../Binary/Apps/fat.com 0: -../../Binary/Apps/fdu.com 0: -../../Binary/Apps/rtc.com 0: -../../Binary/Apps/syscopy.com 0: -../../Binary/Apps/talk.com 0: -../../Binary/Apps/htalk.com 0: -../../Binary/Apps/timer.com 0: -../../Binary/Apps/xm.com 0: +#../../Binary/Apps/*.com 15: +../../Binary/Apps/assign.com 15: +../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/fat.com 15: +../../Binary/Apps/fdu.com 15: +#../../Binary/Apps/fdu.doc 15: +#../../Binary/Apps/mode.com 15: +../../Binary/Apps/rtc.com 15: +#../../Binary/Apps/survey.com 15: +../../Binary/Apps/syscopy.com 15: +../../Binary/Apps/talk.com 15: +../../Binary/Apps/htalk.com 15: +../../Binary/Apps/timer.com 15: +../../Binary/Apps/xm.com 15: # # Add OS images # @@ -29,11 +32,12 @@ d_cpm22/u0/XSUB.COM 0: # # Add Common Applications # -Common/All/*.* 0: -Common/CPM22/*.* 0: -#Common/Z/u10/*.* 0: -Common/Z/u14/*.* 0: -Common/Z/u15/*.* 0: -Common/Z3/u10/*.* 0: -Common/Z3/u14/*.* 0: -Common/Z3/u15/*.* 0: +# Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: +Common/CPM22/*.* 15: +Common/Z/u14/*.* 14: +Common/Z/u15/*.* 15: +Common/Z3/u10/*.* 10: +Common/Z3/u14/*.* 14: +Common/Z3/u15/*.* 15: diff --git a/Source/Images/fd_qpm.txt b/Source/Images/fd_qpm.txt index 6aeaae6a..067675a9 100644 --- a/Source/Images/fd_qpm.txt +++ b/Source/Images/fd_qpm.txt @@ -12,6 +12,7 @@ d_cpm22/u0/*.* 0: #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -37,17 +38,13 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/zmd.com 0: ../../Binary/Apps/vgmplay.com 0: # -# Add Tune sample files -# -../../Binary/Apps/Tunes/*.pt? 3: -../../Binary/Apps/Tunes/*.mym 3: -../../Binary/Apps/Tunes/*.vgm 3: -# # Add OS image # ../QPM/qpm_wbw.sys 0:qpm.sys # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: diff --git a/Source/Images/fd_tpascal.txt b/Source/Images/fd_tpascal.txt new file mode 100644 index 00000000..951e7dd4 --- /dev/null +++ b/Source/Images/fd_tpascal.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_tpascal/ReadMe.txt 0: diff --git a/Source/Images/fd_z3plus.txt b/Source/Images/fd_z3plus.txt new file mode 100644 index 00000000..f8445693 --- /dev/null +++ b/Source/Images/fd_z3plus.txt @@ -0,0 +1,63 @@ +# +# Add the ReadMe document +# +d_z3plus/ReadMe.txt 0: +# +# Add files from CPM3 build +# +../CPM3/cpmldr.com 0: +../CPM3/cpmldr.sys 0: +../CPM3/ccp.com 0: +../CPM3/gencpm.com 0: +../CPM3/genres.dat 0: +../CPM3/genbnk.dat 0: +../CPM3/bios3.spr 0: +../CPM3/bnkbios3.spr 0: +../CPM3/bdos3.spr 0: +../CPM3/bnkbdos3.spr 0: +../CPM3/resbdos3.spr 0: +../CPM3/cpm3res.sys 0: +../CPM3/cpm3bnk.sys 0: +../CPM3/gencpm.dat 0: +../CPM3/cpm3.sys 0: +../CPM3/readme.1st 0: +../CPM3/cpm3fix.pat 0: +# +# Include CP/M 3 files +# +d_cpm3/u0/*.COM 15: +d_cpm3/u0/SUBMIT.COM 0: +d_cpm3/u0/HELP.HLP 0: +# +# Add RomWBW utilities +# +../../Binary/Apps/assign.com 15: +../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/fat.com 15: +../../Binary/Apps/fdu.com 15: +../../Binary/Apps/mode.com 15: +../../Binary/Apps/rtc.com 15: +../../Binary/Apps/survey.com 15: +../../Binary/Apps/syscopy.com 15: +../../Binary/Apps/sysgen.com 15: +../../Binary/Apps/timer.com 15: +../../Binary/Apps/xm.com 15: +# +# Add Shared NZCOM/Z3PLUS +# +Common/NZ3PLUS/u10/*.* 10: +Common/NZ3PLUS/u14/*.* 14: +Common/NZ3PLUS/u15/*.* 15: +# +# Add Common Applications +# +# Common/All/u10/*.* 10: +# Common/All/u14/*.* 14: +# Common/All/u15/*.* 15: +Common/CPM3/*.* 15: +Common/Z/u14/*.* 14: +Common/Z/u15/*.* 15: +# Common/Z3/u10/*.* 10: +Common/Z3/u14/*.* 14: +Common/Z3/u15/*.* 15: diff --git a/Source/Images/fd_z80asm.txt b/Source/Images/fd_z80asm.txt new file mode 100644 index 00000000..9a42beca --- /dev/null +++ b/Source/Images/fd_z80asm.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_z80asm/ReadMe.txt 0: diff --git a/Source/Images/fd_zpm3.txt b/Source/Images/fd_zpm3.txt index efc30026..f91170d8 100644 --- a/Source/Images/fd_zpm3.txt +++ b/Source/Images/fd_zpm3.txt @@ -1,10 +1,15 @@ # +# Add the ReadMe document +# +d_zpm3/ReadMe.txt 0: +# # Add files from ZPM3 build # ../ZPM3/zpmldr.com 0: ../ZPM3/zpmldr.sys 0: -../CPM3/cpmldr.com 0: -../CPM3/cpmldr.sys 0: +# Failsafe CPM3 Loaders removed for now +#../CPM3/cpmldr.com 0: +#../CPM3/cpmldr.sys 0: ../ZPM3/autotog.com 15: ../ZPM3/clrhist.com 15: ../ZPM3/setz3.com 15: @@ -18,11 +23,17 @@ ../ZPM3/bnkbdos3.spr 0: ../ZPM3/resbdos3.spr 0: # +# Include CP/M 3 files +# +d_cpm3/u0/*.COM 15: +d_cpm3/u0/HELP.HLP 0: +# # Add RomWBW utilities # #../../Binary/Apps/*.com 15: ../../Binary/Apps/assign.com 15: ../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: ../../Binary/Apps/fat.com 15: ../../Binary/Apps/fdu.com 15: #../../Binary/Apps/fdu.doc 15: @@ -31,7 +42,7 @@ ../../Binary/Apps/survey.com 15: ../../Binary/Apps/syscopy.com 15: ../../Binary/Apps/sysgen.com 15: -../../Binary/Apps/talk.com 15: +#../../Binary/Apps/talk.com 15: #../../Binary/Apps/htalk.com 15: #../../Binary/Apps/tbasic.com 15: ../../Binary/Apps/timer.com 15: @@ -40,9 +51,10 @@ # # Add Common Applications # -Common/All/*.* 15: +# Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: Common/CPM3/*.* 15: -#Common/Z/u10/*.* 10: Common/Z/u14/*.* 14: Common/Z/u15/*.* 15: Common/Z3/u10/*.* 10: diff --git a/Source/Images/fd_zsdos.txt b/Source/Images/fd_zsdos.txt index 42af49e3..c673821d 100644 --- a/Source/Images/fd_zsdos.txt +++ b/Source/Images/fd_zsdos.txt @@ -3,24 +3,16 @@ # d_zsdos/ReadMe.txt 0: # -# Include selected CP/M 2.2 files +# Include CP/M 2.2 files # -d_cpm22/u0/ASM.COM 0: -d_cpm22/u0/LIB.COM 0: -d_cpm22/u0/LINK.COM 0: -d_cpm22/u0/LOAD.COM 0: -d_cpm22/u0/MAC.COM 0: -#d_cpm22/u0/PIP.COM 0: ??? -d_cpm22/u0/RMAC.COM 0: -d_cpm22/u0/STAT.COM 0: -d_cpm22/u0/SUBMIT.COM 0: -d_cpm22/u0/XSUB.COM 0: +d_cpm22/u0/*.* 0: # # Add RomWBW utilities # #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -46,20 +38,15 @@ d_cpm22/u0/XSUB.COM 0: ../../Binary/Apps/zmd.com 0: ../../Binary/Apps/vgmplay.com 0: # -# Add Tune sample files -# -../../Binary/Apps/Tunes/*.pt? 3: -#../../Binary/Apps/Tunes/*.mym 3: -../../Binary/Apps/Tunes/*.vgm 3: -# # Add OS image # ../ZSDOS/zsys_wbw.sys 0:zsys.sys # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: -#Common/Z/u10/*.* 0: Common/Z/u14/*.* 0: Common/Z/u15/*.* 0: diff --git a/Source/Images/hd_aztecc.txt b/Source/Images/hd_aztecc.txt new file mode 100644 index 00000000..7192617c --- /dev/null +++ b/Source/Images/hd_aztecc.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_aztecc/ReadMe.txt 0: diff --git a/Source/Images/hd_bascomp.txt b/Source/Images/hd_bascomp.txt new file mode 100644 index 00000000..950aa805 --- /dev/null +++ b/Source/Images/hd_bascomp.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_bascomp/ReadMe.txt 0: diff --git a/Source/Images/hd_bp.txt b/Source/Images/hd_bp.txt index e551906a..0db9f373 100644 --- a/Source/Images/hd_bp.txt +++ b/Source/Images/hd_bp.txt @@ -11,14 +11,20 @@ # #../../Binary/Apps/*.com 15: ../../Binary/Apps/assign.com 15: +../../Binary/Apps/bbcbasic.com 15: +../../Binary/Apps/bbcbasic.txt 10: ../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/copysl.com 15: +../../Binary/Apps/copysl.doc 10: ../../Binary/Apps/fat.com 15: ../../Binary/Apps/fdu.com 15: -../../Binary/Apps/fdu.doc 15: +../../Binary/Apps/fdu.doc 10: ../../Binary/Apps/format.com 15: ../../Binary/Apps/mode.com 15: ../../Binary/Apps/rtc.com 15: ../../Binary/Apps/survey.com 15: +../../Binary/Apps/sysconfig.com 15: ../../Binary/Apps/syscopy.com 15: ../../Binary/Apps/sysgen.com 15: ../../Binary/Apps/talk.com 15: @@ -29,7 +35,7 @@ ../../Binary/Apps/xm.com 15: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: -../../Binary/Apps/zmp.doc 15: +../../Binary/Apps/zmp.doc 10: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: @@ -38,7 +44,8 @@ ../../Binary/Apps/vgmplay.com 15: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -48,13 +55,13 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 15: +Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: Common/CPM22/*.* 15: -#Common/Z/u10/*.* 10: Common/Z/u14/*.* 14: Common/Z/u15/*.* 15: Common/Z3/u10/*.* 10: Common/Z3/u14/*.* 14: Common/Z3/u15/*.* 15: Common/SIMH/*.* 13: -Common/UTILS/*.* 15: diff --git a/Source/Images/hd_cowgol.txt b/Source/Images/hd_cowgol.txt new file mode 100644 index 00000000..d90c4bdd --- /dev/null +++ b/Source/Images/hd_cowgol.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_cowgol/ReadMe.txt 0: diff --git a/Source/Images/hd_cpm22.txt b/Source/Images/hd_cpm22.txt index 22f43a66..cacbf227 100644 --- a/Source/Images/hd_cpm22.txt +++ b/Source/Images/hd_cpm22.txt @@ -7,7 +7,12 @@ d_cpm22/ReadMe.txt 0: # #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: +../../Binary/Apps/bbcbasic.com 0: +../../Binary/Apps/bbcbasic.txt 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: +../../Binary/Apps/copysl.com 0: +../../Binary/Apps/copysl.doc 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -15,6 +20,7 @@ d_cpm22/ReadMe.txt 0: ../../Binary/Apps/mode.com 0: ../../Binary/Apps/rtc.com 0: ../../Binary/Apps/survey.com 0: +../../Binary/Apps/sysconfig.com 0: ../../Binary/Apps/syscopy.com 0: ../../Binary/Apps/sysgen.com 0: ../../Binary/Apps/talk.com 0: @@ -34,7 +40,8 @@ d_cpm22/ReadMe.txt 0: ../../Binary/Apps/vgmplay.com 0: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -53,7 +60,8 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Images/hd_cpm3.txt b/Source/Images/hd_cpm3.txt index 60baad02..005cf6b4 100644 --- a/Source/Images/hd_cpm3.txt +++ b/Source/Images/hd_cpm3.txt @@ -1,4 +1,8 @@ # +# Add the ReadMe document +# +d_cpm3/ReadMe.txt 0: +# # Add files from CPM3 build # ../CPM3/cpmldr.com 0: @@ -16,14 +20,18 @@ ../CPM3/cpm3bnk.sys 0: ../CPM3/gencpm.dat 0: ../CPM3/cpm3.sys 0: -../CPM3/readme.1st 0: ../CPM3/cpm3fix.pat 0: # # Add RomWBW utilities # #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: +../../Binary/Apps/bbcbasic.com 0: +../../Binary/Apps/bbcbasic.txt 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: +../../Binary/Apps/copysl.com 0: +../../Binary/Apps/copysl.doc 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -31,6 +39,7 @@ ../../Binary/Apps/mode.com 0: ../../Binary/Apps/rtc.com 0: ../../Binary/Apps/survey.com 0: +../../Binary/Apps/sysconfig.com 0: ../../Binary/Apps/syscopy.com 0: #../../Binary/Apps/sysgen.com 0: #../../Binary/Apps/talk.com 0: @@ -50,7 +59,8 @@ ../../Binary/Apps/vgmplay.com 0: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -65,7 +75,8 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM3/*.* 0: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Images/hd_fortran.txt b/Source/Images/hd_fortran.txt new file mode 100644 index 00000000..2bda53c7 --- /dev/null +++ b/Source/Images/hd_fortran.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_fortran/ReadMe.txt 0: diff --git a/Source/Images/hd_games.txt b/Source/Images/hd_games.txt new file mode 100644 index 00000000..f4495305 --- /dev/null +++ b/Source/Images/hd_games.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_games/ReadMe.txt 0: diff --git a/Source/Images/hd_hitechc.txt b/Source/Images/hd_hitechc.txt new file mode 100644 index 00000000..b20cdc4a --- /dev/null +++ b/Source/Images/hd_hitechc.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_hitechc/ReadMe.txt 0: diff --git a/Source/Images/hd_msxroms1.txt b/Source/Images/hd_msxroms1.txt new file mode 100644 index 00000000..f0966942 --- /dev/null +++ b/Source/Images/hd_msxroms1.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_msxroms1/ReadMe.txt 0: diff --git a/Source/Images/hd_msxroms2.txt b/Source/Images/hd_msxroms2.txt new file mode 100644 index 00000000..8bbd751c --- /dev/null +++ b/Source/Images/hd_msxroms2.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_msxroms2/ReadMe.txt 0: diff --git a/Source/Images/hd_nzcom.txt b/Source/Images/hd_nzcom.txt index 6305b6ca..53d826c4 100644 --- a/Source/Images/hd_nzcom.txt +++ b/Source/Images/hd_nzcom.txt @@ -3,55 +3,60 @@ # d_nzcom/ReadMe.txt 0: # -# Include selected CP/M 2.2 files -# -d_cpm22/u0/ASM.COM 0: -d_cpm22/u0/LIB.COM 0: -d_cpm22/u0/LINK.COM 0: -d_cpm22/u0/LOAD.COM 0: -d_cpm22/u0/MAC.COM 0: -#d_cpm22/u0/PIP.COM 0: ??? -d_cpm22/u0/RMAC.COM 0: -d_cpm22/u0/STAT.COM 0: +# Include CP/M 2.2 files +# d_cpm22/u0/SUBMIT.COM 0: -d_cpm22/u0/XSUB.COM 0: +d_cpm22/u0/*.* 15: # # Include ZSDOS files # -d_zsdos/u0/*.* 0: +d_zsdos/u0/*.COM 15: +d_zsdos/u0/*.CFG 14: +d_zsdos/u0/*.UPD 10: +d_zsdos/u0/*.DOC 10: +d_zsdos/u0/*.FOR 10: +d_zsdos/u0/*.TXT 10: +d_zsdos/u0/*.DAT 15: # # Add RomWBW utilities # -#../../Binary/Apps/*.com 0: -../../Binary/Apps/assign.com 0: -../../Binary/Apps/cpuspd.com 0: -../../Binary/Apps/fat.com 0: -../../Binary/Apps/fdu.com 0: -../../Binary/Apps/fdu.doc 0: -../../Binary/Apps/format.com 0: -../../Binary/Apps/mode.com 0: -../../Binary/Apps/rtc.com 0: -../../Binary/Apps/survey.com 0: -../../Binary/Apps/syscopy.com 0: -../../Binary/Apps/sysgen.com 0: -../../Binary/Apps/talk.com 0: -../../Binary/Apps/htalk.com 0: -../../Binary/Apps/tbasic.com 0: -../../Binary/Apps/timer.com 0: -../../Binary/Apps/tune.com 0: -../../Binary/Apps/xm.com 0: -../../Binary/Apps/zmp.com 0: -../../Binary/Apps/zmp.hlp 0: -../../Binary/Apps/zmp.doc 0: -../../Binary/Apps/zmxfer.ovr 0: -../../Binary/Apps/zmterm.ovr 0: -../../Binary/Apps/zminit.ovr 0: -../../Binary/Apps/zmconfig.ovr 0: -../../Binary/Apps/zmd.com 0: -../../Binary/Apps/vgmplay.com 0: +#../../Binary/Apps/*.com 15: +../../Binary/Apps/assign.com 15: +../../Binary/Apps/bbcbasic.com 15: +../../Binary/Apps/bbcbasic.txt 10: +../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/copysl.com 15: +../../Binary/Apps/copysl.doc 10: +../../Binary/Apps/fat.com 15: +../../Binary/Apps/fdu.com 15: +../../Binary/Apps/fdu.doc 10: +../../Binary/Apps/format.com 15: +../../Binary/Apps/mode.com 15: +../../Binary/Apps/rtc.com 15: +../../Binary/Apps/survey.com 15: +../../Binary/Apps/sysconfig.com 15: +../../Binary/Apps/syscopy.com 15: +../../Binary/Apps/sysgen.com 15: +../../Binary/Apps/talk.com 15: +../../Binary/Apps/htalk.com 15: +../../Binary/Apps/tbasic.com 15: +../../Binary/Apps/timer.com 15: +../../Binary/Apps/tune.com 15: +../../Binary/Apps/xm.com 15: +../../Binary/Apps/zmp.com 15: +../../Binary/Apps/zmp.hlp 15: +../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmxfer.ovr 15: +../../Binary/Apps/zmterm.ovr 15: +../../Binary/Apps/zminit.ovr 15: +../../Binary/Apps/zmconfig.ovr 15: +../../Binary/Apps/zmd.com 15: +../../Binary/Apps/vgmplay.com 15: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -63,15 +68,21 @@ Test/*.* 2: # ../ZSDOS/zsys_wbw.sys 0:zsys.sys # +# Add Shared NZCOM/Z3PLUS +# +Common/NZ3PLUS/u10/*.* 10: +Common/NZ3PLUS/u14/*.* 14: +Common/NZ3PLUS/u15/*.* 15: +# # Add Common Applications # -Common/All/*.* 0: -Common/CPM22/*.* 0: -#Common/Z/u10/*.* 0: -Common/Z/u14/*.* 0: -Common/Z/u15/*.* 0: -Common/Z3/u10/*.* 0: -Common/Z3/u14/*.* 0: -Common/Z3/u15/*.* 0: +Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: +Common/CPM22/*.* 15: +Common/Z/u14/*.* 14: +Common/Z/u15/*.* 15: +Common/Z3/u10/*.* 10: +Common/Z3/u14/*.* 14: +Common/Z3/u15/*.* 15: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Images/hd_qpm.txt b/Source/Images/hd_qpm.txt index 90fbce7c..436941b4 100644 --- a/Source/Images/hd_qpm.txt +++ b/Source/Images/hd_qpm.txt @@ -11,7 +11,12 @@ d_cpm22/u0/*.* 0: # #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: +../../Binary/Apps/bbcbasic.com 0: +../../Binary/Apps/bbcbasic.txt 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: +../../Binary/Apps/copysl.com 0: +../../Binary/Apps/copysl.doc 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -19,6 +24,7 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/mode.com 0: ../../Binary/Apps/rtc.com 0: ../../Binary/Apps/survey.com 0: +../../Binary/Apps/sysconfig.com 0: ../../Binary/Apps/syscopy.com 0: ../../Binary/Apps/sysgen.com 0: ../../Binary/Apps/talk.com 0: @@ -38,7 +44,8 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/vgmplay.com 0: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -52,7 +59,8 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Images/hd_tpascal.txt b/Source/Images/hd_tpascal.txt new file mode 100644 index 00000000..951e7dd4 --- /dev/null +++ b/Source/Images/hd_tpascal.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_tpascal/ReadMe.txt 0: diff --git a/Source/Images/hd_z3plus.txt b/Source/Images/hd_z3plus.txt new file mode 100644 index 00000000..879219e2 --- /dev/null +++ b/Source/Images/hd_z3plus.txt @@ -0,0 +1,100 @@ +# +# Add the ReadMe document +# +d_z3plus/ReadMe.txt 0: +# +# Add files from CPM3 build +# +../CPM3/cpmldr.com 0: +../CPM3/cpmldr.sys 0: +../CPM3/ccp.com 0: +../CPM3/gencpm.com 0: +../CPM3/genres.dat 0: +../CPM3/genbnk.dat 0: +../CPM3/bios3.spr 0: +../CPM3/bnkbios3.spr 0: +../CPM3/bdos3.spr 0: +../CPM3/bnkbdos3.spr 0: +../CPM3/resbdos3.spr 0: +../CPM3/cpm3res.sys 0: +../CPM3/cpm3bnk.sys 0: +../CPM3/gencpm.dat 0: +../CPM3/cpm3.sys 0: +../CPM3/readme.1st 0: +../CPM3/cpm3fix.pat 0: +# +# Include CP/M 3 files +# +d_cpm3/u0/*.COM 15: +d_cpm3/u0/SUBMIT.COM 0: +d_cpm3/u0/HELP.HLP 0: +# +# Add RomWBW utilities +# +#../../Binary/Apps/*.com 15: +../../Binary/Apps/assign.com 15: +../../Binary/Apps/bbcbasic.com 15: +../../Binary/Apps/bbcbasic.txt 10: +../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/copysl.com 15: +../../Binary/Apps/copysl.doc 10: +../../Binary/Apps/fat.com 15: +../../Binary/Apps/fdu.com 15: +../../Binary/Apps/fdu.doc 10: +../../Binary/Apps/format.com 15: +../../Binary/Apps/mode.com 15: +../../Binary/Apps/rtc.com 15: +../../Binary/Apps/survey.com 15: +../../Binary/Apps/sysconfig.com 15: +../../Binary/Apps/syscopy.com 15: +../../Binary/Apps/sysgen.com 15: +../../Binary/Apps/talk.com 15: +../../Binary/Apps/htalk.com 15: +../../Binary/Apps/tbasic.com 15: +../../Binary/Apps/timer.com 15: +../../Binary/Apps/tune.com 15: +../../Binary/Apps/xm.com 15: +../../Binary/Apps/zmp.com 15: +../../Binary/Apps/zmp.hlp 15: +../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmxfer.ovr 15: +../../Binary/Apps/zmterm.ovr 15: +../../Binary/Apps/zminit.ovr 15: +../../Binary/Apps/zmconfig.ovr 15: +../../Binary/Apps/zmd.com 15: +../../Binary/Apps/vgmplay.com 15: +# +../../Binary/Apps/Test/*.com 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: +# +# Add Tune sample files +# +../../Binary/Apps/Tunes/*.pt? 3: +../../Binary/Apps/Tunes/*.mym 3: +../../Binary/Apps/Tunes/*.vgm 3: +# +# Add CPNET client files +# +../../Binary/CPNET/cpn3*.lbr 4: +../../Binary/CPNET/ReadMe.txt 4: +# +# Add Shared NZCOM/Z3PLUS +# +Common/NZ3PLUS/u10/*.* 10: +Common/NZ3PLUS/u14/*.* 14: +Common/NZ3PLUS/u15/*.* 15: +# +# Add Common Applications +# +Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: +Common/CPM3/*.* 15: +Common/Z/u14/*.* 14: +Common/Z/u15/*.* 15: +Common/Z3/u10/*.* 10: +Common/Z3/u14/*.* 14: +Common/Z3/u15/*.* 15: +Common/SIMH/*.* 13: diff --git a/Source/Images/hd_z80asm.txt b/Source/Images/hd_z80asm.txt new file mode 100644 index 00000000..9a42beca --- /dev/null +++ b/Source/Images/hd_z80asm.txt @@ -0,0 +1,4 @@ +# +# Add the ReadMe document +# +d_z80asm/ReadMe.txt 0: diff --git a/Source/Images/hd_zpm3.txt b/Source/Images/hd_zpm3.txt index 1417a6fc..28009fd0 100644 --- a/Source/Images/hd_zpm3.txt +++ b/Source/Images/hd_zpm3.txt @@ -1,10 +1,15 @@ # +# Add the ReadMe document +# +d_zpm3/ReadMe.txt 0: +# # Add files from ZPM3 build # ../ZPM3/zpmldr.com 0: ../ZPM3/zpmldr.sys 0: -../CPM3/cpmldr.com 0: -../CPM3/cpmldr.sys 0: +# Failsafe CPM3 Loaders removed for now +#../CPM3/cpmldr.com 0: +#../CPM3/cpmldr.sys 0: ../ZPM3/autotog.com 15: ../ZPM3/clrhist.com 15: ../ZPM3/setz3.com 15: @@ -18,18 +23,29 @@ ../ZPM3/bnkbdos3.spr 0: ../ZPM3/resbdos3.spr 0: # +# Include CP/M 3 files +# +d_cpm3/u0/*.COM 15: +d_cpm3/u0/HELP.HLP 0: +# # Add RomWBW utilities # #../../Binary/Apps/*.com 15: ../../Binary/Apps/assign.com 15: +../../Binary/Apps/bbcbasic.com 15: +../../Binary/Apps/bbcbasic.txt 10: ../../Binary/Apps/cpuspd.com 15: +../../Binary/Apps/reboot.com 15: +../../Binary/Apps/copysl.com 15: +../../Binary/Apps/copysl.doc 10: ../../Binary/Apps/fat.com 15: ../../Binary/Apps/fdu.com 15: -../../Binary/Apps/fdu.doc 15: +../../Binary/Apps/fdu.doc 10: ../../Binary/Apps/format.com 15: ../../Binary/Apps/mode.com 15: ../../Binary/Apps/rtc.com 15: ../../Binary/Apps/survey.com 15: +../../Binary/Apps/sysconfig.com 15: ../../Binary/Apps/syscopy.com 15: ../../Binary/Apps/sysgen.com 15: ../../Binary/Apps/talk.com 15: @@ -40,7 +56,7 @@ ../../Binary/Apps/xm.com 15: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: -../../Binary/Apps/zmp.doc 15: +../../Binary/Apps/zmp.doc 10: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: @@ -49,7 +65,8 @@ ../../Binary/Apps/vgmplay.com 15: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -59,13 +76,13 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 15: +Common/All/u10/*.* 10: +Common/All/u14/*.* 14: +Common/All/u15/*.* 15: Common/CPM3/*.* 15: -#Common/Z/u10/*.* 10: Common/Z/u14/*.* 14: Common/Z/u15/*.* 15: Common/Z3/u10/*.* 10: Common/Z3/u14/*.* 14: Common/Z3/u15/*.* 15: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Images/hd_zsdos.txt b/Source/Images/hd_zsdos.txt index 2a2ddea2..d2c389ea 100644 --- a/Source/Images/hd_zsdos.txt +++ b/Source/Images/hd_zsdos.txt @@ -3,24 +3,20 @@ # d_zsdos/ReadMe.txt 0: # -# Include selected CP/M 2.2 files +# Include CP/M 2.2 files # -d_cpm22/u0/ASM.COM 0: -d_cpm22/u0/LIB.COM 0: -d_cpm22/u0/LINK.COM 0: -d_cpm22/u0/LOAD.COM 0: -d_cpm22/u0/MAC.COM 0: -#d_cpm22/u0/PIP.COM 0: ??? -d_cpm22/u0/RMAC.COM 0: -d_cpm22/u0/STAT.COM 0: -d_cpm22/u0/SUBMIT.COM 0: -d_cpm22/u0/XSUB.COM 0: +d_cpm22/u0/*.* 0: # # Add RomWBW utilities # #../../Binary/Apps/*.com 0: ../../Binary/Apps/assign.com 0: +../../Binary/Apps/bbcbasic.com 0: +../../Binary/Apps/bbcbasic.txt 0: ../../Binary/Apps/cpuspd.com 0: +../../Binary/Apps/reboot.com 0: +../../Binary/Apps/copysl.com 0: +../../Binary/Apps/copysl.doc 0: ../../Binary/Apps/fat.com 0: ../../Binary/Apps/fdu.com 0: ../../Binary/Apps/fdu.doc 0: @@ -28,6 +24,7 @@ d_cpm22/u0/XSUB.COM 0: ../../Binary/Apps/mode.com 0: ../../Binary/Apps/rtc.com 0: ../../Binary/Apps/survey.com 0: +../../Binary/Apps/sysconfig.com 0: ../../Binary/Apps/syscopy.com 0: ../../Binary/Apps/sysgen.com 0: ../../Binary/Apps/talk.com 0: @@ -47,7 +44,8 @@ d_cpm22/u0/XSUB.COM 0: ../../Binary/Apps/vgmplay.com 0: # ../../Binary/Apps/Test/*.com 2: -Test/*.* 2: +../../Binary/Apps/Test/*.doc 2: +Common/Test/*.* 2: # # Add Tune sample files # @@ -61,10 +59,10 @@ Test/*.* 2: # # Add Common Applications # -Common/All/*.* 0: +Common/All/u10/*.* 0: +Common/All/u14/*.* 0: +Common/All/u15/*.* 0: Common/CPM22/*.* 0: -#Common/Z/u10/*.* 0: Common/Z/u14/*.* 0: Common/Z/u15/*.* 0: Common/SIMH/*.* 13: -Common/UTILS/*.* 0: diff --git a/Source/Makefile b/Source/Makefile index ea0bd77f..012b6cf2 100644 --- a/Source/Makefile +++ b/Source/Makefile @@ -2,12 +2,12 @@ # order is actually important, because of build dependencies # -.PHONY: doc prop shared bp images rom zrc z1rcc zzrcc zrc512 +.PHONY: doc prop shared bp images rom zrc z1rcc zzrcc zrc512 fz80 .ONESHELL: -.SHELLFLAGS = -cex +.SHELLFLAGS = -ce -all: prop shared bp images rom zrc z1rcc zzrcc zrc512 +all: prop shared bp rom images zrc z1rcc zzrcc zrc512 fz80 doc: $(MAKE) --directory Doc $(ACTION) @@ -40,7 +40,7 @@ images: $(MAKE) --directory Images $(ACTION) rom: - $(MAKE) --directory HBIOS $(ACTION) + @$(MAKE) --directory HBIOS $(ACTION) zrc: $(MAKE) --directory ZRC $(ACTION) @@ -54,6 +54,9 @@ zzrcc: zrc512: $(MAKE) --directory ZRC512 $(ACTION) +fz80: + $(MAKE) --directory FZ80 $(ACTION) + clean: ACTION=clean clean: all diff --git a/Source/QPM/Build.cmd b/Source/QPM/Build.cmd index c8a3955c..06fbe9d9 100644 --- a/Source/QPM/Build.cmd +++ b/Source/QPM/Build.cmd @@ -17,4 +17,8 @@ copy /b qcp27.dat + qdos27.dat + ..\cbios\cbios_una.bin qpm_una.bin || exit /b copy /b loader.bin + qpm_wbw.bin qpm_wbw.sys || exit /b copy /b loader.bin + qpm_una.bin qpm_una.sys || exit /b +rem Copy OS files to Binary directory +copy qpm_wbw.sys ..\..\Binary\QPM || exit /b +copy qpm_una.sys ..\..\Binary\QPM || exit /b + goto :eof diff --git a/Source/QPM/Makefile b/Source/QPM/Makefile index 30c414eb..d951500e 100644 --- a/Source/QPM/Makefile +++ b/Source/QPM/Makefile @@ -2,14 +2,16 @@ SYSFILES = qpm_wbw.sys qpm_una.sys BINFILES = qpm_wbw.bin qpm_una.bin OBJECTS = loader.bin $(SYSFILES) $(BINFILES) OTHERS = *.hex +NOCOPY = qpm_wbw.bin qpm_una.bin loader.bin loader.lst +DEST = ../../Binary/QPM TOOLS = ../../Tools include $(TOOLS)/Makefile.inc -%.sys: %.bin loader.bin - cat loader.bin $*.bin > $@ +%.sys: %.bin loader.bin + cat loader.bin $*.bin > $@ qpm_una.bin: qcp27.dat qdos27.dat ../CBIOS/cbios_una.bin cat qcp27.dat qdos27.dat ../CBIOS/cbios_una.bin > $@ - + qpm_wbw.bin: qcp27.dat qdos27.dat ../CBIOS/cbios_wbw.bin cat qcp27.dat qdos27.dat ../CBIOS/cbios_wbw.bin > $@ diff --git a/Source/ReadMe.txt b/Source/ReadMe.txt index 2fe241d8..917092db 100644 --- a/Source/ReadMe.txt +++ b/Source/ReadMe.txt @@ -45,9 +45,33 @@ process. These scripts utilize both batch command files as well as Windows PowerShell. Windows 7 or greater is recommended. If you want to use Windows Vista or XP, you will need to first install PowerShell which available for free from Microsoft. Either 32 or 64 bit versions -of Microsoft Windows are fine.No additional programs need to be +of Microsoft Windows are fine. No additional programs need to be installed to run the build. +You may find that you get messages such as this during the Windows +build process: + +Security warning +Run only scripts that you trust. While scripts from the internet can be +useful, this script can potentially harm your computer. If you trust +this script, use the Unblock-File cmdlet to allow the script to run +without this warning message. Do you want to run +C:\Temp\RomWBW-v3.5.0-dev.67-Package\Source\Images\BuildDisk.ps1? +[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D"): + +These prompts occur if Windows has marked the files as "blocked" +because they were downloaded from the Internet. To unblock all of +the files in the entire RomWBW distribution tree, start PowerShell +and navigate to the root of the distribution. Enter the following +command: + + dir -recurse | unblock-file + +This will unblock all files within the distribution and preclude the +security warning messages. Obviously, you should make sure you have +downloaded the RomWBW distribution from a valid/trustworthy source +before removing the file block protection. + Linux Build System Requirements ------------------------------- @@ -116,9 +140,33 @@ Each of the 4 steps above is described in more detail below. ----------------------------------- The options for a build are primarily controlled by a configuration -file that is included in the build process. In order to customize -your settings, it is easiest to make a copy of an existing -configuration file and make your changes there. +file that is included in the build process. + +RomWBW uses cascading configuration files as indicated below: + +cfg_MASTER.asm - MASTER: CONFIGURATION FILE DEFINES ALL POSSIBLE ROMWBW SETTINGS +| ++-> cfg_.asm - PLATFORM: DEFAULT SETTINGS FOR SPECIFIC PLATFORM + | + +-> Config/_std.asm - BUILD: SETTINGS FOR EACH OFFICIAL DIST BUILD + | + +-> Config/_.asm - USER: CUSTOM USER BUILD SETTINGS + +The top (master configuration) file defines all possible RomWBW +configuration settings. Each file below the master configuration file +inherits the cumulative settings of the files above it and may +override these settings as desired. + +Other than the top master file, each file must "#INCLUDE" its parent +file. The top two files should not be modified. To customize your +build settings you should modify the default build settings +(config/_std.asm) or preferably create an optional custom +user settings file that includes the default build settings file (see +example Config/SBC_user.asm). + +By creating a custom user settings file, you are less likely to be +impacted by future changes because you will only be inheriting most +of your settings which will be updated by authors as RomWBW evolves. RomWBW uses the concept of a "platform" and "configuration" to define the settings for a build. Platform refers to one of the core @@ -129,23 +177,29 @@ defaults as desired. The platform names are predefined. Refer to the following table to determine the component of the configuration filename: - SBC Retrocomputing ECB Z80 SBC V1/V2 - N8 RetroComputing N8 SBC - MK4 RetroComputing Mark IV Z180 - ZETA Sergey Kiselev's Zeta Z80 - ZETA2 Sergey Kiselev's Zeta V2 Z80 - RCZ80 RCBus Z80 - RCZ180 RCBus Z180 - SCZ180 Stephen Cousins' Z180 Systems - RCZ280 RCBus Z280 - EZZ80 Sergey Kiselev's Easy/Tiny Z80 - DYNO Dyno Z180 Single Board Computer - MBC Andrew Lynch's Nhyodyne Z80 MBC - RPH Andrew Lynch's Rhyophyre Z180 SBC + SBC Z80 SBC (v1 or v2) w/ ECB interface + ZETA Standalone Z80 SBC w/ SBC compatibility + ZETA2 Second version of ZETA with enhanced memory bank switching + N8 MSX-ish Z180 SBC w/ onboard video and sound + MK4 Mark IV Z180 based SBC w/ ECB interface + UNA Any Z80/Z180 computer with UNA BIOS + RCZ80 RCBUS based system with 512K banked RAM/ROM card + RCZ180 RCBUS based system with Z180 CPU + EZZ80 Easy Z80, Z80 SBC w/ RCBUS and CTC + SCZ180 Steve Cousins Z180 based system + DYNO Steve Garcia's Dyno Micro-ATX Motherboard + RCZ280 Z280 CPU on RCBUS or ZZ80MB + MBC Andrew Lynch's Multi Board Computer + RPH Andrew Lynch's RHYOPHYRE Graphics Computer Z80RETRO Peter Wilson's Z80-Retro Computer S100 S100 Computers Z180-based System DUO Andrew Lynch's Duodyne Computer - UNA John Coffman's UNA System + HEATH Les Bird's Heath Z80 Board + EPITX Alan Cox' Mini-ITX System + MON Jacques Pelletier's Monsputer + GMZ180 Doug Jacksons' Genesis Z180 System + NABU NABU w/ Les Bird's RomWBW Option Board + FZ80 S100 Computers FPGA Z80 Configuration files are found in the Source\HBIOS\Config directory. If you look in the this directory, you will see a @@ -170,14 +224,14 @@ and easily revert back to the original if you have problems. It is important to understand how configuration files are processed. They start by inheriting all of the default settings for the -platform. This is accomplished via the "#include" directive near +platform. This is accomplished via the "#INCLUDE" directive near the top of the file. For the "MK4_std.asm" configuration file, this line reads: -#include "cfg_mk4.asm" +#INCLUDE "cfg_MK4.asm" When the configuration file (MK4_std.asm) is processed, it will first -read in all the default platform settings from "cfg_mk4.asm". All of +read in all the default platform settings from "cfg_MK4.asm". All of the platform default configuration files are found in the parent directory (the HBIOS directory). You will see a "cfg_.asm" for each platform in the parent directory. diff --git a/Source/ReadMeDoc.txt b/Source/ReadMeDoc.txt index 0ca671e4..9e8ed406 100644 --- a/Source/ReadMeDoc.txt +++ b/Source/ReadMeDoc.txt @@ -22,12 +22,18 @@ Required for Windows: - MiKTeX (https://miktex.org/) - Install Roboto font from MiKTeX Console -Required for Linux: - - gpp ((apt install gpp) - - Pandoc (dpkg -i pandoc-3.1.8-1-amd64.deb) - - TexLive (apt install texlive-latex-extra texlive-luatex fonts-roboto texlive-fonts-extra) +Required for Ubuntu Linux: + - gpp (apt install gpp) + - Pandoc (apt install pandoc) + - TexLive (apt install texlive texlive-luatex texlive-fonts-extra) -The source directory for the documentation is .../Source/Doc. From this -directory run Build.cmd for Windows or make for Linux to create the -output documents. This will create the final documents and copy them -to their destination directories. \ No newline at end of file +Required for MacOS: + - gpp (brew install gpp) + - pandoc (brew install pandoc) + - TexLive (brew install texlive) + - Roboto Font (brew install --cask font-roboto) + +The source directory for the documentation is /Source/Doc. From this +directory run "Build.cmd" on Windows or "make" on Linux/Mac to create +the output documents. This will create the final documents and copy +them to their destination directories. \ No newline at end of file diff --git a/Source/RomDsk/Build.cmd b/Source/RomDsk/Build.cmd index 1d094702..9947c592 100644 --- a/Source/RomDsk/Build.cmd +++ b/Source/RomDsk/Build.cmd @@ -10,7 +10,7 @@ set TASMTABS=%TOOLS%\tasm32 set CPMDIR80=%TOOLS%/cpm/ set RomApps1=assign mode rtc syscopy xm -set RomApps2=fdu format survey sysgen talk timer cpuspd +set RomApps2=fdu format survey sysgen talk timer cpuspd reboot :: :: Make all variants of the ROM Disk contents image. Three sizes are @@ -68,4 +68,7 @@ cpmcp -f %DiskDef% %Output%.dat ..\zsdos\zsys_%Bios%.sys 0:zsys.sys || exit /b :: Mark all disk files R/O for safety cpmchattr -f %DiskDef% %Output%.dat r 0:*.* || exit /b +:: Dump directory for reference +cpmls -f %DiskDef% -D %Output%.dat >%Output%.cat + goto :eof diff --git a/Source/RomDsk/Clean.cmd b/Source/RomDsk/Clean.cmd index 0b90e072..a220b86b 100644 --- a/Source/RomDsk/Clean.cmd +++ b/Source/RomDsk/Clean.cmd @@ -2,3 +2,4 @@ setlocal if exist *.dat del *.dat +if exist *.cat del *.cat diff --git a/Source/RomDsk/Makefile b/Source/RomDsk/Makefile index 1f067db1..1066801b 100644 --- a/Source/RomDsk/Makefile +++ b/Source/RomDsk/Makefile @@ -1,5 +1,5 @@ OBJECTS = rom0_wbw.dat rom0_una.dat rom128_wbw.dat rom128_una.dat rom256_wbw.dat rom256_una.dat rom384_wbw.dat rom384_una.dat rom896_wbw.dat rom896_una.dat -OTHERS=*.dat +OTHERS=*.dat *.cat TOOLS = ../../Tools include $(TOOLS)/Makefile.inc @@ -7,7 +7,7 @@ include $(TOOLS)/Makefile.inc .SHELLFLAGS = -ce ROMAPPS1 := assign mode rtc syscopy xm -ROMAPPS2 := fdu format survey sysgen talk timer cpuspd +ROMAPPS2 := fdu format survey sysgen talk timer cpuspd reboot rom128_%.dat: DISKDEF=wbw_rom128 rom256_%.dat: DISKDEF=wbw_rom256 @@ -41,3 +41,4 @@ rom0_%.dat: $(CPMCP) -f $(DISKDEF) $@ ../CPM22/cpm_$(BIOS).sys 0:cpm.sys $(CPMCP) -f $(DISKDEF) $@ ../ZSDOS/zsys_$(BIOS).sys 0:zsys.sys $(CPMCHATTR) -f $(DISKDEF) $@ r 0:*.* + $(CPMLS) -f $(DISKDEF) -D $@ > $(@:.dat=.cat) diff --git a/Source/RomDsk/ROM_256KB/FLASH.COM b/Source/RomDsk/ROM_256KB/FLASH.COM index b14d74e3..bd5f0eeb 100644 Binary files a/Source/RomDsk/ROM_256KB/FLASH.COM and b/Source/RomDsk/ROM_256KB/FLASH.COM differ diff --git a/Source/RomDsk/ROM_384KB/FLASH.COM b/Source/RomDsk/ROM_384KB/FLASH.COM index b14d74e3..bd5f0eeb 100644 Binary files a/Source/RomDsk/ROM_384KB/FLASH.COM and b/Source/RomDsk/ROM_384KB/FLASH.COM differ diff --git a/Source/RomDsk/ROM_896KB/FLASH.COM b/Source/RomDsk/ROM_896KB/FLASH.COM index b14d74e3..bd5f0eeb 100644 Binary files a/Source/RomDsk/ROM_896KB/FLASH.COM and b/Source/RomDsk/ROM_896KB/FLASH.COM differ diff --git a/Source/RomDsk/ROM_896KB/UNUARCU10.CFG b/Source/RomDsk/ROM_896KB/UNARCU10.CFG similarity index 100% rename from Source/RomDsk/ROM_896KB/UNUARCU10.CFG rename to Source/RomDsk/ROM_896KB/UNARCU10.CFG diff --git a/Source/UBIOS/ubios.inc b/Source/UBIOS/ubios.inc index 58684c02..b906058d 100644 --- a/Source/UBIOS/ubios.inc +++ b/Source/UBIOS/ubios.inc @@ -25,3 +25,8 @@ MID_FD360 .EQU 7 MID_FD120 .EQU 8 MID_FD111 .EQU 9 MID_HDNEW .EQU 10 +; +; SECTORS PER SLICE +; +SPS_HD512 .EQU $4100 +SPS_HD1K .EQU $4000 diff --git a/Source/Z1RCC/Build.cmd b/Source/Z1RCC/Build.cmd index e7ab0eea..3e32d705 100644 --- a/Source/Z1RCC/Build.cmd +++ b/Source/Z1RCC/Build.cmd @@ -5,19 +5,22 @@ set TOOLS=../../Tools set PATH=%TOOLS%\srecord;%PATH% -if exist ..\..\Binary\RCZ180_z1rcc.rom call :build_z1rcc +for %%f in (..\..\Binary\RCZ180_z1rcc_*.rom) do call :build %%~nf goto :eof -:build_z1rcc +:build +echo. +echo Creating %1 disk image... +echo. srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 z1rcc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 z1rcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 z1rcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ180_z1rcc.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_z1rcc_prefix.dat +srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\%1.rom -binary -offset 0x24000 -o temp.dat -binary +move temp.dat ..\..\Binary\%1_hd1k_prefix.dat -copy /b ..\..\Binary\hd1k_z1rcc_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_z1rcc_combo.img || exit /b +copy /b ..\..\Binary\%1_hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\%1_hd1k_combo.img || exit /b goto :eof diff --git a/Source/Z1RCC/Makefile b/Source/Z1RCC/Makefile index 6890e0d7..eac892d6 100644 --- a/Source/Z1RCC/Makefile +++ b/Source/Z1RCC/Makefile @@ -1,16 +1,13 @@ -HD1KZ1RCCPREFIX = hd1k_z1rcc_prefix.dat -HD1KZ1RCCCOMBOIMG = hd1k_z1rcc_combo.img -Z1RCCROM = ../../Binary/RCZ180_z1rcc.rom -HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ - ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img +DEST=../../Binary -OBJECTS := +HD1KIMGS = $(DEST)/hd1k_cpm22.img $(DEST)/hd1k_zsdos.img $(DEST)/hd1k_nzcom.img \ + $(DEST)/hd1k_cpm3.img $(DEST)/hd1k_zpm3.img $(DEST)/hd1k_ws4.img -ifneq ($(wildcard $(Z1RCCROM)),) - OBJECTS += $(HD1KZ1RCCPREFIX) $(HD1KZ1RCCCOMBOIMG) -endif +ROMS := $(wildcard $(DEST)/RCZ180_z1rcc_*.rom) +ROMS := $(patsubst $(DEST)/%.rom,%,$(ROMS)) -DEST=../../Binary +OBJECTS := $(patsubst %,%_hd1k_prefix.dat,$(ROMS)) +OBJECTS += $(patsubst %,%_hd1k_combo.img,$(ROMS)) TOOLS = ../../Tools @@ -18,13 +15,13 @@ include $(TOOLS)/Makefile.inc DIFFPATH = $(DIFFTO)/Binary -$(HD1KZ1RCCPREFIX): +%_hd1k_prefix.dat: $(DEST)/%.rom srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 z1rcc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 z1rcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 z1rcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(Z1RCCROM) -binary -offset 0x24000 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $< -binary -offset 0x24000 -o temp.dat -binary mv temp.dat $@ -$(HD1KZ1RCCCOMBOIMG): $(HD1KZ1RCCPREFIX) $(HD1KIMGS) +%_hd1k_combo.img: %_hd1k_prefix.dat $(HD1KIMGS) cat $^ > $@ diff --git a/Source/ZRC/Build.cmd b/Source/ZRC/Build.cmd index 181db8ab..65a188aa 100644 --- a/Source/ZRC/Build.cmd +++ b/Source/ZRC/Build.cmd @@ -5,34 +5,22 @@ set TOOLS=../../Tools set PATH=%TOOLS%\srecord;%PATH% -if exist ..\..\Binary\RCZ80_zrc.rom call :build_zrc - -if exist ..\..\Binary\RCZ80_zrc_ram.rom call :build_zrc_ram - -goto :eof - -:build_zrc - -srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x0 0x200 zrc_cfldr.bin -binary -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ80_zrc.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_zrc_prefix.dat - -copy /b ..\..\Binary\hd1k_zrc_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zrc_combo.img || exit /b +for %%f in (..\..\Binary\RCZ80_zrc_*.rom) do call :build %%~nf goto :eof -:build_zrc_ram +:build +echo. +echo Creating %1 disk image... +echo. srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zrc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ80_zrc_ram.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_zrc_ram_prefix.dat +srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\%1.rom -binary -offset 0x24000 -o temp.dat -binary +move temp.dat ..\..\Binary\%1_hd1k_prefix.dat -copy /b ..\..\Binary\hd1k_zrc_ram_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zrc_ram_combo.img || exit /b +copy /b ..\..\Binary\%1_hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\%1_hd1k_combo.img || exit /b goto :eof diff --git a/Source/ZRC/Makefile b/Source/ZRC/Makefile index 72ebba4f..743e0573 100644 --- a/Source/ZRC/Makefile +++ b/Source/ZRC/Makefile @@ -1,23 +1,13 @@ -HD1KZRCPREFIX = hd1k_zrc_prefix.dat -HD1KZRCCOMBOIMG = hd1k_zrc_combo.img -HD1KZRCRAMPREFIX = hd1k_zrc_ram_prefix.dat -HD1KZRCRAMCOMBOIMG = hd1k_zrc_ram_combo.img -ZRCROM = ../../Binary/RCZ80_zrc.rom -ZRCRAMROM = ../../Binary/RCZ80_zrc_ram.rom -HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ - ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img - -OBJECTS := +DEST=../../Binary -ifneq ($(wildcard $(ZRCROM)),) - OBJECTS += $(HD1KZRCPREFIX) $(HD1KZRCCOMBOIMG) -endif +HD1KIMGS = $(DEST)/hd1k_cpm22.img $(DEST)/hd1k_zsdos.img $(DEST)/hd1k_nzcom.img \ + $(DEST)/hd1k_cpm3.img $(DEST)/hd1k_zpm3.img $(DEST)/hd1k_ws4.img -ifneq ($(wildcard $(ZRCRAMROM)),) - OBJECTS += $(HD1KZRCRAMPREFIX) $(HD1KZRCRAMCOMBOIMG) -endif +ROMS := $(wildcard $(DEST)/RCZ80_zrc_*.rom) +ROMS := $(patsubst $(DEST)/%.rom,%,$(ROMS)) -DEST=../../Binary +OBJECTS := $(patsubst %,%_hd1k_prefix.dat,$(ROMS)) +OBJECTS += $(patsubst %,%_hd1k_combo.img,$(ROMS)) TOOLS = ../../Tools @@ -25,24 +15,13 @@ include $(TOOLS)/Makefile.inc DIFFPATH = $(DIFFTO)/Binary -$(HD1KZRCPREFIX): +%_hd1k_prefix.dat: $(DEST)/%.rom srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zrc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(ZRCROM) -binary -offset 0x24000 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $< -binary -offset 0x24000 -o temp.dat -binary mv temp.dat $@ -$(HD1KZRCRAMPREFIX): - srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x0 0x200 zrc_cfldr.bin -binary -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(ZRCRAMROM) -binary -offset 0x24000 -o temp.dat -binary - mv temp.dat $@ - -$(HD1KZRCCOMBOIMG): $(HD1KZRCPREFIX) $(HD1KIMGS) - cat $^ > $@ - -$(HD1KZRCRAMCOMBOIMG): $(HD1KZRCRAMPREFIX) $(HD1KIMGS) +%_hd1k_combo.img: %_hd1k_prefix.dat $(HD1KIMGS) cat $^ > $@ diff --git a/Source/ZRC512/Build.cmd b/Source/ZRC512/Build.cmd index dbc18f58..9e5fc81e 100644 --- a/Source/ZRC512/Build.cmd +++ b/Source/ZRC512/Build.cmd @@ -5,19 +5,22 @@ set TOOLS=../../Tools set PATH=%TOOLS%\srecord;%PATH% -if exist ..\..\Binary\RCZ80_zrc512.rom call :build_zrc512 +for %%f in (..\..\Binary\RCZ80_zrc512_*.rom) do call :build %%~nf goto :eof -:build_zrc512 +:build +echo. +echo Creating %1 disk image... +echo. srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zrc512_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc512_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc512_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ80_zrc512.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_zrc512_prefix.dat +srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\%1.rom -binary -offset 0x24000 -o temp.dat -binary +move temp.dat ..\..\Binary\%1_hd1k_prefix.dat -copy /b ..\..\Binary\hd1k_zrc512_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zrc512_combo.img || exit /b +copy /b ..\..\Binary\%1_hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\%1_hd1k_combo.img || exit /b goto :eof diff --git a/Source/ZRC512/Makefile b/Source/ZRC512/Makefile index d04611dc..e84c6a5c 100644 --- a/Source/ZRC512/Makefile +++ b/Source/ZRC512/Makefile @@ -1,16 +1,13 @@ -HD1KZRC512PREFIX = hd1k_zrc512_prefix.dat -HD1KZRC512COMBOIMG = hd1k_zrc512_combo.img -ZRC512ROM = ../../Binary/RCZ80_zrc512.rom -HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ - ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img +DEST=../../Binary -OBJECTS := +HD1KIMGS = $(DEST)/hd1k_cpm22.img $(DEST)/hd1k_zsdos.img $(DEST)/hd1k_nzcom.img \ + $(DEST)/hd1k_cpm3.img $(DEST)/hd1k_zpm3.img $(DEST)/hd1k_ws4.img -ifneq ($(wildcard $(ZRC512ROM)),) - OBJECTS += $(HD1KZRC512PREFIX) $(HD1KZRC512COMBOIMG) -endif +ROMS := $(wildcard $(DEST)/RCZ80_zrc512_*.rom) +ROMS := $(patsubst $(DEST)/%.rom,%,$(ROMS)) -DEST=../../Binary +OBJECTS := $(patsubst %,%_hd1k_prefix.dat,$(ROMS)) +OBJECTS += $(patsubst %,%_hd1k_combo.img,$(ROMS)) TOOLS = ../../Tools @@ -18,13 +15,13 @@ include $(TOOLS)/Makefile.inc DIFFPATH = $(DIFFTO)/Binary -$(HD1KZRC512PREFIX): +%_hd1k_prefix.dat: $(DEST)/%.rom srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zrc512_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zrc512_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zrc512_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(ZRC512ROM) -binary -offset 0x24000 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $< -binary -offset 0x24000 -o temp.dat -binary mv temp.dat $@ -$(HD1KZRC512COMBOIMG): $(HD1KZRC512PREFIX) $(HD1KIMGS) +%_hd1k_combo.img: %_hd1k_prefix.dat $(HD1KIMGS) cat $^ > $@ diff --git a/Source/ZSDOS/Build.cmd b/Source/ZSDOS/Build.cmd index 554a8dbb..def38fef 100644 --- a/Source/ZSDOS/Build.cmd +++ b/Source/ZSDOS/Build.cmd @@ -19,3 +19,7 @@ copy /b ..\zcpr-dj\zcpr.bin + zsdos.bin + ..\cbios\cbios_una.bin zsys_una.bin || copy /b loader.bin + zsys_wbw.bin zsys_wbw.sys || exit /b copy /b loader.bin + zsys_una.bin zsys_una.sys || exit /b + +rem Copy OS files to Binary directory +copy zsys_wbw.sys ..\..\Binary\ZSDOS || exit /b +copy zsys_una.sys ..\..\Binary\ZSDOS || exit /b diff --git a/Source/ZSDOS/Clock/ReadMe.txt b/Source/ZSDOS/Clock/ReadMe.txt index 0fc634f7..0685385c 100644 --- a/Source/ZSDOS/Clock/ReadMe.txt +++ b/Source/ZSDOS/Clock/ReadMe.txt @@ -2,10 +2,10 @@ This directory contains the source and assembled versions of the ZSystem Clock Drivers for RomWBW HBIOS. The wbwclk.z80 source file can be compiled using Build.cmd which will -produce a relocatable binary (hbclk.rel). +produce a relocatable binary (wbwclk.rel). -The relocatable binary should be added/updated in the STAMPS.DAT -library. The STAMPS.DAT file is just a standard LU type library and +The relocatable binary should be added/updated in the CLOCKS.DAT +library. The CLOCKS.DAT file is just a standard LU type library and is easily updated using NULU. The members are the relocatable binaries, but with the .REL extension removed. diff --git a/Source/ZSDOS/Distribution/BGPATCH.HEX b/Source/ZSDOS/Distribution/BGPATCH.HEX deleted file mode 100644 index 2966accc..00000000 Binary files a/Source/ZSDOS/Distribution/BGPATCH.HEX and /dev/null differ diff --git a/Source/ZSDOS/Distribution/CLOCKS.DAT b/Source/ZSDOS/Distribution/CLOCKS.DAT deleted file mode 100644 index f44fa3c0..00000000 Binary files a/Source/ZSDOS/Distribution/CLOCKS.DAT and /dev/null differ diff --git a/Source/ZSDOS/Distribution/COPY.CFG b/Source/ZSDOS/Distribution/COPY.CFG deleted file mode 100644 index 3d5310ac..00000000 Binary files a/Source/ZSDOS/Distribution/COPY.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/COPY.COM b/Source/ZSDOS/Distribution/COPY.COM deleted file mode 100644 index 606c81a5..00000000 Binary files a/Source/ZSDOS/Distribution/COPY.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/COPY.UPD b/Source/ZSDOS/Distribution/COPY.UPD deleted file mode 100644 index 3725b0e8..00000000 --- a/Source/ZSDOS/Distribution/COPY.UPD +++ /dev/null @@ -1,43 +0,0 @@ - 11 Dec 88 - -Some changes have been made to COPY since the manual was written. -Comparison of dates with Existence testing ON has been changed to -use the Creation date when no Modified date exists, and print -"Undated" when neither exists, yet both source and destination -disks support file date stamping. Additionally, the /X option -has been re-defined, and a new /R option has been added to -Version 1.4. Please replace Paragraph 4.1.2.9 on page 55 of your -ZSDOS manual with the following two paragraphs describing the new -options. - - -4.1.2.9.1 ERASE SOURCE FILE AFTER COPY. - -When you want to "move" a file from one area to another, the "X" -option may be used. This option causes a file or group of files -to be copied in the manner described by the default or specified -options, but after the copy and optional verify, the source file -or files are erased. You will be notified that the file has been -erased by the status "(X)" being printed on your console. To -minimize the possibility of deleting a good file when errors -exist in the copy, the Verify option should always be active, -either by default, or specified. When Verify is active, any -errors detected will disable the "X" option for that file so that -a good source file will not be deleted. The "X" option has no -configurable value, and is always assumed to be "Off" requiring -the option in the command line list to be effective. - - -4.1.2.9.2 COPY ONLY FILES WHICH EXIST (REPLACE). - -Occasionally, you may wish to update selected files to a destina- -tion in a simpler manner than naming each file, or using the -Inspect option. The "R" (Replace) option, when active, tells -COPY to transfer only files which exist on the destination direc- -tory. If the Archive option (A) is added in conjunction with the -Replace option, only files which have not been archived, AND -already exist on the destination will be archived. It should be -noted that the No Replacement (N) option is incompatible with -both the Replace and Archive options, and is disabled when either -"R" or "A" are active. - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/DATSWEEP.COM b/Source/ZSDOS/Distribution/DATSWEEP.COM deleted file mode 100644 index 5d298c0b..00000000 Binary files a/Source/ZSDOS/Distribution/DATSWEEP.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/DSCONFIG.COM b/Source/ZSDOS/Distribution/DSCONFIG.COM deleted file mode 100644 index b77dd008..00000000 Binary files a/Source/ZSDOS/Distribution/DSCONFIG.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/FA16.CFG b/Source/ZSDOS/Distribution/FA16.CFG deleted file mode 100644 index b7974d36..00000000 Binary files a/Source/ZSDOS/Distribution/FA16.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/FA16.DOC b/Source/ZSDOS/Distribution/FA16.DOC deleted file mode 100644 index 08b46875..00000000 --- a/Source/ZSDOS/Distribution/FA16.DOC +++ /dev/null @@ -1,264 +0,0 @@ - - FILEATTR - Version 1.6 - - Gene Pizzetta - January 18, 1992 - A ZSDOS utility, copyright (c) 1988 by Carson Wilson. - - -FILEATTR (FA) is a utility that allows rapid settin, resetting, -or displaying of file attributes under ZSDOS, ZRDOS, and CP/M -2.2. Several additional features are available under ZCPR3, -including error flag setting, error handler invocation, an -enhanced display, and better error detection. - -FA will not run under CP/M 3.0 or Z3PLUS. - -USAGE: - - FILEATTR {dir:}{afn} {{/}options} - -If a DIR or DU specification is not given, the current directory -is assumed (under vanilla CP/M only the drive is significant). -If no ambiguous or unambiguous filename is given, all files -("*.*") are matched. - -If no attribute options are given, FILEATTR merely displays the -current state of each file's attributes. Files are displayed in -the order that they appear in the directory. - -Once operation begins, FA cannot be aborted by the user. If a ^C -is entered at the keyboard, all screen output stops, but file -attribute operations continue to completion. If that was not the -case, attributes might be set on some entries for a file and not -on others. Nevertheless, suppressing screen output speeds things -up a bit. - -OPTIONS: A leading slash is required unless the option list is -the second parameter on the command line. Options may be -separated by spaces, commas, or nothing at all. - -ATTRIBUTE OPTIONS: These options set (turn on) corresponding -attributes on files matching the file specification. Attributes -not specified by an attribute option remain unchanged. - -If the option is preceded by a minus ("-") or by an "N", the -corresponding attribute is reset (turned off). - - 1 F1. This is a user attribute which has no predefined - meaning. - - P Public (f2). Under ZSDOS, when this attribute is set, - a file is available from any user area of the disk on - which it resides. A file cannot be made public if - another file with the same name exists in any other - user area on that drive. In that case FA will issue an - error message and leave the attribute off. - - D Inhibit access datestamp (f3). Under ZSDOS, when this - attribute is set, the file's access datestamp will not - be updated, which may speed file access slightly. If - the attribute is turned off, normal access datestamping - resumes. - - 4 F4. This is a user attribute which has no predefined - meaning. - - W Wheel protect (f8). Under ZSDOS, when this attribute - is set, the file becomes read-only when the wheel byte - is off and cannot be erased. If the wheel byte is on, - the file can be erased normally. - - R Read only (t1). When this attribute is set, the file - cannot be erased or modified by most programs. - - S System (t2). When this attribute is set, the file - becomes a "hidden" file that will not be found by most - directory programs or by most well-behaved utilities - that accept ambiguous filenames. (FA must find system - files, of course.) - - A Archive (t3). When this attribute is set, it signals - some archival programs that the file has not been - modified since it was last backed up. If a file is - modified, ZSDOS and ZRDOS turn this attribute off. - CP/M does not fully support this attribute, however. - -OTHER OPTIONS: These options affect only the screen display. - - Q Quiet mode. Console output is suppressed unless there - is an error. All other operations are performed - normally. - - X Screen paging off. With this option, screen paging is - turned off. The screen can still be paused by pressing - any key except ^C. - -ERRORS: Under ZCPR3, errors will cause FA to set the program -error flag and to invoke the error handler. The error flag will -be set to the following values: - 2 invalid directory specification - 4 miscellaneous (conflicting file, no files on disk) - 10 no matching files found (no error handler) - 18 Disk read-only - 19 Invalid option - -For error code 10 (no matching files found), the error flag is -set, but the error handler is not called. - -In addition, under ZCPR 3.3 and above, an invalid directory -specification will abort FA to the error handler, but no message -is printed. - -The following error messages may be seen: - -Conflicting entry, can't set public attribute - If there are files with the same name in other user areas of - the disk, the public attribute cannot be set. - -No files on disk - The disk directory is empty. - -Bad Option: /o - The command line option shown is unknown to FILEATTR. - -Drive R/O - The drive is set to read-only by the operating system and - attributes cannot be changed. - -CP/M version 2.x required - FILEATTR will not run on this system. - -BIOS write error near directory sector n - An error occurred at or near the given directory sector, - which is expressed as a decimal offset from the beginning of - the directory. - -BIOS set track detected - FA aborting - A background program is attempting to modify the current - track setting. The background program must be removeed - before running FA again. - -Not Wheel - Under ZCPR3 the wheel byte must be set before FILEATTR can - be run. - -CONFIGURATION: While no installation is necessary, all options -can be set as defaults, if you prefer, using ZCNFG. The -configuration options are fully explained on the ZCNFG help -screens. - -It is best not to change the name of the configuration file. Its -special name assures that ZCNFG will always find the correct CFG -file, even if the name of FA has been changed or if more than one -version of FA is online. - -HISTORY: - -Version 1.6 -- April 14, 1991 -- Gene Pizzetta - Now displays target DU and directory name in summary. Fixed - bug that caused "GO" to be displayed as program name, if it - was re-invoked with the GO command. - -Version 1.5 -- March 27, 1991 -- Gene Pizzetta - Now calls CP/M version checking routine (it was there, but - it wasn't called). Changed error codes: 10, no matching - files found. "No files on disk" error now gets - miscellaneous error code (4). Error 10 does not invoke - error handler. Not released. - -Version 1.4 -- March 20, 1991 -- Gene Pizzetta, Howard Goldstein - Code to check module data byte (S2) was replaced by Howard - Goldstein's elegant solution which uses a "true" extent - number: ((data_mod * 32) + extent). Entering a ^C no - longer really aborts FILEATTR; instead FA immediately prints - "Wait..." on the screen, turns off paging, turns on quiet - mode, sets the results flag, and finishes what it was doing. - All this is to prevent unexpected results when only some of - a file's directory entries are changed. All errors - including a conflicting file found during a PUBLIC request, - now set the program error flag and invoke the error handler - so an active SUBMIT or ZEX script can be aborted. The error - flag will have the following values: 2, invalid directory; - 10, no files on disk; 18, disk is read-only; 19, invalid - option; 4, all other errors. If no matching files are - found, the program error flag will be set to FFh, but the - error handler will not be invoked. A few other code changes - were made, including a check for CP/M-Plus, under which - FILEATTR will not work. Not released. - -Version 1.3 -- February 22, 1991 -- Gene Pizzetta - Corrected bug that caused faulty operation on large files: - The module data byte (S2) byte was not being checked, so - such files appeared 2 or more times in the directory display - and the public routine was often not finding conflicting - files. Added configuration byte and command line option (X) - for screen paging (paging is suppressed in quiet mode). - Made quiet mode responsive to ZCPR quiet flag and changed Q - command line option to toggle. Usage screen reflects - current effect of X and Q toggles. Attribute configuration - area changed to be compatible with ZCNFG TOGL3 routine. - Actions of D and ND options reversed so they work the same - as the others. Added configuration byte for printing - summary line even in quiet mode, as suggested by Howard - Goldstein. Removed blank lines from screen display, - allowing three more filenames to be shown. Removed tabs - from usage screen so PRINT and PSTR are not needed. - Eliminated leading zero from user number display. Now - prints "file" instead of "files" in summary when only 1 - matching file is found. Ditto for attribute(s) altered. - -Version 1.2 -- November 30, 1988 -- Carson Wilson - Fixed bug of no program name display when FILEATTR's name - was 8 characters long. - -Version 1.1 -- October 30, 1988 -- Carson Wilson - Now wildcards the command forms "FA d: /options" and "FA d: - options." - -Version 1.0 -- September 26, 1988 -- Carson Wilson - If a filespec is given, no leading slash is required before - the options. Link with version 4 libraries. Removed /X - option--ZSDOS 10T always closes the first extent when a file - is written to. Changed summary to read "files matched". - -Version 0.9 -- July 7, 1988 -- Carson Wilson - Increased length of search FCB (AMBFIL) by one byte. Set up - AMBFIL as '?' + 35 binary 0's. ZRDOS and CP/M zero the - drive byte (FCB+0) during search next calls, so reinitialize - it to '?' before rescanning the directory. PROGID now - prints stored name on GO/JUMP. - -Version 0.8 -- June 26, 1988 -- Carson Wilson - Use SYSLIB PRINT for help display. VPRINT does not expand - tabs. Now traps disk track changes at the BIOS level. - Allows '-' as well as 'N' for "negate option." Auto- - wildcards FCB1 for attribute set as well as display. - -Version 0.7 -- May 24, 1988 -- Carson Wilson - Cosmetic changes to help, display. Made public routines - faster by 1/2 directory scan average. Consolidated file - attribute setting/resetting routines for efficiency and - clarity. - -Version 0.6 -- May 14, 1988 -- Carson Wilson - Changed "Publ" to "Publc" and "Priv" to "Privt". Added Q - and X options, made options installable. Added test for bad - ZCPR directory & chain to error handler. - -Version 0.5 -- May 4, 1988 -- Carson Wilson - Fixed bug at CHKRO inherited from MAKE.ASM. Uses Bridger - Mitchell's FRESET to reset disks. Uses ZCPR invocation name - in signon, help, etc. Added F4 attribute. Now includes all - valid ZSDOS attributes. Help now fully "smart" under ZCPR. - Reworked VID3.Z80 and VID4.Z80 from VLIB11 and moved them - into FA.Z80 (see end of file). Put STNDOUT mode ON by - default at beginning of each attribute display sequence for - faster ZCPR displays. - -Version 0.4 -- April 27, 1988 -- Carson Wilson - Tests for matching files at other user areas before setting - the public attribit. - -Version 0.3 -- April 26, 1988 -- Carson Wilson diff --git a/Source/ZSDOS/Distribution/FA16A.FOR b/Source/ZSDOS/Distribution/FA16A.FOR deleted file mode 100644 index e9ed3d43..00000000 --- a/Source/ZSDOS/Distribution/FA16A.FOR +++ /dev/null @@ -1,6 +0,0 @@ -An update and bug-fix of FILEATTR (FA), a ZSDOS utility that -allows rapid setting, resetting, or displaying of file attributes -under ZSDOS, ZRDOS, and CP/M 2.2. Several additional features -are available under ZCPR3, including error flag setting, error -handler invocation, and an enhanced display. Version 1.6A adds -documentation; otherwise, same as 1.6. diff --git a/Source/ZSDOS/Distribution/FA16CFG.TXT b/Source/ZSDOS/Distribution/FA16CFG.TXT deleted file mode 100644 index 4067b9ba..00000000 --- a/Source/ZSDOS/Distribution/FA16CFG.TXT +++ /dev/null @@ -1,39 +0,0 @@ - -Option Q -- If the ZCPR quiet flag is set, FILEATTR will always default to -quiet mode. To make quiet mode the default at all times, even when running -under CP/M, set this configuration option to "Yes". Whatever is selected -here can be toggled with the command line "Q" option. - -Option X -- A "Yes" will cause FILEATTR to page screen output by default. -A "No" will default to continuous scrolling. The chosen default can be -toggled with the command line "X" option. Screen paging is always turned -off in quiet mode. - -Option R -- As distributed, FILEATTR prints nothing to the screen when it -is operating in quiet mode. If this configuration option is "Yes", the -results summary line that gives the number of matching files found and the -number of attributes changed will be printed even in quiet mode. - -Option S -- Enter the number of lines on your video display screen. Under -ZCPR 3.3 and higher, the number of screen lines for paging is obtained from -the environment descriptor. This configuration parameter is used only if -running under CP/M. - - - Attribute Configuration Options - -As distributed, FILEATTR will not change any file attribute unless -explicitly commanded to do so by a command line option. To configure -FILEATTR to turn a file attribute ON or OFF by default, toggle the -appropriate configuration selection. - -For example, to make FILEATTR set all matching files to Public by default, -change the "Public attribute" setting to "Turn On". Then FILEATTR will set -the specified files to Public unless the /NP command line option is given -(which would cause the files to be set to Private). Since there is no -command which tells FILEATTR not to change an attribute, however, the -program will now insist on turning the Public attribute either on (default) -or off (through the /NP option). - -Most users will have neither need nor desire to change the configuration -default as distributed which will "Leave As-Is" all matching files. diff --git a/Source/ZSDOS/Distribution/FILEATTR.COM b/Source/ZSDOS/Distribution/FILEATTR.COM deleted file mode 100644 index 4527d090..00000000 Binary files a/Source/ZSDOS/Distribution/FILEATTR.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/FILEDATE.CFG b/Source/ZSDOS/Distribution/FILEDATE.CFG deleted file mode 100644 index da1ca45f..00000000 Binary files a/Source/ZSDOS/Distribution/FILEDATE.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/FILEDATE.COM b/Source/ZSDOS/Distribution/FILEDATE.COM deleted file mode 100644 index 11b83616..00000000 Binary files a/Source/ZSDOS/Distribution/FILEDATE.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/FILEDATX.CFG b/Source/ZSDOS/Distribution/FILEDATX.CFG deleted file mode 100644 index bfe06656..00000000 Binary files a/Source/ZSDOS/Distribution/FILEDATX.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/INITDIR.CFG b/Source/ZSDOS/Distribution/INITDIR.CFG deleted file mode 100644 index 96baa986..00000000 Binary files a/Source/ZSDOS/Distribution/INITDIR.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/INITDIR.COM b/Source/ZSDOS/Distribution/INITDIR.COM deleted file mode 100644 index fd46387a..00000000 Binary files a/Source/ZSDOS/Distribution/INITDIR.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/INSTALOS.COM b/Source/ZSDOS/Distribution/INSTALOS.COM deleted file mode 100644 index 8ce66cc5..00000000 Binary files a/Source/ZSDOS/Distribution/INSTALOS.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/LDTIMD.COM b/Source/ZSDOS/Distribution/LDTIMD.COM deleted file mode 100644 index 6c603958..00000000 Binary files a/Source/ZSDOS/Distribution/LDTIMD.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/LDTIMP.COM b/Source/ZSDOS/Distribution/LDTIMP.COM deleted file mode 100644 index d66f8d08..00000000 Binary files a/Source/ZSDOS/Distribution/LDTIMP.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/NZCOMPAT.HEX b/Source/ZSDOS/Distribution/NZCOMPAT.HEX deleted file mode 100644 index e0caa8e0..00000000 --- a/Source/ZSDOS/Distribution/NZCOMPAT.HEX +++ /dev/null @@ -1,11 +0,0 @@ -:10028000FE01281FFE032803FEFFC0CDD802C8CD03 -:10029000BF02C021030011000113131A1B1B0947E1 -:1002A0000E03E9CDD802C8CDBF02C0210900094E16 -:1002B000234678B12804606918F501FCFF18D7605F -:1002C00069210F000911D502C506031ABE200423B7 -:1002D0001310F8C1C9504348110101211700194EEC -:1002E000234604EB7E23666FAFED42D0210000A7CA -:0102F000C944 -:00000001FF -8' 23 6 INC HL - 538 01A9' 10 \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/PUTBG.COM b/Source/ZSDOS/Distribution/PUTBG.COM deleted file mode 100644 index 970e2d8a..00000000 Binary files a/Source/ZSDOS/Distribution/PUTBG.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/PUTDS.COM b/Source/ZSDOS/Distribution/PUTDS.COM deleted file mode 100644 index c0ceba64..00000000 Binary files a/Source/ZSDOS/Distribution/PUTDS.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/README.2ND b/Source/ZSDOS/Distribution/README.2ND deleted file mode 100644 index d3c4332f..00000000 --- a/Source/ZSDOS/Distribution/README.2ND +++ /dev/null @@ -1,165 +0,0 @@ -GETTIN STARTED. - - The natural human inclination is to start using products -before wading through the instructions. We understand that and -have developed some rather simple steps to provide initial ZSDOS -capabilities rather painlessly. This will provide the inducement -to read the appropriate sections of the manual for a complete -customized installation. Merely follow the steps listed here, -then read the manual at your liesure to learn how to tailor the -ZSDOS system to you particular needs and desires. These instruc -tions cite the relevant paragraphs in the manual in case a more -detailed description is desired. - -1 LOADIN TH DOS These steps are written around the full- -featured ZSDOS version of the Operating System to demonstrate all -of the power, and provide procedures for systems already using -either type of Time Stamping supported by ZSDOS. It is recom -mended that these steps be followed initially, followed by a -later installation with ZDDOS if either a minimal memory configu -ration is desired, or only DateStamper-type File Stamping is -desired. The differences between ZSDOS and ZDDOS are briefly -described in Section 1 of the manual. - - A. DO YOU OPERATE UNDER NZ-COM? (3.1.2) - If No, Go To Step B. - If Yes, - - Rename ZSDOS.ZRL to NZDOS.ZRL and replace your - existing NZDOS.ZRL with this new file. Reinstall - NZCOM and load the system. - - Go to Step 2. - - B. DO YOU HAVE Plu*Perfect Systems' JETLDR? (3.1.3) - If No, Go To Step C. - If Yes, - - Type: - JETLDR ZSDOS.ZRL - - Go to Step 2. - - C. ARE YOU USING AN SB-180/FX-180 with XBIOS? (3.1.4) - If No, Go To Step D. - If Yes, - - Enter SYSBLD with your current system model. - Select Menu 1.1, and change the DOS name to - ZSDOS.ZRL. Exit SYSBLD, and "XBOOT" the new image. - - Go to Step 2. - - D. YOU ARE INSTALLING TO A BOOTABLE SYSTEM IMAGE. (3.1.1) - - (1) Create a system image file with MOVCPM, MOVZSYS or - whatever facility you computer uses (ONEAC ON! - image is already in this form). Save the moved - system image to a disk file remembering the name. - - - (2) Call the ZSDOS Installation tool in absolute mode - (3.1.1.1) with: - INSTALOS /A - Read in the image created above, and select option - 2 to replace the DOS. Load the ZSDOS.ZRL file and - answer 'N' (No) to the prompt asking whether to - configure default options. Select menu option 4 to - exit the program and save the new image. - - (3) Install the new image on your system boot tracks - with the SYSGEN utility provided with your computer. - WARNING: PERFORM THIS STEP ON A WORKING DISK, NOT A - MASTER DISK. Reboot your system from this disk and - you will be operating under ZSDOS. - - -2. You should have completed installation of one of the forms in -step 1 at this point, and have ZSDOS up and running. To see what -Time Stamps can do for your system, two files have been pre- -configured on the distribution disk. LDTIMD.COM is an RSX form -of DateStamper with the Relative clock. LDTIMP.COM is an RSX form -of P2DOS stamping also with the Relative clock. If you are -unfamiliar with the two methods, a brief comparison is: - - Stamp Method Advantages Disadvantages - ------------ ---------- ------------- - DateStamper(tm) Wide acceptance Slight Time penalty - Uses Only 1 Dir Stamp file can be - entry erased - Offers Last Access - stamp - - P2DOS (CP/M Plus) Fast Uses 1/4 of Dir - Entries - -If you do NOT want Date/Time Stamp or clock support, go to -Step 3, otherwise activate one of the two programs by entering -either LDTIMD or LDTIMP (see LDTIM, 3.2.3). Then Set the clock -using TD.COM (4.6). - -To see the effect of stamping, prepare a disk for stamping with -PUTDS.COM (3.2.4) if you selected LDTIMD, or INITDIR.COM (3.2.5) -if you selected LDTIMP. Copy or edit some files and note the -effect with ZXD (4.11). You will probably want to tailor the -stamping to your system clock or other parameters now, so please -read Section 3 of the manual for details. - - -3. FINAL TOUCHES. After you have completed whichever of the above -steps you elected, we recommend highly that you read at least -Sections 1 and 2 of the manual to learn the power that ZSDOS can -bring to 8-bit computers. Learn to use the tools provided with -the ZSDOS distribution package to customize the Operating System -to your own requirements and desires. All tools listed below -operate equally well under ZSDOS and ZDDOS unless specifically -noted. Briefly, the tools are: - - - COPY - Copy single or groups of files between disk drives -and/or user areas preserving date/time stamps (Modification of -ZCPR tool MCOPY). (4.1) - - DATSWEEP (ZDDOS or ZSDOS with DateStamper only) - -Plu*Perfect's full-featured screen-oriented disk and file utility -(4.2). - - FILEATTR - Display/Set attributes of individual or groups of -files. (4.3) - - FILEDATE (ZDDOS or ZSDOS with DateStamper only) - Full fea -tured Disk directory lister that permits elaborate selective -listing based on DateStamper-style Date/Time files. (4.4) - - INITDIR - Initialize a disk directory for P2DOS (CP/M Plus) -type Date/Time Stamping. (3.2.5) - - PUTDS - Initialize a disk for DateStamper type Date/Time -Stamping (licensed Plu*Perfect utility). (3.2.4) - - RELOG - Resets Hard Disk Login vectors. Primarily for use -in more elaborate Hard Disk systems which swap logical Hard -Drives, or use removeable-media, but are defined as Fixed Drives. -(4.5) - - TD - Display/Set an installed clock via ZSDOS/ZDDOS. (4.6) - - ZCAL - Display a brief calendar of current or any desired -month. (4.7) - - ZCNFG - Configuration utility to set defaults, such as US or -European date displays, in COPY, FILEATTR, FILEDATE, TD, and ZXD. - - ZPATH (ZSDOS only) - Permits setting the Internal DOS path -as well as a ZCPR3 path (Modification of ZCPR tool PATH). (4.9) - - ZSCONFIG - Basic configuration program for both ZSDOS and -ZDDOS. Operates in both interactive and command-line driven -modes wih the latter being ideal for customizing the System from -a STARTUP file under ZCPR3 environments. Options vary between -ZSDOS and ZDDOS. (4.10) - - ZXD - Directory lister for DateStamper and/or P2DOS (CP/M -Plus) Date/Time stamping methods (Extensive modification of ZCPR -tool XD III). (4.11) - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/RELOG.COM b/Source/ZSDOS/Distribution/RELOG.COM deleted file mode 100644 index 13ffc62e..00000000 Binary files a/Source/ZSDOS/Distribution/RELOG.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/SETTERM.COM b/Source/ZSDOS/Distribution/SETTERM.COM deleted file mode 100644 index eca19bf9..00000000 Binary files a/Source/ZSDOS/Distribution/SETTERM.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/SETUPZST.COM b/Source/ZSDOS/Distribution/SETUPZST.COM deleted file mode 100644 index 35e4b589..00000000 Binary files a/Source/ZSDOS/Distribution/SETUPZST.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/STAMPS.DAT b/Source/ZSDOS/Distribution/STAMPS.DAT deleted file mode 100644 index 23cd9bd7..00000000 Binary files a/Source/ZSDOS/Distribution/STAMPS.DAT and /dev/null differ diff --git a/Source/ZSDOS/Distribution/TD.CFG b/Source/ZSDOS/Distribution/TD.CFG deleted file mode 100644 index ab44bab9..00000000 Binary files a/Source/ZSDOS/Distribution/TD.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/TD.COM b/Source/ZSDOS/Distribution/TD.COM deleted file mode 100644 index 552aba67..00000000 Binary files a/Source/ZSDOS/Distribution/TD.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/TERMBASE.DAT b/Source/ZSDOS/Distribution/TERMBASE.DAT deleted file mode 100644 index 358d61c0..00000000 Binary files a/Source/ZSDOS/Distribution/TERMBASE.DAT and /dev/null differ diff --git a/Source/ZSDOS/Distribution/TESTCLOK.COM b/Source/ZSDOS/Distribution/TESTCLOK.COM deleted file mode 100644 index d547e2b8..00000000 Binary files a/Source/ZSDOS/Distribution/TESTCLOK.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/USERCLOK.TEM b/Source/ZSDOS/Distribution/USERCLOK.TEM deleted file mode 100644 index 619215d5..00000000 --- a/Source/ZSDOS/Distribution/USERCLOK.TEM +++ /dev/null @@ -1,185 +0,0 @@ - TITLE "Clock module name - (REL clock name here)" - SUBTTL "Description of Clock Module" -;================================================================ -; Place brief description and machine clock I/O parameters here -; along with any version and date data -;================================================================ - -VERS EQU 01 - .Z80 - NAME CCLOK ; Change this to no more than 6-char - ; name for the REL driver module - - MACLIB CLOCK.LIB ; Some useful equates are here - -; This first section contains identification information for the driver -; The information is not placed in the clock driver code section, but are -; located in a different area located by the _CLKID Named Common directive. - - COMMON /_CLKID/ - -DESCST: DEFW 0000 ; Add label here if a static year byte - ; is used by your clock driver. The - ; label should point to the year byte - -CLKNAM: DEFB 'Myclock ' ; Exactly 24 chars in name - DEFB VERS/10+'0','.',VERS MOD 10 +'0',0 - -DESCR: DEFB ' This description may be longer than the brief',CR,LF - DEFB ' name string above, and must be null-terminated',0 - - IF [$-DESCST] > 256 - OVER2 ; This must be less than or equal to 256 bytes - ENDIF - - PAGE - SUBTTL "Configurable Clock Hardware Parameters" -;--------------------------------------------------------------------- -; This section contains any configurable parameters needed for the -; clock driver. They must be structured in the manner shown in order -; for the loader to properly match and set the values. -; The values in this section are not loaded in the same code section -; as the actual driver code, but are located in another base referenced -; by the _PARM_ Named Common directive. - - COMMON /_PARM_/ - -PARBAS: DEFW NPARAMS ; # of parameters (Set to 00 if none) - DEFW STRS ; Pointer to STRS (Set to 00 if none) -NP0: -XYR EQU $+1 - DEFB BYTE ; EXAMPLE! - This shows a byte value - DEFW 88H ; " - ..and default value in Set - -XPORT EQU $+1 - DEFB WORD ; EXAMPLE! - This shows a 16-bit value - DEFW 0F013H ; " - ..and default value in Set - -NPARAMS EQU ($-NP0)/3 - -STRS: DEFB 'Default Year',0 ; EXAMPLE! - Text prompt for XYR - DEFB 'Default Port',0 ; EXAMPLE! - Text prompt for XPORT - - PAGE - SUBTTL "Clock Code - SB180 HeartBeat" -;------------------------------------------------------------------ -; This section should contain the actual Clock Driver code, and all -; entries here are located in the CSEG, or Code Segment. - - CSEG - -; Add any needed equates here if they are not included in CLOCK.LIB - -TIMOFF EQU 36H ; EXAMPLE! - Bios offset for clock ptr - -;----------------------------------------------------------- -; Z S D O S C L O C K H E A D E R -;----------------------------------------------------------- -; Enter: HL points to a 6-byte buffer to Get/Set time -; Exit : A=1 on Success, A=FFH if error -; HL points to last char in buffer -; NOTE: If clock Set is not included, comment these two jumps -; out to save a few bytes. The loader, SETUPZST, uses -; these two jumps to recognize a full ZSDOS clock and -; modify the interface code. - -PRGBAS: JP GETTIM ; Jump to Read Clock - JP WRCLK ; Jump to Set Clock - -;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; R e a d T h e C l o c k -;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Clock READ code starts here. - -GETTIM: ; The work of reading the clock - ; goes here. Values needing to be set - ; during installation are referenced as: -;YPORT1 EQU $+1 -; LD BC,0000 ; EXAMPLE! - this will set a 16-bit value -; ; in the configuration process -;YYR EQU $+1 ; EXAMPLE! - This will set an 8-bit value -; LD A,00 ; in the configuration process - -; ... Place the meat of the driver in this section ... - -OKRET: LD A,01 ; Set OK status return - RET - -ERRET: OR 0FFH ; Set Error code if needed - RET - -;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; S e t T h e C l o c k -;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; Clock Set code placed here if needed. If Clock Setting -; is not being added, comment out this section to save a -; byte of code. - -WRCLK: - RET - - PAGE - SUBTTL "Run-Time Configuration of Ports and Masks" -;------------------------------------------------------------- -; This code installs configurable items into the clock module -; Enter with DE pointing to the physical base address of the -; relocatable module. DE MUST BE USED TO SET VALUES IN -; THE CSEG PORTION OF CODE! -; NOTE: Code in this section is not added to the actual clock -; driver, but placed in a different area referenced to -; the common base _POST_. - - COMMON /_POST_/ - -; Values in the _PARM_, _POST_ and _PRE_ sections may be loaded -; and saved directly, since their addresses are constant from -; linkage through execution. Setting or reading values in the -; CSEG must be indirect based on the value in the DE register -; pair. The following examples show how to access the various -; sections. -; -; LD A,(XYR) ; EXAMPLE - Get byte from _PARM_ directly -; LD HL,YYR ; " - Begin offset into CSEG indirectly -; ADD HL,DE ; " - HL now addresses relocated loc'n -; LD (HL),A ; " - ..so value can be stored -; -; Likewise, 16-bit values must be accessed indirectly, and may use -; the BC register pair as transfer storage. -; -; LD BC,(XPORT) ; EXAMPLE - Get word from _PARM_ directly -; LD HL,YPORT1 ; " - Begin offset into CSEG indirectly -; ADD HL,DE ; " - HL now addresses relocated loc'n -; LD (HL),C ; " - ..so value can be saved.. -; INC HL ; " - ...a byte.. -; LD (HL),B ; " - ....at a time.. -; -; LD (YPORT2),BC ; EXAMPLE - Values can be stored directly into -; " - other sections such as _PRE_ - - RET ; This RETURN MUST be present even if no other - ; code is included in this section - - - PAGE - SUBTTL "Pre-Execution Clock Checks (Check for ticking)" -;---------------------------------------------------------------- -; This module is executed just prior to installing the module to -; insure that a valid clock is present -; Enter with DE pointing to base of relocated clock code segment - - COMMON /_PRE_/ - -; Optional final setup of the clock module may go here. Examples of such -; code would be installation-dependant items such as physical RAM location -; for the driver module. If any code is added here, the DE register pair -; MUST be preserved to properly inter PRECLOCK code (If included). - -;YPORT2 EQU $+1 ; EXAMPLE - just to show accessing method -; LD BC,0000 ; " - ..from _POST_ code. - - INCLUDE PRECLOCK.LIB ; This section of code merely calls the - ; clock and waits an arbitrary period of - ; time (>> 1 second) to see if the time - ; changes. It returns an error if not. - END - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/ZCAL.COM b/Source/ZSDOS/Distribution/ZCAL.COM deleted file mode 100644 index f239e952..00000000 Binary files a/Source/ZSDOS/Distribution/ZCAL.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZCNFG.COM b/Source/ZSDOS/Distribution/ZCNFG.COM deleted file mode 100644 index ae423dc5..00000000 Binary files a/Source/ZSDOS/Distribution/ZCNFG.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZCNFG24.CFG b/Source/ZSDOS/Distribution/ZCNFG24.CFG deleted file mode 100644 index 1bfe49bf..00000000 Binary files a/Source/ZSDOS/Distribution/ZCNFG24.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZDDOS.HEX b/Source/ZSDOS/Distribution/ZDDOS.HEX deleted file mode 100644 index aaa41d74..00000000 --- a/Source/ZSDOS/Distribution/ZDDOS.HEX +++ /dev/null @@ -1,254 +0,0 @@ -:0A0A0600C39BE423E723E723E72363 -:100A1000E7000000006DEBF12CF12CF12CF1EBF173 -:100A2000EBF1EBF10000000000000000000080008E -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000005A44444F5320312E3120436F7010 -:100A70007972696768742028632920313938372CE6 -:100A800038382020432E572E436F7472696C6C20C7 -:100A90002620482E462E426F776572AF476F672239 -:100AA0004CE4224EE4ED7361E4319BE4DDE5D5DDF9 -:100AB000E1DD225DE4DD225FE421BDE7E579324B33 -:100AC000E4FE0C380DFE31380DFE62D8FE68D0D63B -:100AD000314F2185E8E521E2E409097E23666F4B69 -:100AE0007BE9A1E750E53BE615F212F20FF25AE579 -:100AF00091E58EE5ACE695E58EE699E8E1E752E909 -:100B000042EE8FEB38E85FE86FE846EF87EF8DEE57 -:100B10007AE8C0E882E824ECBCE8D8EAB4E891E8D6 -:100B2000C4E8D3E83CEF7CEFDFE8E7E8F1E788E8EA -:100B3000B8E87CEF88E888E888E888E8CFE888E8C3 -:100B4000C8E8B0E8E2F1E5F18CE889E8B8F1B8F17D -:100B5000CD75E5D8E5CD3BE6E1C91C28141C280677 -:100B60001C2812C30CF23A29E4B73E01CC06F2A7C6 -:100B7000C9CD66E5C82129E47E3600B7CC09F2FE6E -:100B80000DC8FE0AC8FE09C8FE08C8FE20C9320307 -:100B9000003A0300C93A26E43227E413AF1213D512 -:100BA000CD75E5D1219FE5E52A5DE44E23FE0D28B4 -:100BB00074FE0A2870FE7F2804FE0820367EA7C82F -:100BC0001B35D54623EB2126E44E237E2B770418D4 -:100BD000051ACD6AE61310F979964771D1D50E083A -:100BE000C5CD0CF20E20CD0CF23E08CD3BE6C11077 -:100BF000EDD1C9FE152804FE18200AAFB6C8E5CD10 -:100C0000C0E5E118F6FE1020072128E47E2F77C901 -:100C100012E5CD2AE6E1347EB9280A3D1A13C0FE5A -:100C200003C0C3A1E7E13E0D1811FE20300DFE09FF -:100C3000280DF53E5ECD4EE6F1C640FE09200F3E82 -:100C400020CD4EE63A26E4E60720F43E09C9C5D594 -:100C50004FC5CD8EE6C1C5CD0CF2C1C53A28E4B76B -:100C6000C40FF2C179D1C12126E434FE7F2815FEDC -:100C700020D0FE092811FE08280A34FE0A2805FEA5 -:100C80000DC036023535C93E0786E6F877C9CD6610 -:100C9000E5C8CD75E5FE13200ACD09F2FE0320EE6E -:100CA000C3A1E73229E43E01C91120E71AFE24C896 -:100CB00013CD3BE618F6016400CDC4E60E0ACDC4A0 -:100CC000E601010116FF149130FC81F57AB0280786 -:100CD000477AC630CD54E5F1C94368616E676564F3 -:100CE0002442616420536563746F72244E6F204404 -:100CF000726976652446696C6520572F50245A44E2 -:100D0000444F53206572726F72206F6E20240D0A5B -:100D100043616C6C3A2024202046696C653A20249B -:100D20000D0A243A5CE44F0F385CC5D5CDA9E61115 -:100D3000FEE6CDACE63A2BE4C641CD3BE61114E726 -:100D4000CDACE6D1CDACE6110EE7CDACE63A4BE446 -:100D5000CDB6E63A4EE4A72829C1C5DDE53A4BE415 -:100D6000FE132004CDC6EAE31117E7CDACE6E10699 -:100D70000B233E03B83E2ECC54E57EE67FCD54E5F2 -:100D800010EFCDA9E6C13E0490200D212CE47E2B6E -:100D9000BE2805C5CD59E9C1CB4920183E01903088 -:100DA00005AF325CE4C7CD71E5A720FACD75E5FE4D -:100DB00003C018ED7867A7C82EFF224CE43A4EE432 -:100DC000B7280C3A2DE4DD77003A2CE4CD59E9ED53 -:100DD0007B61E4DD2A99E42A4CE4ED5B5FE47D4429 -:100DE000C9218000222EE4CD28ECAF322BE411FF84 -:100DF000FFCD27E83A15E4CB57200621FCF1CD3092 -:100E0000E83A4BE4FE0D21FEF1C430E83A2BE4F55C -:100E1000000000F1CD59E93A57E41869237E2BD63A -:100E200024C03D3257E4C97B2F5F7A2F5721FAF156 -:100E30007BA677237AA677C9CDF7E8DD7E00D63F7B -:100E4000280DDD7E0EFE3F2804DD360E003E0FCD60 -:100E5000DDEC2A34E4018000ED5B2EE4EDB0C9DD69 -:100E60002A58E4DD225DE4CDF7E8CDF4EC18E3CDBB -:100E7000F7E8CD57EC3A5AE4180BCDF7E8CDC2EDC0 -:100E800018F33A2BE4324CE4C93215E43A15E4186D -:100E9000F4CDF7E8CDEDED18DC212200FE44202B47 -:100EA0003A25E4A728256311E1F1ED535FE4181B0F -:100EB000211144DD2AFCF1DD2AFEF1DD2A3AE4DDD0 -:100EC0002AFAF1DD2A36E4DD2A2EE4224CE4C93286 -:100ED0005CE4C9212AE43C7E28AB7BE61F77C9CDC0 -:100EE00005E9CD16EE188E212000CD07F1DD722127 -:100EF000DD7122DD7023C93A5CE4A720082A5DE495 -:100F0000010D0009773EFF324EE43A2BE45F2A5D83 -:100F1000E47E322DE4FE3F2839DDE5DD2A5DE4E69E -:100F20000FE528025E1DCD52E9E1DD7E0DCB7F206D -:100F3000073A2AE41802DDE5DD2A5DE4E61FDD77E5 -:100F400000F680DD770DDDE1C92A0BE4060411EC23 -:100F5000E6E93A2BE4322CE47B2AFAF1E60F47C4A7 -:100F600039EAEB212BE4CB432802BEC877D54FCD1D -:100F70001BF27CB528D31130E4010200EDB022321F -:100F8000E40E06091134E40E08EDB02A36E40E0F23 -:100F9000EDB0D1CB43C0CD1FEAEB2AFAF1CD30EA58 -:100FA00022FAF13A15E4CB5F282A2A47E47CB54FB0 -:100FB0002AFEF17BA56F7AA4B53EFF28013C47B11C -:100FC000C8AF676FB0280A79B720092AFEF1CD3083 -:100FD000EA22FEF12A41E4CD37EA444D2A3AE4E51B -:100FE000545D13AF77EDB0E1ED5B45E47323722AF6 -:100FF00032E4772377CDD1EA3EFFCD05EBCDF1EAA0 -:10100000CA17E8CDC6EA7EFEE528EDFE2128E9CD27 -:101010001CE80E01CD6DECCDF8EAD4E9EA18D9212F -:101020000000EB2101003A2BE4B72804293D20FC05 -:101030007AB4677BB56FC90603CB3CCB1D10FAC9E8 -:101040002A54E40602CD39EA2252E4EB210000EDF5 -:101050004B3CE43E11B7ED423F380209B7CB13CB0E -:10106000123D2804ED6A18EDE52A49E419444DCDF6 -:101070001EF2C1ED5B30E4CD30F2444DC321F2DD10 -:101080006E20CB153A40E4DDA60C673A3EE44704F7 -:10109000CD39EA507D2A5DE40E10094F093A42E449 -:1010A000B75E2805095E23562B7AB3C92100003AA2 -:1010B0003EE447EB29CB1310FBEB3A3FE4DDA620DF -:1010C000B35FC9CD96EC3A56E42A34E4856FD02458 -:1010D000C921FFFF2254E4C92AFCF1CD22EA22FCF7 -:1010E000F1ED5B43E42A32E42313722B73C9CDDBA9 -:1010F000EC2A54E47CA53CC92A32E4ED5B54E47B41 -:1011000096237A9EC94F2A54E4232254E4ED5B438C -:10111000E47B957A9C38BA7D0F0F0FE6603256E477 -:10112000C0C5CD40EACD00EC2A54E47CB520112A9C -:1011300034E4060B234ECBB98110F9D69132F9F184 -:10114000C12A47E4ED5B52E4AFED52C8D82A34E43B -:10115000CDF2F1862A38E4190C200277C9BEC83ACC -:1011600015E4CB67060011D9E6C423E7CD1FEAEBEF -:10117000CD27E8CD0CE8CDD1EAAF1889CD27F218FC -:1011800003CD2AF2B7C8060111E1E62A09E4E9CD48 -:1011900005E9DDCB0E7EC0CDC2ECCDEEEAC8CDC3F5 -:1011A000EA01100009EB2A5DE409EB4134351A2805 -:1011B00004BEC204EF77132310F211ECFF19DD7E99 -:1011C0000CBE380877232323DD7E0F77CDF1EBCDDE -:1011D0002EEF280DC5010000CD28EFCDEEEAC12885 -:1011E0000DC5CDF1EB2A1CE40E0ACD8CEEC1C3284F -:1011F000EFCDC6EA010B0009CBBEDDCB0BBE180854 -:10120000CD2EECCD7CEB1820CDC6EA3E0DCDCCEA40 -:101210003600CD40EA0EFFCD41EBCD2EEC0E01CDD8 -:1012200081EB1804ED532EE4ED4B2EE41804ED4B46 -:1012300034E4C324F27BE6073C4FEBCD37EA47EDBD -:101240005B3AE4197E0710FD41C9C5CD35ECE6FED9 -:10125000D1B30F10FD77C9CDA8EDCDC3EA36E52394 -:101260007ED62420033257E423CBBE0E00CDC6EA3F -:1012700011100019435E2316003A42E4B728030513 -:1012800056237AB3280DE5C52A41E4B7ED52D44A76 -:10129000ECC1E110E0C9CDC6EA11080019ED5B13FD -:1012A000E41AA72004CB7E201023CB7E200BDDCBBD -:1012B000077EC83A15E4E602C02A0FE4060311F5DA -:1012C000E6E9CDCFECC0060211FAE62A0DE4E92AE0 -:1012D000FCF1CD22EAED52C93E0C213E0F325BE417 -:1012E0003EFF325AE4DD2258E4CDD1EA2A47E47CBD -:1012F000B5C418F2AF676F2250E4DDCB07BECD0551 -:10130000EBCDF1EA280EED5B58E41AFEE52807D58F -:10131000CDF8EAD1306CCDC6EA7EFE2128D60E008B -:101320003A5BE44778B728601AEE3FE67F283C79BD -:10133000B720233A15E41F301D2323CB7E2B2B2807 -:10134000151AFEE52810AEE67F281A3EFF3251E45A -:10135000DDCB07FE180F79FE0D280AFE0C1A2811A6 -:10136000AEE67F208F13230C0518B93D3250E418E8 -:10137000F4AECD77ED18ECC5473A40E42FE61FA058 -:10138000C1C9CDD1EAC304EF2A50E47CA520D4CD55 -:10139000F8EAD4E9EA2A52E4225FE43A54E4E603A4 -:1013A000324CE4AF325AE4C9CDC2ECCDD8ECCDF129 -:1013B000EAE1C8E5E521BAEDE3E9CD08ECCDF4ECCE -:1013C00018ECCDA8EDCD96EC2A5DE411100019EBD8 -:1013D000CDC6EA2323CBBE2B2B060B23131AE67FA5 -:1013E000FE3F20017E17CB161F7710EFC9CDA8ED69 -:1013F000DDE5D1CDC6EA060B23133E04B8200EE589 -:101400002A13E47EE1A72005CB7EC2B9EC1ACB16E5 -:1014100017CB1E10E3C901000051CDEDE8CDD8EC8B -:10142000CDF1EAC8CDC6EAEB210F00CD07F17ADD98 -:10143000962179DD9E2278DD9E23D4EDE8CDF4EC73 -:1014400018DECDF7E8DD360E00CDEEEAC8DD7E070A -:10145000F5DD7E0CF5CDC6EA7EF680DDE5D1012016 -:1014600000EDB0DD770DCD02F1DD460CDD4E0FF164 -:10147000DD770CB828040E00CB19DD710FF1DDCB40 -:10148000071617DDCB071E0E052A18E4E9CDF7E88D -:10149000DD360E00CDC2EC2A5DE47EF536E53E0178 -:1014A000CDDDECF1DD7700CDF1EAC82A5DE4CD1C9D -:1014B000E8110F00190611AF772310FCDDCB07BE32 -:1014C000DDCB0BBECDC6EADDE5D1EB012000EDB0F2 -:1014D000CD08ECCD02F10E00C32CF1DDCB0E7E2049 -:1014E00008CD92EB3A4CE43CC8CD0FEF3813CDEE6B -:1014F000EA20163A4FE4B72808CD94EECDF1EA2061 -:101500000BCD02F13EFFC385E8CD4DEEAF18F7CD10 -:101510002EEFCB7037C00C79E61F4F20070478E61A -:101520003F4737C8DD362000DD710CDD700EDD4E23 -:101530000CDD460E79CD77EDCBB8B0C9CD05E9AF5E -:10154000CD7EF02804C9CD05E9AF324FE4DD7E2021 -:10155000FE802809DDBE0F38073E0118A9CD71EFC6 -:10156000CD7FEA28F4CDACEACD4FEACD7CEBC36C5D -:10157000F0CDDBEE3A4CE4B7C8E118DDCD05E93E2D -:10158000FFCD7EF02804C9CD05E93EFF324FE4CD02 -:10159000C2ECDDCB097E200ECDAEEC2A13E47EA793 -:1015A0002007DDCB087EC2B9ECDDCB207EC471EF15 -:1015B000CD7FEAC24BF0E579B728043DCD95EA62CC -:1015C0006B7AB3280B1BE5D5CD35EC1F3020D1E16C -:1015D000ED4B41E47D917C98300E23D5E5EBCD3584 -:1015E000EC1F300AE1D118D97AB320D51807371784 -:1015F000CD52ECD1E1E17AB3287FDDCB0EBE733A58 -:1016000042E4B7280223720E023A3FE4DDA6202806 -:10161000020E003A4BE4D6282033D52A34E4068063 -:10162000772310FCCDACEA3A3FE447042FA35F0ECA -:1016300002E5D5C5CD4FEACD2EECC1C5CD81EBC1BC -:10164000D1E10E001C10EACD28ECD10E00DDCB0E4E -:10165000BEC5CDACEACD4FEAC1CD81EBDD7E20DD4C -:10166000BE0F38083CDD770FDDCB0EBE3A4BE4FEF3 -:1016700014D8FE16D0DD3420C93E02C385E8324FAF -:10168000E4DD7E2157CBBA17DD7E2217F5E61F4F2A -:10169000F117171717E60F47DD7E231E06FE0430ED -:1016A0005C070707078047DD7220DD560ECB7220EE -:1016B0000E79DDBE0C200878DDAE0EE63F2837CB74 -:1016C0007A200FD5C5CD92EBC1D11E033A4CE43C34 -:1016D0002827CD28EFCDDBEC3A4CE43C20153A4FDF -:1016E000E41E043C2013CD94EE1E053A4CE43C2845 -:1016F000081803CD4DEEC30CEFDD360EC07B324C27 -:10170000E4B7DDCB0EFEC9197E210C0019577EE629 -:101710001FCB12CE001FCB1A4F23237E0F0F0F0FAC -:10172000F5E60347F1E6F0814FD004C93AF9F1B785 -:10173000C0DDCB037EC0C5CD2EEFC1C0473A4BE420 -:10174000FE662806CDCFECCAEBF1C53A56E41F2A57 -:1017500052E4CB3CCB1D3002C640F5E52A45E43AC5 -:101760003FE43C5F500610293003E319E310F8E131 -:10177000CD4BEACD00ECCDEEF1BE2038F1CDC9EA7B -:10178000C13A4BE4FE66C8FE67281609C5CDE1F1F3 -:10179000C13C28577379B72012060A772310FC182A -:1017A0000AED5B2EE4EB010F00EDB0CDEEF177CD4D -:1017B0001AECAFC9E1E11833CDF7E8CDEEEA282BFA -:1017C0003A4BE4FE672811DDCB03BECD2CF1200B94 -:1017D000010F00CD58E81803CD2CF1CA59EFC3040E -:1017E000EFEB0E00210E012A16E4E5F6FFC9AF2A41 -:1017F00034E4067F862310FCC900000000000000CE -:10322000005581AA0A000000000000000000000014 -:10323000000000001209100901001001A8AAAAAAA2 -:10324000AAAAAAAAAAAAAAAAAAAA8400204188402D -:103250000000800444040000000110000821000068 -:103260000208100010008000480010420402000014 -:1032700000001108240808080100400000000000B8 -:10328000000000002040929044922480402400825C -:103290001020400010410090204844224022482045 -:1032A0000949400220800004000012084412929054 -:1032B0009048480004224044442422001210008216 -:1032C00000121140000108080008910822000201C4 -:1032D00041200091241004000020494200088290FF -:1032E000240042120001000084040400000842424D -:1032F00040208480000002102009402491000944ED -:103300000011018090040280888044000249244119 -:10331000082402120101100000400224901009004C -:1033200024841012820812200420001280800008D9 -:103330000004010101002008112412801049080234 -:103340000902040104002000008000000040100871 -:103350009004922444248190900404000080200072 -:10336000041000904420009010088000000100002C -:10337000008840020422010040002404480821483B -:1033800008090200000080400411008084244940A4 -:1033900008420224008124400004080001000400C7 -:1033A0000208202040024042000290080040002015 -:1033B0000100000000000000804090040121200175 -:1033C00001000000004000824022024002002481EF -:1033D00008800000102002240420202401020200A2 -:0000000000 - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/ZDDOS.ZRL b/Source/ZSDOS/Distribution/ZDDOS.ZRL deleted file mode 100644 index 800f2a33..00000000 Binary files a/Source/ZSDOS/Distribution/ZDDOS.ZRL and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZPATH.COM b/Source/ZSDOS/Distribution/ZPATH.COM deleted file mode 100644 index 5c0aa503..00000000 Binary files a/Source/ZSDOS/Distribution/ZPATH.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZSCONFIG.COM b/Source/ZSDOS/Distribution/ZSCONFIG.COM deleted file mode 100644 index 2cc26074..00000000 Binary files a/Source/ZSDOS/Distribution/ZSCONFIG.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZSDOS.HEX b/Source/ZSDOS/Distribution/ZSDOS.HEX deleted file mode 100644 index 7b32bc49..00000000 --- a/Source/ZSDOS/Distribution/ZSDOS.HEX +++ /dev/null @@ -1,254 +0,0 @@ -:0A0A0600C39BE44CE74CE74CE74CBF -:100A1000E7F1F100006DDDF1DDF1DDF1DDF1DDF19A -:100A2000DDF1DDF1000000000000000000008000AA -:100A300000000000000000000000000000000000B6 -:100A400000000000000000000000000000000000A6 -:100A50000000000000000000000000000000000096 -:100A60000000005A53444F5320312E3120436F7001 -:100A70007972696768742028632920313938372CE6 -:100A800038382020432E572E436F7472696C6C20C7 -:100A90002620482E462E426F776572AF476F672239 -:100AA0004CE4224EE4ED7361E4319BE4DDE5D5DDF9 -:100AB000E1DD225DE4DD225FE421E6E7E579324B0A -:100AC000E4FE0C380DFE31380DFE62D8FE68D0D63B -:100AD000314F21BBE8E521E2E409097E23666F4B33 -:100AE0007BE9CAE750E564E615F212F20FF25AE527 -:100AF00091E58EE5D5E695E5B7E6CFE80AE87AE92F -:100B0000B4EEA8EB6EE895E8A5E8BEEFFFEF02EFC4 -:100B1000B0E8E8E8B8E833ECE4E803EBDCE8C7E881 -:100B2000ECE8FBE8B4EFF4EF07E90FE91AE8BEE8F8 -:100B3000E0E8F4EFBEE8BEE8BEE8BEE8F7E8BEE8ED -:100B4000F0E8D8E8D7F1D4F1C2E8BFE8A4F1A4F105 -:100B5000CD75E5D8E5CD64E6E1C91C28141C28064E -:100B60001C2812C30CF23A29E4B73E01CC06F2A7C6 -:100B7000C9CD66E5C82129E47E3600B7CC09F2FE6E -:100B80000DC8FE0AC8FE09C8FE08C8FE20C9320307 -:100B9000003A0300C93A26E43227E413AF1213D512 -:100BA000CD75E5D1219FE5E52A5DE44E23FE0D28B4 -:100BB00002FE0ACA4EE6FE7F2804FE0820367EA703 -:100BC000C81B35D54623EB2126E44E237E2B770424 -:100BD00018051ACD93E61310F979964771D1D50E01 -:100BE00008C5CD0CF20E20CD0CF23E08CD64E6C156 -:100BF00010EDD1C9FE152804FE18200AAFB6C8E5CD -:100C0000CDC1E5E118F6FE122024E5CDD2E621267D -:100C1000E4360023463E20041803CD64E610FBE1D1 -:100C20004623EB0418051ACD53E61310F9C9FE103C -:100C300020072128E47E2F77C912E5CD53E6E13461 -:100C40007EB9280A3D1A13C0FE03C0C3CAE7E13EBD -:100C50000D1811FE20300DFE09280DF53E5ECD77F2 -:100C6000E6F1C640FE09200F3E20CD77E63A26E4A5 -:100C7000E60720F43E09C9C5D54FC5CDB7E6C1C5C5 -:100C8000CD0CF2C1C53A28E4B7C40FF2C179D1C185 -:100C90002126E434FE7F2815FE20D0FE092811FE0F -:100CA00008280A34FE0A2805FE0DC036023535C96B -:100CB0003E0786E6F877C9CD66E5C8CD75E5FE1333 -:100CC000200ACD09F2FE0320EEC3CAE73229E43E32 -:100CD00001C91149E71AFE24C813CD64E618F601CC -:100CE0006400CDEDE60E0ACDEDE601010116FF141C -:100CF0009130FC81F57AB02807477AC630CD54E5AB -:100D0000F1C94368616E676564244261642053657C -:100D100063746F72244E6F2044726976652446694D -:100D20006C6520572F50245A53444F5320657272DC -:100D30006F72206F6E20240D0A43616C6C3A202480 -:100D4000202046696C653A20240D0A243A5CE44F61 -:100D50000F385CC5D5CDD2E61127E7CDD5E63A2BC5 -:100D6000E4C641CD64E6113DE7CDD5E6D1CDD5E66B -:100D70001137E7CDD5E63A4BE4CDDFE63A4EE4A7AE -:100D80002829C1C5DDE53A4BE4FE132004CDF1EA84 -:100D9000E31140E7CDD5E6E1060B233E03B83E2E36 -:100DA000CC54E57EE67FCD54E510EFCDD2E6C13ED2 -:100DB0000490200D212CE47E2BBE2805C5CD81E9B1 -:100DC000C1CB4920183E01903005AF325CE4C7CD5D -:100DD00071E5A720FACD75E5FE03C018ED7867A789 -:100DE000C82EFF224CE43A4EE4B7280C3A2DE4DD3D -:100DF00077003A2CE4CD81E9ED7B61E4DD2A99E4CA -:100E00002A4CE4ED5B5FE47D44C9218000222EE49E -:100E1000CD37ECAF322BE411FFFFCD5DE83A15E49E -:100E2000CB57200621FCF1CD66E83A4BE4FE0D21BC -:100E3000FEF1C466E82AFEF1CD58EAEB21F8F1CDC7 -:100E400066E83A2BE4F5000000F1CD81E93A57E479 -:100E50001869237E2BD624C03D3257E4C97B2F5F0F -:100E60007A2F5721FAF17BA677237AA677C9CD1F6F -:100E7000E9DD7E00D63F280DDD7E0EFE3F2804DD35 -:100E8000360E003E0FCDF3EC2A34E4018000ED5B1A -:100E90002EE4EDB0C9DD2A58E4DD225DE4CD1FE982 -:100EA000CD0AED18E3CD1FE9CD6DEC3A5AE4180BED -:100EB000CD1FE9CDD7ED18F33A2BE4324CE4C9321B -:100EC00015E43A15E418F4CD1FE9CD02EE18DC2143 -:100ED0002200ED535FE4181B211153DD2AFCF1DDE4 -:100EE0002AFEF1DD2A3AE4DD2AFAF1DD2A36E4DDD4 -:100EF0002A2EE4224CE4C9325CE4C9212AE43C7E77 -:100F000028B97BE61F77C9CD2DE9CD2BEE189C21A2 -:100F10002000CD7FF1DD7221DD7122DD7023C93A21 -:100F20005CE4A720082A5DE4010D0009773EFF324A -:100F30004EE43A2BE45F2A5DE47E322DE4FE3F2846 -:100F400039DDE5DD2A5DE4E60FE528025E1DCD7A98 -:100F5000E9E1DD7E0DCB7F20073A2AE41802DDE5CA -:100F6000DD2A5DE4E61FDD7700F680DD770DDDE14B -:100F7000C92A0BE406041115E7E93A2BE4322CE404 -:100F80007B2AFAF1E60F47C461EAEB212BE4CB435D -:100F90002802BEC877D54FCD1BF27CB528D31130BF -:100FA000E4010200EDB02232E40E06091134E40E31 -:100FB00008EDB02A36E40E0FEDB0D1CB43C0CD47DB -:100FC000EAEB2AFAF1CD58EA22FAF13A15E4CB5FBE -:100FD000282A2A47E47CB54F2AFEF17BA56F7AA424 -:100FE000B53EFF28013C47B1C8AF676FB0280A790A -:100FF000B720092AFEF1CD58EA22FEF12A41E4CDBC -:101000005FEA444D2A3AE4E5545D13AF77EDB0E171 -:10101000ED5B45E47323722A32E4772377CDFCEA53 -:101020003EFFCD30EBCD1CEBCA4DE8CDF1EA7EFEA4 -:10103000E528EDFE2128E9CD52E80E01CD83ECCD67 -:1010400023EBD414EB18D9210000EB2101003A2B3B -:10105000E4B72804293D20FC7AB4677BB56FC90644 -:1010600003CB3CCB1D10FAC92A54E4CB3CCB1DCB9F -:101070003CCB1D2252E4EB210000ED4B3CE43E1141 -:10108000B7ED423F380209B7CB13CB123D2804ED30 -:101090006A18EDE52A49E419444DCD1EF2C1ED5B15 -:1010A00030E4CD30F2444DC321F2DD6E20CB153A51 -:1010B00040E4DDA60C673A3EE44704CD61EA507D8A -:1010C0002A5DE40E10094F093A42E4B75E2805098B -:1010D0005E23562B7AB3C92100003A3EE447EB2940 -:1010E000CB1310FBEB3A3FE4DDA620B35FC9CDACD8 -:1010F000EC3A56E42A34E4856FD024C921FFFF225C -:1011000054E4C92AFCF1CD4AEA22FCF1ED5B43E448 -:101110002A32E42313722B73C9CDF1EC2A54E47CF8 -:10112000A53CC92A32E4ED5B54E47B96237A9EC940 -:101130004F2A54E4232254E4ED5B43E47B957A9CEC -:1011400038BA7D0F0F0FE6603256E4C0C5CD68EAAD -:10115000CD3DECCD95EBCD37ECC12A47E4ED5B52AC -:10116000E4AFED52C8D82A34E4CDE0F1862A38E461 -:10117000190C200277C9BEC83A15E4CB67060011E6 -:1011800002E7C44CE7CD47EAEBCD5DE8CD35E8CDCD -:10119000FCEAAF189BCD27F21803CD2AF2B7C80698 -:1011A00001110AE72A09E4E9CD2DE9DDCB0E7EC065 -:1011B000CDD8ECCD19EBC8CDEEEA01100009EB2A31 -:1011C0005DE409EB4134351A2804BEC27AEF771387 -:1011D0002310F211ECFF19DD7E0CBE3808772323B3 -:1011E00023DD7E0F77CD08ECCDA6EF280DC50100DD -:1011F00000CD9EEFCD19EBC1280BC5CD08EC2A1C04 -:10120000E4CDB9F1C1C39EEFCDF1EA010B0009CBEA -:10121000BEDDCB0BBE1800CDF1EA3E0DCDF7EA36B0 -:1012200000CD68EA0EFFCD5AEBCD3DEC0E01CD9A14 -:10123000EB1804ED532EE4ED4B2EE41804ED4B3483 -:10124000E4C324F27BE6073C4FCB3ACB1BCB3ACB33 -:101250001BCB3ACB1B472A3AE4197E0710FD41C944 -:10126000C5CD44ECE6FED1B30F10FD77C9CDBDED81 -:10127000CDEEEA36E5237ED62420033257E423CB95 -:10128000BE0E00CDF1EA11100019435E2316003A9C -:1012900042E4B728030556237AB3280DE5C52A4151 -:1012A000E4B7ED52D460ECC1E110E0C9CDF1EA1130 -:1012B000080019ED5B13E41AA72004CB7E2010234D -:1012C000CB7E200BDDCB077EC83A15E4E602C02AB0 -:1012D0000FE40603111EE7E9CDE5ECC00602112379 -:1012E000E72A0DE4E92AFCF1CD4AEAED52C93E0CA9 -:1012F000213E0F325BE43EFF325AE4DD2258E4CD5A -:10130000FCEA2A47E47CB5C418F2AF676F2250E4C8 -:10131000DDCB07BECD30EBCD1CEB280EED5B58E4EA -:101320001AFEE52807D5CD23EBD1306BCDF1EA7E4F -:10133000FE2128D60E003A5BE44778B7285F1AEE04 -:101340003FE67F283B79B720223A15E41F301C2363 -:1013500023CB7E2B2B28141AFEE5280FAEE67F2820 -:10136000193EFF3251E4CDAFEE180F79FE0D280A79 -:10137000FE0C1A2811AEE67F209013230C0518BA34 -:101380003D3250E418F4AECD8CED18ECC5473A4030 -:10139000E42FE61FA0C1C9CDFCEAC37AEF2A50E4CE -:1013A0007CA520D4CD23EBD414EB2A52E4225FE4B5 -:1013B0003A54E4E603324CE4AF325AE4C9CDD8ECF7 -:1013C000CDEEECCD1CEBE1C8E5E521CFEDE3E9CDB9 -:1013D00017ECCD0AED18ECCDBDEDCDACEC2A5DE4FB -:1013E00011100019EBCDF1EA2323CBBE2B2B060BFA -:1013F00023131AE67FFE3F20017E17CB161F7710BE -:10140000EFC9CDBDEDDDE5D1CDF1EA060B23133EED -:1014100004B8200EE52A13E47EE1A72005CB7EC2A6 -:10142000CFEC1ACB1617CB1E10E3C901000051CD2B -:1014300015E9CDEEECCD1CEBC8CDF1EAEB210F00A8 -:10144000CD7FF17ADD962179DD9E2278DD9E23D451 -:1014500015E9CD0AED18DECD19EBC03A15E4CB6FD6 -:10146000C82A11E47CB5C87E23B7CA97EDE67FFE93 -:101470002420043A2CE43C3DE5CD81E9E17E23E6DD -:101480007FFE2420033A2AE4E61FE5CD5EE9CD196C -:10149000EBE128D3E5CDF1EA110A0019CB7E3A152C -:1014A000E41717E1380228BF3A2BE43C322DE4DD83 -:1014B000CB07FEC9CD1FE9DD360E00CD57EECD1CA2 -:1014C000EBC8DD7E07F5DD7E0CF5CDF1EA7EF6801A -:1014D000DDE5D1012000EDB0DD770DCD7AF1DD46FF -:1014E0000CDD4E0FF1DD770CB828040E00CB19DDB2 -:1014F000710FF1DDCB071617DDCB071E2A18E4C3E9 -:10150000B9F1CD1FE9DD360E00CDD8EC2A5DE47EC1 -:10151000F536E53E01CDF3ECF1DD7700CD1CEBC8EF -:101520002A5DE4CD52E8110F00190611AF772310A0 -:10153000FCDDCB07BEDDCB0BBECDF1EADDE5D1EBAB -:10154000012000EDB0CD17ECCD7AF12A1AE4C3B931 -:10155000F1DDCB0E7E2008CDABEB3A4CE43CC8CDA0 -:1015600085EF3813CD19EB20163A4FE4B72808CD94 -:1015700009EFCD1CEB200BCD7AF13EFFC3BBE8CDCC -:10158000C2EEAF18F7CDA6EFCB7037C00C79E61FCF -:101590004F20070478E63F4737C8DD362000DD716D -:1015A0000CDD700EA7C9DD4E0CDD460E79CD8CED3D -:1015B000CBB8B0C9CD2DE9AFCDF6F02804C9CD2DFB -:1015C000E9AF324FE4DD7E20FE802809DDBE0F3812 -:1015D000073E0118A7CDE9EFCDAAEA28F4CDD7EA56 -:1015E000CD7AEACD95EBC3E4F0CD51EF3A4CE4B7B8 -:1015F000C8E118DDCD2DE93EFFCDF6F02804C9CDB8 -:101600002DE93EFF324FE4CDD8ECDDCB097E200E34 -:10161000CDC4EC2A13E47EA72007DDCB087EC2CF21 -:10162000ECDDCB207EC4E9EFCDAAEAC2C3F0E579B8 -:10163000B728043DCDC0EA626B7AB3280B1BE5D511 -:10164000CD44EC1F3020D1E1ED4B41E47D917C98FD -:10165000300E23D5E5EBCD44EC1F300AE1D118D98B -:101660007AB320D518073717CD68ECD1E1E17AB30A -:10167000287FDDCB0EBE733A42E4B7280223720EF8 -:10168000023A3FE4DDA62028020E003A4BE4D628B9 -:101690002033D52A34E40680772310FCCDD7EA3AEC -:1016A0003FE447042FA35F0E02E5D5C5CD7AEACD0E -:1016B0003DECC1C5CD9AEBC1D1E10E001C10EACDC5 -:1016C00037ECD10E00DDCB0EBEC5CDD7EACD7AEA20 -:1016D000C1CD9AEBDD7E20DDBE0F38083CDD770FF3 -:1016E000DDCB0EBE3A4BE4FE14D8FE16D0DD34201E -:1016F000C93E02C3BBE8324FE4DD7E2157CBBA17A7 -:10170000DD7E2217F5E61F4FF117171717E60F4773 -:10171000DD7E231E06FE04305C070707078047DDD9 -:101720007220DD560ECB72200E79DDBE0C200878BB -:10173000DDAE0EE63F2837CB7A200FD5C5CDABEB1B -:10174000C1D11E033A4CE43C2827CD9EEFCDF1ECED -:101750003A4CE43C20153A4FE41E043C2013CD09DA -:10176000EF1E053A4CE43C28081803CDC2EEC382B4 -:10177000EFDD360EC07B324CE4B7DDCB0EFEC9196F -:101780007E210C0019577EE61FCB12CE001FCB1A0C -:101790004F23237E0F0F0F0FF5E60347F1E6F0818D -:1017A0004FD004C9CD1FE9CD19EB28312A1EE43AE8 -:1017B0004BE4FE66280A2A20E4E5CDE5ECE1281D8D -:1017C000CDA6EF20183A56E4ED5B34E40117ECE5C2 -:1017D0002A2EE4C90E01210E002A16E4E5F6FFC9FF -:1017E000067F862310FCC9000000000000000000F6 -:1017F00000010000000000000000000000000000E8 -:10322000005585AA0A000000000000000000000010 -:10323000000000001209100901001001A8AAAAAAA2 -:10324000AAAAAAAAAAAAAAAAAAAA8400204188402D -:10325000000080044404200000022000104200000E -:103260000420011000021020002000000190002026 -:103270008408040000000022104810101002008092 -:103280000000000000000000004080242189244943 -:103290000081480004214080002082002041908865 -:1032A0004480449040129244129000082000010093 -:1032B00080040291842424241212204044442422B5 -:1032C000001210008200121140000108080008914D -:1032D000082200020141200091241004000020492E -:1032E00042000882902400421200010000042020C5 -:1032F0000000401012020221040400108000490066 -:1033000022890448200288080084241101890004CD -:1033100092488210480424020220000080044820C1 -:1033200089040042080941040900000108800420C2 -:10333000200002004140400000084204890420446B -:1033400012824082004100010008000020010000BC -:10335000080201924092848824101292800000009A -:1033600010048000020092080400122208102008B5 -:103370008020810001444020011000200000004016 -:1033800012488040240000088024011242081242A2 -:10339000820000000080400411008084244940081D -:1033A00042022400812440000408000100040002BD -:1033B0000820204002404200029008004000200106 -:1033C0000000000000000080409004012120010165 -:1033D0000000000040420211844804080000000080 -:0000000000 - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/ZSDOS.ZRL b/Source/ZSDOS/Distribution/ZSDOS.ZRL deleted file mode 100644 index e43d1b0a..00000000 Binary files a/Source/ZSDOS/Distribution/ZSDOS.ZRL and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZSVSTAMP.CIM b/Source/ZSDOS/Distribution/ZSVSTAMP.CIM deleted file mode 100644 index 4756dfac..00000000 Binary files a/Source/ZSDOS/Distribution/ZSVSTAMP.CIM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZSVSTAMP.COM b/Source/ZSDOS/Distribution/ZSVSTAMP.COM deleted file mode 100644 index 026d5d7a..00000000 Binary files a/Source/ZSDOS/Distribution/ZSVSTAMP.COM and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZSVSTAMP.DOC b/Source/ZSDOS/Distribution/ZSVSTAMP.DOC deleted file mode 100644 index 2a8a7c1e..00000000 --- a/Source/ZSDOS/Distribution/ZSVSTAMP.DOC +++ /dev/null @@ -1,118 +0,0 @@ - ZSVSTAMP USAGE NOTES - - - -1.0 INTRODUCTION - - ZSVSTAMP is a utility program that saves the create -date/time stamp of a given file in memory. At a later time, -ZSVSTAMP can restore the create stamp to a file. This can be -useful when modifying a file with an editor that actually creates -a new copy of the file rather than modifying it in place. -ZSVSTAMP allows the original creation date of the document to be -retained. - - In order to support all types of date stamping under ZSDOS, -ZSVSTAMP uses the get/set stamp functions of ZSDOS (or ZDDOS) and -thus may only be run under these operating systems. It also -requires ZCPR3 with multiple command line, external FCB and -message buffer. If an attempt is made to run ZSVSTAMP on a -system that does not meet these requirements, the program will -abort with an error message. - - - -2.0 OPERATION - - ZSVSTAMP has two modes of operation -- Manual and Automatic. - - - -2.1 Automatic Mode - - This mode is the most commonly used. It is extremely well -suited for use in alias scripts and can make the whole process of -saving and restoring date stamps virtually transparent to the -user. The syntax is: - - ZSVSTAMP approg [ufn] - -where "approg" is the program, such as an editor, that you wish -to run and "ufn" is an unambiguous file name to be modified by -"approg." When a command of this type is given, ZSVSTAMP saves -"ufn"'s creation date in protected memory. It then causes -"approg" to be run, and when "approg" finishes, ZSVSTAMP is -automatically run again to restore the original create stamp to -"ufn." If "ufn" does not exist, or if the disk does not support -date stamping, ZSVSTAMP displays a warning message and -immediately passes control to "approg" without attempting to save -a stamp. In this situation, ZSVSTAMP is not rerun when "approg" -completes execution. - - Some editors allow a syntax such as - - EDIT oldfile newfile - -When ZSVSTAMP is invoked with more than one parameter following -the application name, no stamps are saved or restored. This -feature can be disabled if desired, (see the section on -customization). - - - -2.2 Manual Mode - - Manual mode can be used to save or restore a file's create -stamp. The syntax is: - - ZSVSTAMP ufn /G or /S - -to Get or Save a file's create stamp, or: - - ZSVSTAMP ufn /P or /R - -to Put or Restore a saved stamp back onto a file. - - - -3.0 CUSTOMIZING ZSVSTAMP - -There are five configuration flags located near the beginning of -the program. Each flag is preceeded by an ASCII string to help -identify its function. These flags may be patched to customize -ZSVSTAMP as desired. - - The first four flags determine whether or not various -warning messages can be displayed when ZSVSTAMP is being run in -Automatic Mode. Setting a flag to 0 disables its associated -message; any other value enables the message. The flags are -labeled "NOSTMP," "NOFILE," "READERR," and "UPDTERR," and they -affect the "Disk has no time/date stamps," "File not found," -"Can't read time/date stamp," and "Can't update time/date stamp" -messages respectively. The program is distributed with all four -messages enabled. Please note that these flags have no effect in -Manual Mode where error messages are always enabled. - - The fifth and final configuration flag is labeled -"REPLALWS." It determines what ZSVSTAMP will do when more than -one parameter follows the application name in an Automatic Mode -command. If the byte following the "REPLALWS" label equals 0, -ZSVSTAMP checks to see if there is more than one parameter -following the application program name. If there is, ZSVSTAMP -simply exits to the application without saving or updating any -stamps. (This is the default setting in the distributed -version.) If the "REPLALWS" flag is non-zero, no such check is -made. - - - -4.0 CONTACTING THE AUTHOR - - Howard Goldstein may be contacted at: - - Newton Centre Z-Node, (Z-Node 3): 617/965-7259 - - Ladera Z-Node, (Z-Node 2): 213/670-9465 - - Home phone, (voice): 203/787-1918 - \ No newline at end of file diff --git a/Source/ZSDOS/Distribution/ZXD.CFG b/Source/ZSDOS/Distribution/ZXD.CFG deleted file mode 100644 index f202ae59..00000000 Binary files a/Source/ZSDOS/Distribution/ZXD.CFG and /dev/null differ diff --git a/Source/ZSDOS/Distribution/ZXD.COM b/Source/ZSDOS/Distribution/ZXD.COM deleted file mode 100644 index 20395673..00000000 Binary files a/Source/ZSDOS/Distribution/ZXD.COM and /dev/null differ diff --git a/Source/ZSDOS/Makefile b/Source/ZSDOS/Makefile index 55731ea4..a8c54f49 100644 --- a/Source/ZSDOS/Makefile +++ b/Source/ZSDOS/Makefile @@ -2,6 +2,8 @@ SYSFILES = zsys_wbw.sys zsys_una.sys BINFILES = zsys_wbw.bin zsys_una.bin OBJECTS = $(SYSFILES) $(BINFILES) OTHERS = zsdos.rel zsdos.err loader.bin zsdos.bin +NOCOPY = zsys_wbw.bin zsys_una.bin loader.* zsdos.* +DEST = ../../Binary/ZSDOS TOOLS = ../../Tools CCP = ../ZCPR-DJ/zcpr.bin @@ -13,9 +15,9 @@ zsdos.rel: zsdos.z80 zsdos.bin: zsdos.rel $(ZXCC) LINK -$@=$<[LD800] -%.sys: %.bin loader.bin - cat loader.bin $*.bin > $@ - +%.sys: %.bin loader.bin + cat loader.bin $*.bin > $@ + zsys_wbw.bin: $(CCP) zsdos.bin ../CBIOS/cbios_wbw.bin cat $(CCP) zsdos.bin ../CBIOS/cbios_wbw.bin > $@ diff --git a/Source/ZZRCC/Build.cmd b/Source/ZZRCC/Build.cmd index f520b11a..d0e105c4 100644 --- a/Source/ZZRCC/Build.cmd +++ b/Source/ZZRCC/Build.cmd @@ -1,41 +1,26 @@ -:: @echo off +@echo off setlocal -set ROMFILE=..\..\Binary\RCZ280_zzrcc.rom -set ROMSIZE=262144 - set TOOLS=../../Tools set PATH=%TOOLS%\srecord;%PATH% -if exist ..\..\Binary\RCZ280_zzrcc.rom call :build_zzrcc - -if exist ..\..\Binary\RCZ280_zzrcc_ram.rom call :build_zzrcc_ram - -goto :eof - -:build_zzrcc - -srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x0 0x200 zzrcc_cfldr.bin -binary -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x1B8 0x200 zzrcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zzrcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ280_zzrcc.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_zzrcc_prefix.dat - -copy /b ..\..\Binary\hd1k_zzrcc_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zzrcc_combo.img || exit /b +for %%f in (..\..\Binary\RCZ280_zzrcc_*.rom) do call :build %%~nf goto :eof -:build_zzrcc_ram +:build +echo. +echo Creating %1 disk image... +echo. srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zzrcc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zzrcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zzrcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary -srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\RCZ280_zzrcc_ram.rom -binary -offset 0x24000 -o temp.dat -binary -move temp.dat ..\..\Binary\hd1k_zzrcc_ram_prefix.dat +srec_cat temp.dat -binary -exclude 0x24000 0xA4000 ..\..\Binary\%1.rom -binary -offset 0x24000 -o temp.dat -binary +move temp.dat ..\..\Binary\%1_hd1k_prefix.dat -copy /b ..\..\Binary\hd1k_zzrcc_ram_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\hd1k_zzrcc_ram_combo.img || exit /b +copy /b ..\..\Binary\%1_hd1k_prefix.dat + ..\..\Binary\hd1k_cpm22.img + ..\..\Binary\hd1k_zsdos.img + ..\..\Binary\hd1k_nzcom.img + ..\..\Binary\hd1k_cpm3.img + ..\..\Binary\hd1k_zpm3.img + ..\..\Binary\hd1k_ws4.img ..\..\Binary\%1_hd1k_combo.img || exit /b goto :eof diff --git a/Source/ZZRCC/Makefile b/Source/ZZRCC/Makefile index f0bbde6a..ea1249c8 100644 --- a/Source/ZZRCC/Makefile +++ b/Source/ZZRCC/Makefile @@ -1,23 +1,13 @@ -HD1KZZRCCPREFIX = hd1k_zzrcc_prefix.dat -HD1KZZRCCCOMBOIMG = hd1k_zzrcc_combo.img -HD1KZZRCCRAMPREFIX = hd1k_zzrcc_ram_prefix.dat -HD1KZZRCCRAMCOMBOIMG = hd1k_zzrcc_ram_combo.img -ZZRCCROM = ../../Binary/RCZ280_zzrcc.rom -ZZRCCRAMROM = ../../Binary/RCZ280_zzrcc_ram.rom -HD1KIMGS = ../../Binary/hd1k_cpm22.img ../../Binary/hd1k_zsdos.img ../../Binary/hd1k_nzcom.img \ - ../../Binary/hd1k_cpm3.img ../../Binary/hd1k_zpm3.img ../../Binary/hd1k_ws4.img - -OBJECTS := +DEST=../../Binary -ifneq ($(wildcard $(ZZRCCROM)),) - OBJECTS += $(HD1KZZRCCPREFIX) $(HD1KZZRCCCOMBOIMG) -endif +HD1KIMGS = $(DEST)/hd1k_cpm22.img $(DEST)/hd1k_zsdos.img $(DEST)/hd1k_nzcom.img \ + $(DEST)/hd1k_cpm3.img $(DEST)/hd1k_zpm3.img $(DEST)/hd1k_ws4.img -ifneq ($(wildcard $(ZZRCCRAMROM)),) - OBJECTS += $(HD1KZZRCCRAMPREFIX) $(HD1KZZRCCRAMCOMBOIMG) -endif +ROMS := $(wildcard $(DEST)/RCZ280_zzrcc_*.rom) +ROMS := $(patsubst $(DEST)/%.rom,%,$(ROMS)) -DEST=../../Binary +OBJECTS := $(patsubst %,%_hd1k_prefix.dat,$(ROMS)) +OBJECTS += $(patsubst %,%_hd1k_combo.img,$(ROMS)) TOOLS = ../../Tools @@ -25,24 +15,13 @@ include $(TOOLS)/Makefile.inc DIFFPATH = $(DIFFTO)/Binary -$(HD1KZZRCCPREFIX): +%_hd1k_prefix.dat: $(DEST)/%.rom srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x0 0x200 zzrcc_cfldr.bin -binary -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1B8 0x200 zzrcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zzrcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(ZZRCCROM) -binary -offset 0x24000 -o temp.dat -binary + srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $< -binary -offset 0x24000 -o temp.dat -binary mv temp.dat $@ -$(HD1KZZRCCRAMPREFIX): - srec_cat -generate 0x0 0x100000 --constant 0x00 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x0 0x200 zzrcc_cfldr.bin -binary -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x1B8 0x200 zzrcc_ptbl.bin -binary -offset 0x1B8 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x1F000 0x20000 zzrcc_mon.bin -binary -offset 0x1F000 -o temp.dat -binary - srec_cat temp.dat -binary -exclude 0x24000 0xA4000 $(ZZRCCRAMROM) -binary -offset 0x24000 -o temp.dat -binary - mv temp.dat $@ - -$(HD1KZZRCCCOMBOIMG): $(HD1KZZRCCPREFIX) $(HD1KIMGS) - cat $^ > $@ - -$(HD1KZZRCCRAMCOMBOIMG): $(HD1KZZRCCRAMPREFIX) $(HD1KIMGS) +%_hd1k_combo.img: %_hd1k_prefix.dat $(HD1KIMGS) cat $^ > $@ diff --git a/Source/ver.inc b/Source/ver.inc index 93f95abc..35b8ccb2 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.38" +#DEFINE BIOSVER "3.5.0-dev.95" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index d00f1741..15a09a02 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.38" + db "3.5.0-dev.95" endm diff --git a/Tools/Makefile b/Tools/Makefile index 74baac9a..a4bbdb71 100644 --- a/Tools/Makefile +++ b/Tools/Makefile @@ -3,7 +3,7 @@ # .ONESHELL: -.SHELLFLAGS = -cex +.SHELLFLAGS = -ce UNAME := $(shell uname) diff --git a/Tools/Makefile.inc b/Tools/Makefile.inc index 10be67c5..1701be38 100644 --- a/Tools/Makefile.inc +++ b/Tools/Makefile.inc @@ -43,6 +43,7 @@ TASM=$(BINDIR)/uz80as -t z80 TASMFLAGS= OPENSPIN=$(BINDIR)/openspin CPMCP=$(BINDIR)/cpmcp +CPMLS=$(BINDIR)/cpmls CPMCHATTR=$(BINDIR)/cpmchattr # @@ -56,7 +57,7 @@ CPM=$(TOOLS)/cpm/bin80/ # exit if any command returns a non-zero result ("x"). # .ONESHELL: -.SHELLFLAGS = -cex +.SHELLFLAGS = -ce %.com: %.asm @if [ "$(USETASM)" = 1 ] ; then \ @@ -70,52 +71,52 @@ CPM=$(TOOLS)/cpm/bin80/ fi %.rom: %.asm - $(TASM) $(TASMFLAGS) $< $@ $*.lst + @$(TASM) $(TASMFLAGS) $< $@ $*.lst %.hex: %.asm - $(ZXCC) $(CPM)/MAC -$< -$$PO + @$(ZXCC) $(CPM)/MAC -$< -$$PO %.bin: %.ASM - $(ZXCC) $(CPM)/MAC -$< -$$PO + @$(ZXCC) $(CPM)/MAC -$< -$$PO $(ZXCC) $(CPM)/MLOAD25 -tmp.bin=$*.hex mv tmp.bin $@ rm -f /tmp/casefn.cache rm -f $$($(CASEFN) $*.hex) %.com: %.z80 - $(ZXCC) $(CPM)/Z80ASM -$(basename $<)/F + @$(ZXCC) $(CPM)/Z80ASM -$(basename $<)/F rm -f /tmp/casefn.cache mv $$($(CASEFN) $@) tmp.com ; mv tmp.com $@ %.bin: %.asm - $(TASM) $(TASMFLAGS) $< $@ $(basename $<).lst + @$(TASM) $(TASMFLAGS) $< $@ $(basename $<).lst %.rel: %.asm - $(ZXCC) $(CPM)/RMAC -$< + @$(ZXCC) $(CPM)/RMAC -$< %.rel: %.z80 - $(ZXCC) $(CPM)/Z80ASM -$(basename $<)/MF + @$(ZXCC) $(CPM)/Z80ASM -$(basename $<)/MF #%.hex: %.z80 -# $(ZXCC) $(CPM)/Z80ASM -$(basename $<)/HF +# @$(ZXCC) $(CPM)/Z80ASM -$(basename $<)/HF %.hex: %.z80 - $(ZXCC) $(CPM)/SLR180 -$(basename $<)/HF + @$(ZXCC) $(CPM)/SLR180 -$(basename $<)/HF %.rel: %.azm - $(ZXCC) $(CPM)/ZSM =$< -/L + @$(ZXCC) $(CPM)/ZSM =$< -/L %.bin: %.rel - $(ZXCC) $(CPM)/LINK -$@=$< + @$(ZXCC) $(CPM)/LINK -$@=$< %.rel: %.mac - $(ZXCC) $(CPM)/M80 -=$(basename $<) + @$(ZXCC) $(CPM)/M80 -=$(basename $<) %.com: %.rel - $(ZXCC) $(CPM)/L80 -$(basename $<),$(basename $<).com/n/e + @$(ZXCC) $(CPM)/L80 -$(basename $<),$(basename $<).com/n/e %.eeprom: %.spin - $(OPENSPIN) -e $< + @$(OPENSPIN) -e $< # # first target is default diff --git a/Tools/simh/Sim.cmd b/Tools/simh/Sim.cmd index 3e501ab8..7ba86838 100644 --- a/Tools/simh/Sim.cmd +++ b/Tools/simh/Sim.cmd @@ -1,5 +1,5 @@ @echo off -set ROM=..\..\Binary\SBC_simh.rom +set ROM=..\..\Binary\SBC_simh_std.rom if not "%1"=="" set ROM=..\..\Binary\%1.rom if not exist %ROM% goto romerr :: start C:\Users\WWarthen\Bin\putty.exe -load "SIMH Telnet" diff --git a/Tools/simh/altairz80.exe b/Tools/simh/altairz80.exe index 5e34f627..8222fb91 100644 Binary files a/Tools/simh/altairz80.exe and b/Tools/simh/altairz80.exe differ diff --git a/Tools/simh/altairz80_doc.pdf b/Tools/simh/altairz80_doc.pdf new file mode 100644 index 00000000..00edf44f Binary files /dev/null and b/Tools/simh/altairz80_doc.pdf differ diff --git a/Tools/simh/simh.pdf b/Tools/simh/simh.pdf new file mode 100644 index 00000000..fc903686 Binary files /dev/null and b/Tools/simh/simh.pdf differ diff --git a/Tools/simh/simh_doc.pdf b/Tools/simh/simh_doc.pdf new file mode 100644 index 00000000..efca7269 Binary files /dev/null and b/Tools/simh/simh_doc.pdf differ diff --git a/Tools/simh/simh_faq.pdf b/Tools/simh/simh_faq.pdf new file mode 100644 index 00000000..45c23060 Binary files /dev/null and b/Tools/simh/simh_faq.pdf differ diff --git a/Tools/unix/Makefile b/Tools/unix/Makefile index ebdecfb5..7cefdb27 100644 --- a/Tools/unix/Makefile +++ b/Tools/unix/Makefile @@ -3,7 +3,7 @@ # .ONESHELL: -.SHELLFLAGS = -cex +.SHELLFLAGS = -ce UNAME := $(shell uname) ifeq ($(UNAME), Linux) @@ -20,4 +20,4 @@ all: @$(foreach subdir,$(SUBDIRS),$(MAKE) --directory $(subdir) all;) clean: - @$(foreach subdir,$(SUBDIRS),$(MAKE) --directory $(subdir) clean;) \ No newline at end of file + @$(foreach subdir,$(SUBDIRS),$(MAKE) --directory $(subdir) clean;) diff --git a/Tools/unix/uz80as/uz80as.c b/Tools/unix/uz80as/uz80as.c index 35c13ac0..eea8715e 100644 --- a/Tools/unix/uz80as/uz80as.c +++ b/Tools/unix/uz80as/uz80as.c @@ -923,7 +923,7 @@ static int checksum(int a, int b) n = 0; while (a < b) - n += s_mem[a++]; + n ^= s_mem[a++]; return n; }