Compare commits

...

223 Commits

Author SHA1 Message Date
Wayne Warthen
1505c995e3 Bump Version 2024-10-18 10:02:50 -07:00
Wayne Warthen
9ba6627da8 Merge pull request #443 from dinoboards/dean/fixes-for-int-handling-of-msx-keyboard
msx-keyboard: corrected implementation of msx-keyboard's tick hook
2024-10-18 09:47:27 -07:00
Wayne Warthen
0558e84e09 Merge pull request #442 from kiwisincebirth/map/publish-cpm22
Publish the CPM2.2 CPM.SYS Binary Files in a new Binary/CPM22 folder
2024-10-18 09:44:21 -07:00
Dean Netherton
fa45185945 msx-keyboard: corrected implementation of msx-keyboard's integration to the timer tick handler 2024-10-18 18:04:54 +11:00
Mark Pruden
99265f03d1 QPM Copy SYS Files to the Binary Distribution Folder 2024-10-18 11:45:39 +11:00
Mark Pruden
a2fcab4045 Minor Documentation fix in Readme File 2024-10-18 10:49:37 +11:00
Mark Pruden
b3b4426a46 Publish the ZSDOS .SYS Binary Files in a new Binary/ZSDOS folder 2024-10-18 10:42:38 +11:00
Wayne Warthen
4ff6961539 Merge pull request #441 from kiwisincebirth/map/diskio-hbios-slice
CPM3 DiskIO routines now use HBIOS EXT_SLICE function during Drive SEL
2024-10-17 11:10:38 -07:00
Mark Pruden
72fcee24f3 Publish the CPM2.2 CPM.SYS Binary Files in a new Binary/CPM22 folder 2024-10-17 15:42:41 +11:00
Mark Pruden
8e56b270c4 CPM3 DiskIO routines now use HBIOS EXT_SLICE function during Drive Select 2024-10-17 13:39:31 +11:00
Wayne Warthen
42e50889be Refactor ROM Loader Baud Rate Change
- The baud rate change functionality in ROM Loader was refactored to reduce it's size and be consistent with the approach used in the MODE command.
2024-10-16 12:59:13 -07:00
Wayne Warthen
b3a250b63f Merge pull request #439 from kiwisincebirth/map/cpm-loader
CPM3 Loader Using New HBIOS SLICE Function
2024-10-15 10:32:12 -07:00
Wayne Warthen
30d79fe7f7 Merge pull request #438 from kiwisincebirth/map/hbios-slice0
Fix: If the Slice=0 and No CPM partition
2024-10-15 10:28:29 -07:00
Mark Pruden
221b1b408c CPM3 Loader Using New HBIOS SLICE Function 2024-10-15 15:40:56 +11:00
Mark Pruden
1f383a3639 Fix: If the Slice=0 and No CPM partition, boot the disk, ignore all Calculations and checks. 2024-10-15 11:09:49 +11:00
Wayne Warthen
f3e0de4a97 Fix Fuzix Boot
- Minor issue in recent updates to Boot Loader broke Fuzix loading.  This is corrected.
2024-10-14 13:18:14 -07:00
Wayne Warthen
48689b8191 Merge pull request #437 from wdl1908/master
Disable LCD as this board does not support it.
2024-10-14 13:04:43 -07:00
Willy De la Court
9b99a400f9 Disable LCD as this board does not support it. 2024-10-14 15:53:10 +02:00
Wayne Warthen
524b631a22 Add REBOOT App by MartinR 2024-10-13 14:10:21 -07:00
Wayne Warthen
0f63bb0838 Merge pull request #436 from kiwisincebirth/map/move-hbios-diomed
move hbios function diomed
2024-10-12 13:14:25 -07:00
Mark Pruden
acce0ec15c Merge remote-tracking branch 'origin/master' into map/move-hbios-diomed
# Conflicts:
#	Source/HBIOS/hbios.asm
2024-10-12 15:09:25 +11:00
Mark Pruden
00b6121391 Move HBIOS SYSGET_DIOMED Function to new high level function 2024-10-12 15:02:23 +11:00
Wayne Warthen
ea6e31c58b Add MBASIC Sample App ASCIIART 2024-10-11 15:36:14 -07:00
Wayne Warthen
75e10b64e3 Missing Comment Markers, Issue #435 2024-10-11 15:17:31 -07:00
Wayne Warthen
6005472fa7 Merge pull request #434 from kiwisincebirth/map/hbios-tweak
Minor tweekas after last commit
2024-10-10 11:39:00 -07:00
Mark Pruden
d7b7b8096e Minor tweekas after last commit
* Moved DIOMED_MID variable - so it would be overwritten at start of main Calculation
* Removed code in SYS_GETDIOMED1A - since SYS_GETDIOMED6A did exactly this anyway
* Removed code that set MID_HD - since it would now already be set.
2024-10-10 16:38:23 +11:00
Wayne Warthen
3c1f1ac70a SYSGET_DIOMED Early Return Fix
- Updated SYSGET_DIOMED  to return Media ID when function returns early (non-HD).
2024-10-09 13:54:42 -07:00
Wayne Warthen
ee60c11dec Merge pull request #433 from kiwisincebirth/map/cbios-drive-select
cbios changes to use HBIOS for Drive Slice Selection
2024-10-09 13:51:43 -07:00
Mark Pruden
65ca9af785 cbios changes to use HBIOS for Drive Slice Selection 2024-10-09 18:57:07 +11:00
Wayne Warthen
76a5f210a0 Merge pull request #432 from kiwisincebirth/map/hbios-diomed
Improvements to HBIOS
2024-10-08 10:30:12 -07:00
Mark Pruden
06d9561f37 Improvements to HBIOS (a) SYSGET DIOMED : If Slice > 0 for NON High Capacilty drives now returns an error (b) SYSGET DIOMED now returns device attributes in Reg B (c) Documentation improvements 2024-10-08 19:00:27 +11:00
Wayne Warthen
ecc7a15a7e Merge pull request #431 from kiwisincebirth/map/romldr-sysget-diomed
RomLdr.asm now uses HBIOS SYSGET DIOMED to discover Slice Sector offset
2024-10-07 10:00:36 -07:00
Mark Pruden
2ca487b936 Doc and bump version numbers 2024-10-07 12:33:45 +11:00
Mark Pruden
af0848f138 Rom Loader now uses new HBIOS SYS_GET DIO_MED function to retrieve Slice Sector and media ID, during disk boot 2024-10-07 12:30:09 +11:00
Wayne Warthen
a5c68c6248 Merge pull request #430 from kiwisincebirth/map/hbios-function
Added new HBIOS Function SYSGET_DIOMED
2024-10-06 14:50:45 -07:00
Wayne Warthen
6500d243eb Update ide.asm 2024-10-06 14:31:00 -07:00
Mark Pruden
497e5333c4 Added new HBIOS Function SYSGET_DIOMED 2024-10-06 12:33:29 +11:00
Wayne Warthen
9ad58ac59c Front Panel Switch Support for eZ80 2024-10-04 17:47:08 -07:00
Wayne Warthen
fb9f9774d7 eZ80 Compatibility Enhancements
See Issue #400
2024-10-03 17:36:17 -07:00
Wayne Warthen
5239eed0e8 DSKY Tweaks 2024-09-27 10:19:26 -07:00
Wayne Warthen
70a961ad55 Update COPYSL to v0.2 from Mark Pruden
Co-Authored-By: Mark Pruden <github@mp.tidykiwi.com>
2024-09-27 09:00:28 -07:00
Wayne Warthen
49f4e3f292 Fix .gitignore
Co-Authored-By: Mark Pruden <github@mp.tidykiwi.com>
2024-09-26 19:32:40 -07:00
Wayne Warthen
3ca283d08f COPYSL Utility from Mark Pruden
Co-Authored-By: Mark Pruden <github@mp.tidykiwi.com>
2024-09-26 19:24:47 -07:00
Wayne Warthen
08a53f54d0 Refactor DSKY 2024-09-26 16:18:51 -07:00
Wayne Warthen
11459f989e Doc Fix Issue #427 2024-09-23 11:51:13 -07:00
Wayne Warthen
b07055a73b Merge pull request #429 from dinoboards/dean-ez80-6
ez80: updated reference to renamed firmware repo
2024-09-22 18:05:42 -07:00
Dean Netherton
4618de6621 ez80: updated reference to renamed firmware repo 2024-09-22 10:34:52 +10:00
Wayne Warthen
207fe5f927 Minor
- Cosmetic
- Add eZ80 to LCD driver
- Minor fix in uz80as
2024-09-20 13:38:40 -07:00
Wayne Warthen
fe6cba2b1b Merge pull request #428 from dinoboards/dean-ez80-5
Dean ez80 5
2024-09-20 13:30:16 -07:00
Dean Netherton
a69797d0cf ez80: adjusted I/O bus timings 2024-09-20 16:43:41 +10:00
Dean Netherton
d3019dbb88 ez80: port sn76489 driver to support 16 bit i/o 2024-09-20 16:39:23 +10:00
Dean Netherton
7cda84b4ce ez80: change default cpu freq to 20Mhz 2024-09-20 14:48:54 +10:00
Dean Netherton
a24960a7d2 ez80: specific implementation of DELAY and VDELAY function (using firmware helper)
The delay function is delegated to the on-chip ROM.

The on-chip ROM uses a programmable reload timer that is calibrated for a range of
CPU frequencies and wait states.
2024-09-20 12:26:20 +10:00
Wayne Warthen
028a153568 Clean Up
- Minor cleanup related to latest GM7303 work.
2024-09-19 10:30:07 -07:00
Wayne Warthen
05960f8b22 Merge pull request #426 from drj113/master
gm7303 changes to support DSKY operations
2024-09-19 10:25:27 -07:00
drj113
610a2746f5 gm7303 changes to support DSKY operations
Changes to support GM7303 as a DSKY device
2024-09-19 13:46:55 +10:00
Wayne Warthen
ab9f0be267 Relocate Z280 IVT
The Z280 Interrupt Vector Table must be gin on a 4K boundary.  Recent HBIOS changes caused it's location to result in a very large slack space.  This update moves the Z280 IVT to a more memory efficient location.
2024-09-18 12:50:24 -07:00
Wayne Warthen
d3489b642a Bump Version 2024-09-18 12:00:12 -07:00
Wayne Warthen
8edefc1d8f HEATH Updates
- Support HEATH MSX Graphics card in HBIOS
- Support HEATH MSX Graphics card in TUNE app
- Startup HEATH at 8MHz to ensure hardware compatibility/detection
2024-09-18 11:39:07 -07:00
Dean Netherton
63eebc8534 ez80: fix issue with incorrect application of EZ80WSMD_CYCLES values 2024-09-18 20:27:32 +10:00
Wayne Warthen
6beeef9b1e Minor Doc Updates
- Update User Guide w/ eZ80 Platform information.
- Regen documentation
2024-09-16 11:50:45 -07:00
Wayne Warthen
ab043e5cab Bump Version
- Bump dev version build number to post eZ80 changes.
2024-09-16 09:51:42 -07:00
Wayne Warthen
bba9c5e26b Merge pull request #425 from dinoboards/dean-ez80-4
ez80: fix for FPLEDS to ensure 16 bit I/O
2024-09-16 09:45:21 -07:00
Dean Netherton
a6a32bbd70 ez80: fix issue with uart baud rate translation for numbers requiring more than 16 bits (windows build issue) 2024-09-16 18:34:43 +10:00
Dean Netherton
9aa0fbd2dc ez80: fixes within ez80 drivers to fix overflow issue with PRTS macro 2024-09-16 18:23:13 +10:00
Dean Netherton
9dd54cb781 ez80: fix for FPLEDS to ensure 16 bit I/O 2024-09-16 17:45:00 +10:00
Wayne Warthen
1d8c0c9c46 eZ80 Follow-up
- Added RCEZ80 platform option to Build.ps1
- Added EZ80 config settings to MASTER config (required to get build to work for some situations)
- Modified a .EQU in cfg_RCEZ80.asm to a .SET.  After adding config setting to MASTER config, the .EQU was causing a redefinition error.
- I have temporarily removed some "TRANSLATE" lines in ez80uart.asm.  They were attempting to place a value greater that 0xFFFF in a register and generated an assembly error.
- Modified a few JR instructions in hbios.asm to JP due to out-of-range errors.
- Modified std.asm to "nest" a conditional.  The Windows assembler does not ignore the remainder of a complex conditional when it should.
- Modified tms.asm to replace the PRTS macro with alternative lines.  The Windows assembler cannot handle a string longer than about 8 characters in a macro argument.
- Added the TIMER utility to the ROM disk.  Not sure what happened there.  It was included in the Windows build, but not the Linux build.  There is room for it, so I added it to the Linux build to get a binary exact build compare.
2024-09-15 13:54:31 -07:00
Wayne Warthen
be225c6fb9 Merge pull request #424 from dinoboards/dean-ez80-3
eZ80 Support
2024-09-15 13:42:31 -07:00
Dean Netherton
3121e3ee9d ez80: renamed cfg_rcez80 to uppercase cfg_RCEZ80.asm 2024-09-15 19:13:05 +10:00
Dean Netherton
0982b5d462 ez80: align cfg/std configuration files as per recent changes 2024-09-15 19:11:14 +10:00
Dean Netherton
c31f9de905 ez80: some additional comments for the ez80 cpu driver 2024-09-15 18:44:15 +10:00
Dean Netherton
7157d7f11d ez80: delete bin (WDATE.COM and timer.com) within Source directroy incorrectly introduced in recent merge commit 2024-09-15 15:30:05 +10:00
Dean Netherton
e7937d47e3 ez80: revert whitespace introduced in recent large merge commit 2024-09-15 15:26:37 +10:00
Dean Netherton
32301ba6a9 ez80: fix auto mergine fault DIAG_DISP .EQU DIAG_PROG 2024-09-15 15:24:04 +10:00
Dean Netherton
12df99084e ez80: removing additional comments on #ENDIF - to reduce number of 'diff' in large merge commit 2024-09-15 15:21:49 +10:00
Dean Netherton
324c0bf0fb ez80: fix due to auto merging fault - #IF ((PLATFORM == PLT_S100) & TRUE) 2024-09-15 15:19:05 +10:00
Dean Netherton
38c25e50c2 Merge branch 'master' into dean-ez80-3 2024-09-15 14:40:23 +10:00
Dean Netherton
2176c9d1af ez80: new firmware feature to configure on-chip flash w/s 2024-09-15 10:17:10 +10:00
Dean Netherton
af030bf76d ez80: use new firmware interface for w/s config settings 2024-09-15 09:07:27 +10:00
Wayne Warthen
e376e5577c Heath H8 Panel Tweaks
- Notify HBIOS of speed changes (keeps HBIOS in sync with panel)
- Correct display for HL, SP, and PC registers.
2024-09-14 15:59:41 -07:00
Dean Netherton
b5d4e7ddf9 ez80: added new EZ80TIMER type - EZ80TMR_NONE 2024-09-14 15:56:10 +10:00
Dean Netherton
3880d8fca0 tsm: for v9958 - configure interrupt rate (HSYNC) as per TICKFREQ config setting 2024-09-14 15:54:11 +10:00
Wayne Warthen
df28567506 Additional Config File Cleanup
- Issue #423 should now be resolved.
2024-09-13 10:35:50 -07:00
Wayne Warthen
f16a9415f7 Add CPU Speed Control for HEATH Platform 2024-09-11 13:06:19 -07:00
Wayne Warthen
561a7f7231 Support S100 Z80 FPGA Printer Port 2024-09-09 11:41:28 -07:00
Wayne Warthen
d416a986bb Miscellaneous
- Fix SN76489 variable names referring to different driver
- Make SIMH config filenames consistent with others
2024-09-09 09:04:12 -07:00
Wayne Warthen
162348ea66 Implement SIOINTS Setting in SIO Driver
- SIOINTS allows disabling use of interrupts in the SIO driver when interrupts are enabled globally.  It will not allow you to enable SIO interrupts if interrupts are globally disabled (INTMODE 0).
2024-09-09 17:19:51 +10:00
Wayne Warthen
7e4c4d35e4 Merge pull request #422 from wwarthen/work
Config File Cleanup
2024-09-08 14:19:21 -07:00
Wayne Warthen
78917e78be Cleanup
- Update include file nesting comments
- Bump version number
2024-09-08 13:59:56 -07:00
Wayne Warthen
69e152c4fb Config Files Cleanup 2024-09-08 13:30:32 -07:00
Wayne Warthen
a14e64fced Update and rename cfg_SBC.asm to cfg_sbc.asm 2024-09-08 12:35:07 -07:00
Wayne Warthen
e3195669fc Update and rename cfg_sbc.asm to cfg_SBC.asm 2024-09-08 12:33:02 -07:00
Dean Netherton
64d60f744b ez80: updated to report firmware version, build date, and if operating under the alt image 2024-09-08 13:53:57 +10:00
Wayne Warthen
85834559d1 Cleanup (Cosmetic) 2024-09-07 19:47:46 -07:00
Wayne Warthen
1c66ec3ba4 Configuration File Improvements
- Modified configuration files so that all configurations now inherit from the Master Config file.
2024-09-07 18:02:45 -07:00
Wayne Warthen
99f8d0b3a6 Minor Cosmetic Improvements 2024-09-07 14:26:40 -07:00
Wayne Warthen
23160e3961 Merge pull request #421 from kiwisincebirth/map/userguide-fat
User Guide FAT
2024-09-07 11:20:26 -07:00
Mark Pruden
2c985070e8 Merge commit 'e1beb01a5181939abb0da8253b095e24f596c214' into map/userguide-fat 2024-09-07 16:44:27 +10:00
Mark Pruden
a14a2e6128 Binary Changes 2024-09-07 16:42:12 +10:00
Mark Pruden
c093cd2322 Merged FAT section into Transferring Files 2024-09-07 16:41:56 +10:00
Mark Pruden
a93bfb1e77 Misc Improvements to User Guide 2024-09-07 16:41:31 +10:00
Wayne Warthen
e1beb01a51 Update Configs to Handle GM3707 Enable
- The non-Genesis config files needed to be updated to disable the GM3707.
2024-09-06 18:12:46 -07:00
Wayne Warthen
d20c72fe21 Bump Version Number 2024-09-06 17:55:31 -07:00
Wayne Warthen
8d91176230 Cosmetic Updates 2024-09-06 17:54:02 -07:00
Wayne Warthen
1945826414 Merge pull request #420 from drj113/master
GM7303 LCD Keypad support
2024-09-06 17:43:34 -07:00
drj113
61d08e9f71 GM7303 LCD Keypad support
Changes to support a modified Prolog Keypad and LCD driver card - Heavily inspired by the lcd.asm module, but separated out to allow for future keyboard support.
2024-09-07 10:18:07 +10:00
Wayne Warthen
e212054774 Fix Missing Video Device String 2024-09-06 17:00:21 -07:00
Dean Netherton
479c50f052 ez80: updated to deprecate use of RST.L %18 for bank switching and direct access using 16bit i/o 2024-09-06 18:28:02 +10:00
Wayne Warthen
90a4d090f9 Minor Doc Updates 2024-09-05 14:14:33 -07:00
Wayne Warthen
d78127ca0f Merge pull request #418 from kiwisincebirth/map/doc-user-diskmanage
Doc Improvement - User Guide - Disk Management
2024-09-05 13:12:58 -07:00
Dean Netherton
5c10f1881d ez80: deprecated EZ80_UTIL_HL_TO_EHL - now using local implementation EZ80_CPY_UHL_TO_EHL 2024-09-05 21:16:00 +10:00
Dean Netherton
fa6b0f1d82 ez80: deprecated EZ80_UTIL_EHL_TO_HL - now using local implementation EZ80_CPY_EHL_TO_UHL 2024-09-05 21:00:51 +10:00
Mark Pruden
fccd37f8dd Merge commit '6e8bdb141de0b906ce20cb00821db6cbbdfe0bf9' into map/doc-user-diskmanage
# Conflicts:
#	Doc/ChangeLog.txt
#	Doc/RomWBW Applications.pdf
#	Doc/RomWBW Disk Catalog.pdf
#	Doc/RomWBW Errata.pdf
#	Doc/RomWBW System Guide.pdf
#	Doc/RomWBW User Guide.pdf
2024-09-05 18:41:32 +10:00
Mark Pruden
08d88a98da Fix for LCD Display of CPU Type 2024-09-05 18:32:36 +10:00
Wayne Warthen
6e8bdb141d Finalize S100 FPGA Z80 Onboard VGA/PS2 Support
- RomWBW will now "follow" the S100 monitors console selection for all 3 possibilities (USB Serial, Propeller Console, and Onboard VGA/PS2).
2024-09-04 17:15:23 -07:00
Wayne Warthen
d152cab8c8 Update Doc 2024-09-04 12:22:58 -07:00
Wayne Warthen
3dd394e3c9 Update GMZ180_std.asm
- Minor filename case issue caused some build scenarios to fail.
2024-09-04 11:40:36 -07:00
Wayne Warthen
2fd65ab4b0 Miscellaneous
- Cosmetic updates
- Fix fv.asm keyboard status function
- Bump version number
2024-09-04 11:25:41 -07:00
Wayne Warthen
14dd7bf290 Merge pull request #416 from drj113/master
Genesis Modules initial commit
2024-09-04 10:46:25 -07:00
drj113
673f4358b2 Rectified GM configuration to support current hbios.asm
Re-added commented out code in the various disk drivers now that I am using the correct hbios.asm file
2024-09-04 11:16:45 +10:00
drj113
34e472a553 Initial Commit for Genesis Modules boards
Supports GM STD Z180 and GM IDE Disk Controller
2024-09-04 10:13:05 +10:00
Wayne Warthen
e07c38dc1a Doc Fixes per HubertH
See Issue #415.  This commit is intended to clarify the documentation with respect to this issue.  Thanks and credit to HubertH.
2024-09-03 15:04:50 -07:00
Wayne Warthen
9e6780a248 Add FPGA Z80 Onboard VGA/PS2 Support 2024-09-03 12:05:34 -07:00
Wayne Warthen
d80c44045f Merge pull request #414 from kiwisincebirth/map/fix-lcd-cpu 2024-08-30 08:11:04 -07:00
Mark Pruden
b7352da5c1 Fix for LCD Display of CPU Type 2024-08-30 13:33:44 +10:00
Wayne Warthen
2b6fbe7c58 HD44780 LCD Support 2024-08-27 15:34:44 -07:00
Wayne Warthen
e3173ff802 Regen PDF Docs 2024-08-26 13:11:13 -07:00
Wayne Warthen
8aebf93fdf Merge pull request #411 from kiwisincebirth/map/clock-userguide
Realtime Clock User Guide
2024-08-26 13:01:02 -07:00
Mark Pruden
51676238c7 Merge remote-tracking branch 'origin/master' into map/clock-userguide
# Conflicts:
#	Doc/ChangeLog.txt
2024-08-26 18:58:45 +10:00
Mark Pruden
983c0ff52b Improved section Real Time Clock in User Guide document 2024-08-26 18:37:09 +10:00
Mark Pruden
764abddb49 Improved section Reat Time Clock in User Guide document 2024-08-26 18:22:30 +10:00
Wayne Warthen
df0562bba8 Bump Build Version Number 2024-08-23 09:49:48 -07:00
Wayne Warthen
eaf0431b20 Merge pull request #409 from lesbird/master
Adding in Heathkit H8 support
2024-08-23 09:33:25 -07:00
Les Bird
6394605a20 Some minor formatting changes for Heathkit related HBIOS code. Add a script to build a CF image with MSX ROMs which includes CPM22,ZSDOS and CPM3 2024-08-22 09:48:44 -06:00
Les Bird
17f1d1cb99 Merge branch 'master' of https://github.com/lesbird/RomWBW 2024-08-21 15:08:46 -06:00
Les Bird
03e34a54d4 Add Heathkit H8 support. Front panel generates interrupts at 500Hz to update the LEDs and read the front panel keypad. 2024-08-21 15:04:17 -06:00
Wayne Warthen
797ee4d1a4 Update Makefile
- Missed a file.
2024-08-21 13:17:37 -07:00
Wayne Warthen
f775a07365 Add MSXROMs
- Les Bird has given permission to include his extensive library of MSX ROM images.  Please see https://github.com/lesbird/MSX8 for more information.
- Appropriate MSX8 ROM player and hardware required to use these.
- Provided as supplemental RomWBW disk image slices (msxroms1.img, msxroms2.img).

Co-Authored-By: Les Bird <lesbird65@gmail.com>
2024-08-21 12:18:58 -07:00
Wayne Warthen
e6117e9639 Refactor Build Post-processing
- Post-processing of disk-hosted ROMs such as FZ80 and ZRC has been modified to handle custom user configurations.
- Standardized all distribution ROM names to end in _std.
2024-08-19 14:53:11 -07:00
Wayne Warthen
9df87738ad Fix FZ80 Makefile (Issue #407)
- FZ80 Makefile failed to handle individual ROM build scenario.  Credit and thanks to Mark Pruden for this.
- Updated SIMH emulator to v4.1
2024-08-18 19:31:06 -07:00
Wayne Warthen
ebfb5b3fed Bump Version Number 2024-08-18 12:43:22 -07:00
Wayne Warthen
f125efcca3 Customize NZ-COM Disk Image
- Substantial customization of NZ-COM Disk Image
2024-08-18 11:33:10 -07:00
Wayne Warthen
317ba99b37 Update ReadMe.txt
Windows marks files downloaded from the Internet and may prompt you during the RomWBW build process with repeated security warnings.  Added instructions for "unblocking" distribution files when using the Windows build.  Credit and Thanks to Derek for this tip.

Co-Authored-By: Extreme Electronics <102665314+extremeelectronics@users.noreply.github.com>
2024-08-17 13:57:36 -07:00
Wayne Warthen
add41fdb69 SD Driver Bug Fix
- Fixes a stupid bug I introduced in the previous change to sd.asm.  SD Card initialization could hang in previous release.
2024-08-16 18:13:22 -07:00
Wayne Warthen
457aa44832 SD Card Compatibility Improvement
- Modified SD driver to keep SD card clock consistently fast after card init.  This only seemed to effect a Lexar 32GB uSD Card on CSIO interface.  Thanks and credit to Richard Deane for reporting this.
- Improved hard disk layout documentation.
2024-08-16 14:06:36 -07:00
Dean Netherton
141c79ef90 ez80: ported msx keyboard driver (mky.asm) 2024-08-10 16:03:40 +10:00
Wayne Warthen
7e2b2b8f40 Implement SIOINTS Setting in SIO Driver
- SIOINTS allows disabling use of interrupts in the SIO driver when interrupts are enabled globally.  It will not allow you to enable SIO interrupts if interrupts are globally disabled (INTMODE 0).
2024-08-04 13:39:44 -07:00
Wayne Warthen
e68cbded97 SD Card Speed Improvement for FZ80
- Removed wait routines for FZ80 in SD driver.  Latest FPGA code does not require them.
- Minor improvements to disk layout documentation.
2024-08-04 12:12:16 -07:00
Dean Netherton
7d5dc565f3 ez80: tms driver - minor update/refactor 2024-08-04 15:09:21 +10:00
Dean Netherton
b3bab80342 ez80: supply the required min value for BUS CYCLES when using frequency calculation 2024-08-04 15:08:51 +10:00
Dean Netherton
9898309f29 ez80: ported fd.asm driver 2024-08-03 13:36:37 +10:00
Dean Netherton
55d8c6ce7d ez80: ported ppide.asm driver 2024-08-02 16:52:26 +10:00
Wayne Warthen
cd70a62d67 Documentation Updates
- Minor improvements to hard disk documentation in System Guide.
2024-08-01 11:40:23 -07:00
Wayne Warthen
307b8bb11b Add Tick Counter Size
- Documents the date field size of the tick counter.
2024-07-31 14:53:58 -07:00
Wayne Warthen
fd59d2e4f8 Add UMAP
- UMAP application has been added to the ZPM3 and NZCOM disk images.
2024-07-30 11:06:25 -07:00
Wayne Warthen
e021735876 More Enhancements to Startup Command Documentation 2024-07-28 13:31:06 -07:00
Wayne Warthen
91debe53c4 Improve Startup Commands Documentation 2024-07-28 12:08:35 -07:00
Wayne Warthen
8e0af1720a Application Boot Tweaks
- Reduces failure scenarios with application boot
- Catches and diagnoses common bank mismatch which application boot cannot handle
2024-07-27 15:17:58 -07:00
Wayne Warthen
83d26a4faf - Improve PPIDE Device Detection
- Some PPI chips were falsely detecting the presence of an IDE device.  Added code to preset PPI register with a value that avoids false positives.
2024-07-26 09:38:24 -07:00
Dean Netherton
0eb0855948 ez80: ported ay38910 driver 2024-07-25 13:01:07 +10:00
Dean Netherton
37e682adc7 ez80: some general improvements to ez80 HBIOS drivers and implemented a true interrupt driver timer tick driver 2024-07-25 11:34:12 +10:00
Wayne Warthen
c2f7a75cdd Add hour/minute/second display to TIMER app (MartinR)
Co-Authored-By: MartinR <174514335+MartinR-UK@users.noreply.github.com>
2024-07-24 11:24:41 -07:00
Dean Netherton
39232f00f1 sn76489: added configuration entry SN76489CHNOUT to direct to only to one channel or both 2024-07-24 16:23:18 +10:00
Dean Netherton
890dd1cd5e eZ80: added support for sn76489 driver 2024-07-24 14:33:14 +10:00
Wayne Warthen
888706149d Improve Application Start Mode
- If the new AUX bank happens to be the same as the old HBIOS bank, an application start would fail.  Relocated the copy to avoid this.
2024-07-22 16:40:53 -07:00
Dean Netherton
209f457120 ez80: updated to use new functions EZ80_UTIL_VER_EXCH, EZ80_UTIL_GET_CPU_FQ and EZ80_UTIL_BNK_HLP 2024-07-22 16:18:09 +10:00
Dean Netherton
945d5fc2d2 ez80: set timer tick rate as per platform config TICKFREQ 2024-07-22 13:23:03 +10:00
Wayne Warthen
a078820745 Fix Duodyne MMU Regression 2024-07-21 16:40:59 -07:00
Wayne Warthen
21df9d8797 Missing Files 2024-07-20 17:27:59 -07:00
Wayne Warthen
cd23863226 Refactor UART Mode Settings
- Replaced hard-coded mode settings with per-chip configuration settings.
2024-07-20 15:20:05 -07:00
Dean Netherton
22b10c8ac8 ez80: updated IDE driver for eZ80 platform. 2024-07-20 22:09:13 +10:00
Dean Netherton
4b80f36fd0 ez80: configure and display memory and i/o timings 2024-07-20 16:59:25 +10:00
Dean Netherton
026fa3d0d7 ez80: request CPU speed from ez80 firmware 2024-07-20 12:59:30 +10:00
Wayne Warthen
3999039102 Support for Les Bird's Dual 16C550 UART Module 2024-07-19 17:31:53 -07:00
Dean Netherton
53198e066c ez80: added macros for accessing all firmware functions 2024-07-19 21:18:28 +10:00
Dean Netherton
3318b12667 ez80: fixed issue with CH37x-USB driver not working at frequency > 7Mhz 2024-07-19 19:19:05 +10:00
Wayne Warthen
df2ab201a2 TMS Driver Cleanup 2024-07-17 18:45:52 -07:00
Dean Netherton
20aa3a7d65 makefile: turn off forced tracing - use option (--trace and or --debug) to trace makefile execution 2024-07-16 08:45:10 +00:00
Dean Netherton
e757591fb3 ez80: added missing #ENDIF in ez80uart.asm 2024-07-16 08:34:46 +00:00
Dean Netherton
44ceaa3e71 ez80: update to new version of 60hz get sec firmware interface 2024-07-16 18:22:28 +10:00
Dean Netherton
37a7574f1f ez80: report if RTC is not powered 2024-07-16 17:02:53 +10:00
Dean Netherton
ba8cd05cb7 ez80: 60hz timer updated to support native 24 bit tick counters implemented in firmware 2024-07-16 16:52:45 +10:00
Wayne Warthen
cdc2b3964d Remove Short IDE/PPIDE Timeout, Issue #397
The Microdrives behave slightly differently than either normal spinning drives or CF Cards.  This update removes the "short" timeout that is used in the IDE/PPIDE drivers which caused timeout issues for the Microdrives.

The short timeout was originally used to workaround excessive wait/stall during boot of some media.  I don't think it is necessary any more because of additional intelligence in the initialization routines.
2024-07-15 14:49:52 -07:00
Wayne Warthen
21b2eee7ab Add Beep Function to Sound Driver Interface, Issue #402 2024-07-15 12:49:27 -07:00
Dean Netherton
bc68674ce2 ez80: updated ch.asm driver to support ez80
SD Card not supported yet
2024-07-14 15:21:21 +10:00
Dean Netherton
37b3b96e49 ez80: rtc fix missing space in boot report 2024-07-14 15:18:58 +10:00
Dean Netherton
aeb579d6ad ez80: uart init implemented 2024-07-13 12:29:45 +10:00
Dean Netherton
229bf119d4 ez80: uart query implemented 2024-07-12 14:42:25 +10:00
Dean Netherton
cb7ba38f76 ez80uart: defer basic i/o operations to ez80 firmware 2024-07-12 10:08:11 +10:00
Wayne Warthen
b80d395266 Update for Les Bird's Graphics/Sound/Joystick Module
- Unique I/O configuration for Les Bird's Graphics/Sound/Joystick Module has been removed because the module now conforms to generic MSX port conventions.
2024-07-11 14:11:51 -07:00
Wayne Warthen
fff0959f96 Added Support for Les Bird's RCBus Graphics/Sound/Joystick Module 2024-07-08 16:51:53 -07:00
Wayne Warthen
b781f16add Missing Files from Prior Commit 2024-07-08 10:57:14 -07:00
Wayne Warthen
273e61bc94 Support for DS1305 RTC on S100 FPGA Z80 2024-07-08 10:45:19 -07:00
Dean Netherton
9bc4f26f6e timer.com: added new switch (/R) to reset current timer ticks 2024-07-08 16:36:06 +10:00
Dean Netherton
ce9778e189 ez80: implemented timer get/set function - delegates to firmware 2024-07-08 16:35:38 +10:00
Dean Netherton
44d890be59 ez80: Added new driver ez80rtc 2024-07-07 10:10:04 +10:00
Wayne Warthen
e1e485501c Applications Document Overhaul by MartinR
- ROM Applications document has been consolidated into the Applications document
- Martin has done a significant overhaul of the Applications document

Co-Authored-By: MartinR <174514335+martinr-uk@users.noreply.github.com>
2024-07-04 08:10:00 -07:00
Dean Netherton
a31119bd5d ez80: updated notes for the docker build script 2024-07-04 12:19:09 +10:00
Dean Netherton
6b00f5c992 eZ80: tms.asm increased speed of interrupt handler's IO process 2024-07-04 12:19:08 +10:00
Dean Netherton
20bdb78084 eZ80: tms.asm interrupt handling activated - with appropriate delegation from the eZ80 firmware 2024-07-04 12:19:08 +10:00
Dean Netherton
4ac7c1213a eZ80: updated tms.asm to support eZ80 16 bit i/o operations 2024-07-04 12:19:07 +10:00
Dean Netherton
d834742337 eZ80: updated rp5rtc.asm to support eZ80 16 bit i/o operations 2024-07-04 12:19:07 +10:00
Dean Netherton
baf0cd7788 eZ80: updated ide.asm to suppport eZ80 16 bit i/o operations 2024-07-04 12:19:06 +10:00
Dean Netherton
572309d03c eZ80: reverted MDTRACE back to 1 2024-07-04 12:19:05 +10:00
Dean Netherton
d9e009864b eZ80: hbios HBX_BNKSEL_INT is fully implemented in eZ80 firmware to optimal performance 2024-07-04 12:19:05 +10:00
Dean Netherton
46cc57e5fc eZ80: hbios io out operations now managed through a expected feature in the eZ80 on-chip rom 2024-07-04 12:19:04 +10:00
Dean Netherton
7e2b054fc1 eZ80: added platform config PLT_RCEZ80 2024-07-04 12:19:03 +10:00
Dean Netherton
d358c8bc1c eZ80: uart and hbios banking code updated to support the eZ80 for RC2014 configuration 2024-07-04 12:19:03 +10:00
Dean Netherton
2bc807edc8 eZ80: uart driver init and pre-init functions defer to routines within the eZ80 Flash rom 2024-07-04 12:19:02 +10:00
Dean Netherton
57364bb581 EZ80: initial skeleton of driver for EZ80 UART 2024-07-04 12:19:00 +10:00
Dean Netherton
a92aebddd7 eZ80: hbios i/o operations updated for FPLED_IO and ram bank initialisation 2024-07-04 12:18:59 +10:00
Dean Netherton
8b63b32580 gitignored some more untracked generated files 2024-07-04 12:18:57 +10:00
Dean Netherton
76cb52eb14 Adding new target/config for eZ80 RC2014 builds 2024-07-04 12:18:26 +10:00
Wayne Warthen
48ab169c60 S100 FPGA Z80 SD Card Support WIP
- Not yet working
2024-07-03 10:39:19 -07:00
Wayne Warthen
0f4d16400f S100 FPGA Z80 Cleanup
- Restore 16-bit I/O in S100 Console driver
- Boot to Console or USB Serial depending on IO Switch
2024-07-01 16:48:58 -07:00
Wayne Warthen
329a0f4d7f Fix gitignore 2024-06-30 20:03:01 -07:00
Wayne Warthen
058a67dd40 Preliminary Support for S100 FPGA Z80 Platform
- S100 FPGA Z80 Platform
- Simple Serial Driver
2024-06-30 19:32:17 -07:00
Wayne Warthen
40f2a9f35a Enhanced TIMER App from MartinR
- MartinR has enhanced the TIMER application to display output in decimal.
2024-06-30 11:53:38 -07:00
Wayne Warthen
3eea703d02 Miscellaneous
- Support RCBus PS/2 Keyboard (EtchedPixels & Sally)
- Added AT-3-8910 register spreadsheet (Martin R)
- Improved FD hardware detection to eliminate a false positive
- Reorder Boot Loader menu (Martin R)
- Minor enhancement to new usrrom.asm (Martin R)
2024-06-17 11:53:40 -07:00
Wayne Warthen
74daa4d3c5 New usrrom.asm from MartinR
- MartinR has contributed a new usrrom.asm that prints a nice RomWBW logo and does a better job with the messages.
2024-05-31 11:08:42 -07:00
Wayne Warthen
0539b25046 Updated FLASH to v1.3.9
- Will Sowerbutts provided an updated flash4 v1.3.9
- Modified HBIOS to be more proactive about disabling interrupts on systems with interrupts disabled to avoid issues with applications that turn them on.
- Updated NABU default configuration to run under interrupt mode 2.

Co-Authored-By: Will Sowerbutts <will@sowerbutts.com>
2024-05-31 08:56:02 -07:00
Wayne Warthen
a7e767d0b7 Upgrade BBCBASIC to v5 2024-05-30 14:30:27 -07:00
Wayne Warthen
78a765147e NABU Keyboard Typeahead
- Implemented a 16 character typeahead buffer for interrupt-enabled builds of NABU.
2024-05-25 16:16:14 -07:00
896 changed files with 43003 additions and 13803 deletions

142
.gitignore vendored
View File

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

4
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,4 @@
{
"files.trimTrailingWhitespace": false,
"files.eol": "\r\n"
}

View File

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

View File

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

View File

@@ -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 <esc>.
** 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.

4
Binary/CPM22/Clean.cmd Normal file
View File

@@ -0,0 +1,4 @@
@echo off
setlocal
if exist *.sys del *.sys

7
Binary/CPM22/Makefile Normal file
View File

@@ -0,0 +1,7 @@
TOOLS = ../../Tools
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
include $(TOOLS)/Makefile.inc
clean::
@rm -f *.sys

23
Binary/CPM22/ReadMe.txt Normal file
View File

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

View File

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

View File

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

4
Binary/QPM/Clean.cmd Normal file
View File

@@ -0,0 +1,4 @@
@echo off
setlocal
if exist *.sys del *.sys

7
Binary/QPM/Makefile Normal file
View File

@@ -0,0 +1,7 @@
TOOLS = ../../Tools
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
include $(TOOLS)/Makefile.inc
clean::
@rm -f *.sys *.bin

21
Binary/QPM/ReadMe.txt Normal file
View File

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

View File

@@ -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 (<plt>_<cfg>.rom)
-------------------------------------
The files with a ".rom" extension are binary images ready to program
into an appropriate PROM. These files are named with the format
<plt>_<cfg>.rom. <plt> refers to the primary platform such as Zeta,
N8, Mark IV, etc. <cfg> 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
<plt>_<cfg>.rom. <plt> refers to the primary platform such as Zeta,
N8, Mark IV, etc. <cfg> 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 (<plt>_<cfg>.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.
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.

4
Binary/ZSDOS/Clean.cmd Normal file
View File

@@ -0,0 +1,4 @@
@echo off
setlocal
if exist *.sys del *.sys

7
Binary/ZSDOS/Makefile Normal file
View File

@@ -0,0 +1,7 @@
TOOLS = ../../Tools
MOREDIFF := $(shell $(TOOLS)/unix/casefn.sh *.spr)
include $(TOOLS)/Makefile.inc
clean::
@rm -f *.sys

23
Binary/ZSDOS/ReadMe.txt Normal file
View File

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

View File

@@ -7,8 +7,8 @@
***********************************************************************
This directory ("Doc/CPM") is part of the RomWBW System Software
distribution archive. It contains documentation for the CP/M
operating system components of the system.
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")

View File

@@ -14,7 +14,36 @@ 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
- M?P: Reorganization of Doc directory introducing subfolders
- 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
Version 3.4
-----------
@@ -683,4 +712,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.
concept of interrupt dispatching available.

Binary file not shown.

View File

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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

48
Dockerfile Normal file
View File

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

View File

@@ -3,7 +3,7 @@
**RomWBW ReadMe** \
Version 3.5 \
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
17 May 2024
13 Oct 2024
# Overview
@@ -124,8 +124,6 @@ Documentation for RomWBW includes:
Guide](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20System%20Guide.pdf)
- [RomWBW
Applications](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Applications.pdf)
- [RomWBW ROM
Applications](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20ROM%20Applications.pdf)
- [RomWBW
Errata](https://github.com/wwarthen/RomWBW/raw/master/Doc/RomWBW%20Errata.pdf)
@@ -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,10 @@ 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 User
Guide as well as the COPYSL utility.
- Jacques Pelletier has contributed the DS1501 RTC driver code.

View File

@@ -1,6 +1,6 @@
RomWBW ReadMe
Wayne Warthen (wwarthen@gmail.com)
17 May 2024
13 Oct 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,10 @@ 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 User
Guide as well as the COPYSL utility.
- Jacques Pelletier has contributed the DS1501 RTC driver code.

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,20 @@
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
@@ -366,4 +383,73 @@
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 <condition> 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.

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -1,7 +1,8 @@
TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982
TITLE BBCDIST.Z80 (C) R.T.RUSSELL 1982-2024
NAME ('DIST3')
;
;BBC BASIC (Z80) - CP/M VERSION 2.30 & 3.00
;(C) COPYRIGHT R.T.RUSSELL, 1982.
;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
@@ -13,11 +14,14 @@
;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
;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
@@ -26,14 +30,18 @@ COLD EQU 200H
GLOBAL GETIME
GLOBAL GETKEY
GLOBAL BYE
GLOBAL BEGIN
; GLOBAL BDOS
;
ASEG
ORG 100H
; EXTRN PRTDEC16
;
;ASEG
;ORG 100H
;
;JUMP TABLE - BASIC makes calls to hardware-dependent
;features via this table:
;
JP INIT
BEGIN: JP INIT
CLRSCN: JP CLS ;CLEAR SCREEN
PUTCSR: JP PCSR ;SET CURSOR POSN.
GETCSR: JP GCSR ;READ CURSOR POSN.
@@ -42,30 +50,33 @@ 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.
;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
;
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
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
;
NOTZ80: DEFB 'Wrong processor$'
NOTV2: DEFB 'Wrong CP/M version$'
NOTHB: DEFB 'CP/M w/ HBIOS required$'
;
;REBOOT - Switch off interrupts and return to CP/M
;
@@ -75,31 +86,34 @@ REBOOT: RST 0
; Outputs: DEHL = elapsed time (centiseconds)
; Destroys: A,D,E,H,L,F
;
GTIME: LD DE,0
LD HL,0
RET
GTIME: JR TICKS
;
;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
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
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.
@@ -107,52 +121,64 @@ CLSSTR: DEFB 27,'[2J$' ; VT100 string for clear screen
;
INKEY: PUSH BC
PUSH HL
CALL TICKS
POP DE
ADD HL,DE
WAIT: PUSH HL
LD C,6
LD E,0FFH
CALL BDOS ;CONSOLE INPUT
CALL BDOS
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
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)
; called by TAB(column, row)
; 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,PRSTR ; output string command
LD C,9 ; output string command
LD DE,CURS ; start of string
JR BDOS ; output string to terminal
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
@@ -164,35 +190,7 @@ CONVLP: INC A ; now B times increment AL in decimal
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)
@@ -202,24 +200,42 @@ GCSR: LD DE,0
LD HL,0
RET
;
IF $ GT 1F4H
;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 1F4H
;ORG 1F0H
DEFS 0F0H - ($ - BEGIN)
;
OFFLO: DEFW 0 ;TIME OFFSET LO
OFFHI: DEFW 0 ;TIME OFFSET HI
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
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


File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -28,8 +28,11 @@ 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 reboot && call Build || exit /b & popd
pushd Survey && call Build || exit /b & popd
pushd HTalk && call Build || exit /b & popd
pushd BBCBASIC && call Build || exit /b & popd
pushd copysl && call Build || exit /b & popd
copy *.com %APPBIN%\ || exit /b

View File

@@ -17,5 +17,8 @@ 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 reboot && call Clean || exit /b 1 & popd
pushd Survey && call Clean || exit /b 1 & popd
pushd HTalk && call Clean || exit /b 1 & popd
pushd BBCBASIC && call Clean || exit /b 1 & popd
pushd copysl && call Clean || exit /b 1 & popd

View File

@@ -1,6 +1,6 @@
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
SUBDIRS = HTalk XM FDU FAT Tune Test ZMP ZMD Dev VGM cpuspd reboot Survey BBCBASIC copysl
DEST = ../../Binary/Apps
TOOLS =../../Tools

View File

@@ -25,6 +25,7 @@ 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
pushd testh8p && call Build || exit /b & popd
goto :eof

View File

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

View File

@@ -1,5 +1,5 @@
OBJECTS =
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan sound
SUBDIRS = DMAmon I2C inttest ppidetst ramtest tstdskng rzsz vdctest kbdtest ps2info 2piotst piomon banktest portscan sound testh8p
DEST = ../../../Binary/Apps/Test
TOOLS =../../../Tools

View File

@@ -8,4 +8,5 @@ set TASMTABS=%TOOLS%\tasm32
tasm -t180 -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

View File

@@ -1,5 +1,7 @@
OBJECTS = inttest.com
DOCS = inttest.doc
DEST = ../../../../Binary/Apps/Test
DOCDEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1

View File

@@ -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 <esc>.
** 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.

View File

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

View File

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

View File

@@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

View File

@@ -0,0 +1,9 @@
OBJECTS = testh8p.com
# DOCS = testh8p.doc
DEST = ../../../../Binary/Apps/Test
DOCDEST = ../../../../Binary/Apps/Test
TOOLS =../../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc

View File

@@ -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 ; <CR>
call prtchr ; print it
ld a,10 ; <LF>
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

View File

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

View File

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

View File

@@ -0,0 +1,5 @@
@echo off
setlocal
:: copysl.com is currently distributed as a binary application, so
:: we do not delete the .COM file.

View File

@@ -0,0 +1,7 @@
OBJECTS = copysl.com
NODELETE = $(OBJECTS)
DOCS = copysl.doc
DEST = ../../../Binary/Apps
DOCDEST = ../../../Binary/Apps
TOOLS=../../../Tools
include $(TOOLS)/Makefile.inc

Binary file not shown.

View File

@@ -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 <disk>.<unit> format
The syntax (similar to copy) for the command is:
COPYSL <destunit>[.<slice>]=<srcunit>[.<slice>] [/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 <ctrl><c>


View File

@@ -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 <cpuspd>,<memws>,<iows>\r\n"
.db " CPUSPD (W)armBoot\r\n"
.db " CPUSPD (C)oldBoot\r\n"
.db "\r\n"
.db " <cpuspd>: \"Half\", \"Full\", or \"Double\"\r\n"
.db " <cpuspd>: (H)alf | (F)ull | (D)ouble | (Q)uad\r\n"
.db " <memws>: Memory wait states\r\n"
.db " <iows>: I/O wait states\r\n"
.db "\r\n"

View File

@@ -0,0 +1,10 @@
@echo off
setlocal
set TOOLS=../../../Tools
set PATH=%TOOLS%\tasm32;%PATH%
set TASMTABS=%TOOLS%\tasm32
tasm -t180 -g3 -fFF reboot.asm reboot.com reboot.lst || exit /b
copy /Y reboot.com ..\..\..\Binary\Apps\ || exit /b

View File

@@ -0,0 +1,6 @@
@echo off
setlocal
if exist *.com del *.com
if exist *.lst del *.lst
if exist *.bin del *.bin

View File

@@ -0,0 +1,7 @@
OBJECTS = reboot.com
DEST = ../../../Binary/Apps
TOOLS =../../../Tools
USETASM=1
include $(TOOLS)/Makefile.inc

View File

@@ -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 ; <CR>
call prtchr ; print it
ld a,10 ; <LF>
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

View File

@@ -33,6 +33,8 @@
;
;[2023/07/07] v1.9 Support DUODYNE
;
;[2024/09/02] v1.10 Support Genesis STD Z180
;
; Constants
;
mask_data .EQU %10000000 ; RTC data line
@@ -52,6 +54,7 @@ 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
@@ -1143,7 +1146,13 @@ HINIT:
CP 17 ; DUODYNE
JP Z,RTC_INIT2
;
; Unknown platform
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
@@ -1769,6 +1778,7 @@ 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

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@ 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

4
Source/BuildFZ80.cmd Normal file
View File

@@ -0,0 +1,4 @@
@echo off
setlocal
pushd FZ80 && call Build || exit /b & popd

View File

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

View File

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

View File

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

View File

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

View File

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

90
Source/CPM3/hbios.z80 Normal file
View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -11,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)}$

View File

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

View File

@@ -217,9 +217,9 @@ on using the applications and files listed.
| `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 |
| `LDDS.COM` | ZSDOS | Load DateStamper date/time stamping resident extension |
| `LDNZT.COM` | ZSDOS | Load NZT date/time stamping resident extension |
| `LDP2D.COM` | ZSDOS | Load P2DOS date/time stamping resident extension |
| `LIB.COM` | -- | DRI Library manager |
| `LINK.COM` | -- | DRI CPM relocatable linker |
| `LOAD.COM` | -- | DRI hex file loader into memory |
@@ -229,7 +229,7 @@ on using the applications and files listed.
| `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 |
| `PUTDS.COM` | ZSDOS | ZSDOS Prepare disk for datestamper date/time stamping|
| `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 |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -0,0 +1,366 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export BankSwitchedMemory.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
width="6.51042in" height="5.73361in" viewBox="0 0 468.75 412.82" xml:space="preserve" color-interpolation-filters="sRGB"
class="st22">
<style type="text/css">
<![CDATA[
.st1 {fill:#c0c0c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
.st2 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
.st3 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
.st4 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
.st5 {fill:#000000;font-family:Calibri;font-size:0.75em}
.st6 {fill:#ffffff;stroke:none;stroke-linecap:butt}
.st7 {fill:#000000;font-family:Calibri;font-size:1.00001em}
.st8 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
.st10 {font-size:1em}
.st11 {stroke:#000000;stroke-dasharray:7,5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
.st12 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
.st13 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
.st14 {marker-end:url(#mrkr4-136);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
.st15 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.37313432835821}
.st16 {fill:#000000;font-family:Calibri;font-size:0.666664em}
.st17 {stroke:#000000;stroke-dasharray:1.5,3;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
.st18 {marker-end:url(#mrkr4-165);marker-start:url(#mrkr10-163);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
.st19 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.08695652173913}
.st20 {marker-end:url(#mrkr4-136);marker-start:url(#mrkr10-193);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
.st21 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
.st22 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
]]>
</style>
<defs id="Markers">
<g id="lend4">
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
</g>
<marker id="mrkr4-136" class="st15" refX="-5.36" orient="auto" markerUnits="strokeWidth" overflow="visible">
<use xlink:href="#lend4" transform="scale(-2.68,-2.68) "/>
</marker>
<g id="lend10">
<path
d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "
style="stroke:none"/>
</g>
<marker id="mrkr10-163" class="st19" refX="7.125" orient="auto" markerUnits="strokeWidth" overflow="visible">
<use xlink:href="#lend10" transform="scale(11.5) "/>
</marker>
<marker id="mrkr4-165" class="st19" refX="-23" orient="auto" markerUnits="strokeWidth" overflow="visible">
<use xlink:href="#lend4" transform="scale(-11.5,-11.5) "/>
</marker>
<marker id="mrkr10-193" class="st15" refX="1.77" orient="auto" markerUnits="strokeWidth" overflow="visible">
<use xlink:href="#lend10" transform="scale(2.68) "/>
</marker>
</defs>
<g>
<title>Page-1</title>
<g id="group13-1" transform="translate(216.75,-109.92)">
<title>Data block.13</title>
<g id="shape14-2" transform="translate(157.745,0)">
<title>Sheet.14</title>
<path d="M0 412.82 L11.41 401.41 L11.41 228.61 L0 240.02 L0 412.82 Z" class="st1"/>
</g>
<g id="shape15-4" transform="translate(0,-172.8)">
<title>Sheet.15</title>
<path d="M0 412.82 L157.75 412.82 L169.15 401.41 L11.41 401.41 L0 412.82 Z" class="st1"/>
</g>
<g id="shape16-6">
<title>Sheet.16</title>
<rect x="0" y="240.02" width="157.745" height="172.8" class="st2"/>
</g>
</g>
<g id="group9-8" transform="translate(216.75,-282.72)">
<title>Data block.9</title>
<g id="shape10-9" transform="translate(157.745,0)">
<title>Sheet.10</title>
<path d="M0 412.82 L11.41 401.41 L11.41 343.81 L0 355.22 L0 412.82 Z" class="st1"/>
</g>
<g id="shape11-11" transform="translate(0,-57.6)">
<title>Sheet.11</title>
<path d="M0 412.82 L157.75 412.82 L169.15 401.41 L11.41 401.41 L0 412.82 Z" class="st1"/>
</g>
<g id="shape12-13">
<title>Sheet.12</title>
<rect x="0" y="355.22" width="157.745" height="57.6" class="st2"/>
</g>
</g>
<g id="group5-15" transform="translate(216.75,-340.32)">
<title>Data block</title>
<g id="shape6-16" transform="translate(157.745,0)">
<title>Sheet.6</title>
<path d="M0 412.82 L11.41 401.41 L11.41 379.81 L0 391.22 L0 412.82 Z" class="st1"/>
</g>
<g id="shape7-18" transform="translate(0,-21.6)">
<title>Sheet.7</title>
<path d="M0 412.82 L157.75 412.82 L169.15 401.41 L11.41 401.41 L0 412.82 Z" class="st1"/>
</g>
<g id="shape8-20">
<title>Sheet.8</title>
<rect x="0" y="391.22" width="157.745" height="21.6" class="st2"/>
</g>
</g>
<g id="shape2-22" transform="translate(65.55,486.457) rotate(180)">
<title>Sheet.2</title>
<desc>$FE00</desc>
<path d="M0 412.82 L36 412.82" class="st3"/>
<rect x="-29.1072" y="-418.22" width="22.2144" height="10.7998" transform="rotate(180)" class="st4"/>
<text x="-29.11" y="-410.12" transform="rotate(180)" class="st5">$FE00</text> </g>
<g id="shape3-27" transform="translate(65.55,542.541) rotate(180)">
<title>Sheet.3</title>
<desc>$D000</desc>
<path d="M0 412.82 L36 412.82" class="st3"/>
<rect x="-29.8916" y="-418.22" width="23.7832" height="10.7998" transform="rotate(180)" class="st6"/>
<text x="-29.89" y="-410.12" transform="rotate(180)" class="st5">$D000</text> </g>
<g id="shape17-32" transform="translate(433.37,106.7) rotate(90)">
<title>Sheet.17</title>
<desc>$8000</desc>
<path d="M0 412.82 L46.25 412.82" class="st3"/>
<rect x="-38.3323" y="-420.02" width="30.4102" height="14.4001" transform="rotate(180)" class="st6"/>
<text x="-38.33" y="-409.22" transform="rotate(180)" class="st7">$8000</text> </g>
<g id="group18-37" transform="translate(297.405,-282.72)">
<title>3D stack middle</title>
<g id="shape19-38" transform="translate(77.0909,0)">
<title>Sheet.19</title>
<path d="M0 412.82 L7.2 405.62 L7.2 387.58 L0 394.78 L0 412.82 Z" class="st1"/>
</g>
<g id="shape20-40">
<title>Sheet.20</title>
<rect x="0" y="394.784" width="77.0909" height="18.0364" class="st2"/>
</g>
</g>
<g id="group21-42" transform="translate(297.405,-297.12)">
<title>3D stack middle.21</title>
<g id="shape22-43" transform="translate(77.0909,0)">
<title>Sheet.22</title>
<path d="M0 412.82 L7.2 405.62 L7.2 384.02 L0 391.22 L0 412.82 Z" class="st1"/>
</g>
<g id="shape23-45">
<title>Sheet.23</title>
<rect x="0" y="391.22" width="77.0909" height="21.6" class="st2"/>
</g>
</g>
<g id="group24-47" transform="translate(297.405,-318.72)">
<title>3D stack middle.24</title>
<g id="shape25-48" transform="translate(77.0909,0)">
<title>Sheet.25</title>
<path d="M0 412.82 L7.2 405.62 L7.2 384.02 L0 391.22 L0 412.82 Z" class="st1"/>
</g>
<g id="shape26-50">
<title>Sheet.26</title>
<rect x="0" y="391.22" width="77.0909" height="21.6" class="st2"/>
</g>
</g>
<g id="shape27-52" transform="translate(220.314,-340.32)">
<title>Sheet.27</title>
<desc>HBIOS Proxy (RST 08)</desc>
<rect x="0" y="391.22" width="154.182" height="21.6" class="st8"/>
<text x="34.06" y="405.02" class="st9">HBIOS Proxy (RST 08)</text> </g>
<g id="shape28-55" transform="translate(220.314,-109.92)">
<title>Sheet.28</title>
<desc>Application Area (TPA)</desc>
<rect x="0" y="237.402" width="154.836" height="175.418" class="st8"/>
<text x="22.5" y="328.71" class="st7">Application Area (TPA)</text> </g>
<g id="shape29-58" transform="translate(220.314,-282.72)">
<title>Sheet.29</title>
<desc>Operating System CP/M or ZSYS</desc>
<rect x="0" y="355.22" width="77.0909" height="57.6" class="st8"/>
<text x="2.38" y="375.02" class="st9">Operating System <tspan x="11.08" dy="2.4em" class="st10">CP/M or ZSYS</tspan></text> </g>
<g id="shape30-62" transform="translate(297.405,-318.72)">
<title>Sheet.30</title>
<desc>CBIOS</desc>
<rect x="0" y="391.22" width="77.0909" height="21.6" class="st8"/>
<text x="26.29" y="405.02" class="st9">CBIOS</text> </g>
<g id="shape31-65" transform="translate(297.405,-297.12)">
<title>Sheet.31</title>
<desc>BDOS</desc>
<rect x="0" y="391.22" width="77.0909" height="21.6" class="st8"/>
<text x="27.14" y="405.02" class="st9">BDOS</text> </g>
<g id="shape32-68" transform="translate(297.405,-282.72)">
<title>Sheet.32</title>
<desc>CCP</desc>
<rect x="0" y="398.42" width="77.0909" height="14.4" class="st8"/>
<text x="30.63" y="408.62" class="st9">CCP</text> </g>
<g id="group33-71" transform="translate(72.75,-109.92)">
<title>Data block.33</title>
<g id="shape34-72" transform="translate(108,0)">
<title>Sheet.34</title>
<path d="M0 412.82 L11.41 401.41 L11.41 286.21 L0 297.62 L0 412.82 Z" class="st1"/>
</g>
<g id="shape35-74" transform="translate(0,-115.2)">
<title>Sheet.35</title>
<path d="M0 412.82 L108 412.82 L119.41 401.41 L11.41 401.41 L0 412.82 Z" class="st1"/>
</g>
<g id="shape36-76">
<title>Sheet.36</title>
<rect x="0" y="297.62" width="108" height="115.2" class="st2"/>
</g>
</g>
<g id="shape37-78" transform="translate(22.35,-225.12)">
<title>Sheet.37</title>
<path d="M0 412.82 L360 412.82" class="st11"/>
</g>
<g id="shape38-81" transform="translate(72.75,-109.92)">
<title>Sheet.38</title>
<desc>HBIOS (Hardware Drivers)</desc>
<rect x="0" y="297.62" width="108" height="115.2" class="st8"/>
<text x="38.76" y="351.62" class="st7">HBIOS <tspan x="7.61" dy="1.2em" class="st10">(Hardware Drivers)</tspan></text> </g>
<g id="shape39-85" transform="translate(22.35,-109.92)">
<title>Sheet.39</title>
<path d="M0 412.82 L338.4 412.82" class="st11"/>
</g>
<g id="shape40-88" transform="translate(22.35,-361.92)">
<title>Sheet.40</title>
<path d="M0 412.82 L360 412.82" class="st11"/>
</g>
<g id="shape43-91" transform="translate(-397.67,302.9) rotate(-90)">
<title>Sheet.43</title>
<desc>Z80 CPU Address Space</desc>
<rect x="0" y="398.42" width="252" height="14.4" class="st12"/>
<text x="69.04" y="409.22" class="st7">Z80 CPU Address Space</text> </g>
<g id="shape41-94" transform="translate(-383.27,302.9) rotate(-90)">
<title>Sheet.41</title>
<desc>Banked Lower 32K</desc>
<rect x="0" y="398.42" width="115.2" height="14.4" class="st12"/>
<text x="12.48" y="409.22" class="st7">Banked Lower 32K</text> </g>
<g id="shape42-97" transform="translate(-383.27,187.7) rotate(-90)">
<title>Sheet.42</title>
<desc>Fixed Upper 32K</desc>
<rect x="0" y="398.42" width="136.8" height="14.4" class="st12"/>
<text x="28.39" y="409.22" class="st7">Fixed Upper 32K</text> </g>
<g id="shape1-100" transform="translate(65.55,463.72) rotate(180)">
<title>Sheet.1</title>
<desc>$10000</desc>
<path d="M0 412.82 L36 412.82" class="st3"/>
<rect x="-31.6846" y="-418.22" width="27.3691" height="10.7998" transform="rotate(180)" class="st6"/>
<text x="-31.68" y="-410.12" transform="rotate(180)" class="st5">$10000</text> </g>
<g id="shape4-105" transform="translate(65.55,715.72) rotate(180)">
<title>Sheet.4</title>
<desc>$0000</desc>
<path d="M0 412.82 L36 412.82" class="st3"/>
<rect x="-29.4038" y="-418.22" width="22.8076" height="10.7998" transform="rotate(180)" class="st4"/>
<text x="-29.4" y="-410.12" transform="rotate(180)" class="st5">$0000</text> </g>
<g id="shape44-110" transform="translate(798.77,50.9) rotate(90)">
<title>Bracket</title>
<path d="M0 412.82 A6.11239 6.11239 0 0 1 5.4 407.42 L64.22 407.42 A6.11239 6.11239 -180 0 0 69.62 402.02 A6.11239 6.11239
-180 0 0 75.02 407.42 L131.4 407.42 A6.11239 6.11239 0 0 1 136.8 412.82" class="st13"/>
</g>
<g id="shape45-113" transform="translate(0.750002,-52.32)">
<title>Sheet.45</title>
<desc>Bank 0</desc>
<rect x="0" y="398.42" width="36" height="14.4" class="st12"/>
<text x="5.69" y="408.32" class="st5">Bank 0</text> </g>
<g id="shape47-116" transform="translate(252.75,-52.32)">
<title>Sheet.47</title>
<desc>App/OS Banks</desc>
<rect x="0" y="398.42" width="108" height="14.4" class="st12"/>
<text x="28.09" y="408.32" class="st5">App/OS Banks</text> </g>
<g id="shape48-119" transform="translate(360.75,-52.32)">
<title>Sheet.48</title>
<desc>Bank N-1</desc>
<rect x="0" y="398.42" width="36" height="14.4" class="st12"/>
<text x="1.41" y="408.32" class="st5">Bank N-1</text> </g>
<g id="shape49-122" transform="translate(396.75,-52.32)">
<title>Sheet.49</title>
<desc>Bank N</desc>
<rect x="0" y="398.42" width="36" height="14.4" class="st12"/>
<text x="5.06" y="408.32" class="st5">Bank N</text> </g>
<g id="shape50-125" transform="translate(36.75,-52.32)">
<title>Sheet.50</title>
<desc>• • •</desc>
<rect x="0" y="398.42" width="216" height="14.4" class="st12"/>
<text x="91.49" y="408.62" class="st9">• • •</text> </g>
<g id="shape51-128" transform="translate(375.15,715.72) rotate(180)">
<title>Bracket.51</title>
<path d="M0 412.82 A8.14985 8.14985 0 0 1 7.2 405.62 L36 405.62 A8.14985 8.14985 -180 0 0 43.2 398.42 A8.14985 8.14985
-180 0 0 50.4 405.62 L151.2 405.62 A8.14985 8.14985 0 0 1 158.4 412.82" class="st13"/>
</g>
<g id="shape55-131" transform="translate(396.75,-66.72)">
<title>Sheet.55</title>
<path d="M0 187.31 L9 187.31 A9 9 0 0 1 18 196.31 L18 404.78" class="st14"/>
</g>
<g id="shape56-137" transform="translate(0.750002,-37.92)">
<title>Sheet.56</title>
<desc>Physical RAM (32K per bank)</desc>
<rect x="0" y="398.42" width="432" height="14.4" class="st12"/>
<text x="157.88" y="408.62" class="st9">Physical RAM (32K per bank)</text> </g>
<g id="shape57-140" transform="translate(180.75,715.72) rotate(180)">
<title>Bracket.57</title>
<desc>`</desc>
<path d="M0 412.82 A8.14984 8.14984 0 0 1 7.2 405.62 L46.8 405.62 A8.14984 8.14984 -180 0 0 54 398.42 A8.14984 8.14984
-180 0 0 61.2 405.62 L100.8 405.62 A8.14984 8.14984 0 0 1 108 412.82" class="st13"/>
<rect x="393.092" y="-58.7999" width="2.328" height="9.59985" transform="rotate(90)" class="st4"/>
<text x="393.09" y="-51.6" transform="rotate(90)" class="st16">`</text> </g>
<g id="shape58-145" transform="translate(449.57,360.5) rotate(90)">
<title>Sheet.58</title>
<path d="M0 412.82 L34.16 412.82" class="st17"/>
</g>
<g id="group60-148" transform="translate(36.75,-0.12)">
<title>3D stack top</title>
<desc>RAM Disk</desc>
<g id="shape61-149" transform="translate(208.8,0)">
<title>Sheet.61</title>
<path d="M0 412.82 L7.09 405.73 L7.09 387.73 L0 394.82 L0 412.82 Z" class="st1"/>
</g>
<g id="shape62-151" transform="translate(0,-18)">
<title>Sheet.62</title>
<path d="M0 412.82 L208.8 412.82 L215.89 405.73 L7.09 405.73 L0 412.82 Z" class="st1"/>
</g>
<g id="shape63-153">
<title>Sheet.63</title>
<rect x="0" y="394.82" width="208.8" height="18" class="st2"/>
</g>
<g id="shape60-155">
<text x="88.83" y="406.22" class="st16">RAM Disk</text> </g>
</g>
<g id="shape64-157" transform="translate(-59.27,84.02) rotate(-90)">
<title>Pointer (1-D)</title>
<path d="M1.71 412.82 L2.07 412.82 L16.08 412.82" class="st18"/>
</g>
<g id="shape65-166" transform="translate(-95.27,108.5) rotate(-90)">
<title>Pointer (1-D).65</title>
<path d="M1.71 412.82 L2.07 412.82 L18.96 412.82" class="st18"/>
</g>
<g id="shape66-173" transform="translate(-52.07,122.9) rotate(-90)">
<title>Pointer (1-D).66</title>
<path d="M1.71 412.82 L2.07 412.82 L11.76 412.82" class="st18"/>
</g>
<g id="shape67-180" transform="translate(-105.35,137.3) rotate(-90)">
<title>Pointer (1-D).67</title>
<path d="M1.71 412.82 L2.07 412.82 L26.16 412.82" class="st18"/>
</g>
<g id="shape70-187" transform="translate(228.935,-227.945) scale(-1,1)">
<title>Sheet.70</title>
<path d="M2.65 293.24 L3.01 293.24 L76.08 293.24 A22.5 22.5 0 0 1 98.58 315.74 L98.58 404.78" class="st20"/>
</g>
<g id="shape68-195" transform="translate(87.15,-289.92)">
<title>Sheet.68</title>
<desc>HBIOS Function Call w/ Bank Switch</desc>
<rect x="0" y="384.02" width="86.4" height="28.8" class="st2"/>
<text x="7.14" y="395.72" class="st5">HBIOS Function Call <tspan x="15.11" dy="1.2em" class="st10">w/ Bank Switch</tspan></text> </g>
<g id="shape69-199" transform="translate(0.75,-390.72)">
<title>Sheet.69</title>
<desc>RomWBW Bank Switched Memory Layout</desc>
<rect x="0" y="391.22" width="432" height="21.6" class="st21"/>
<text x="113.82" y="405.62" class="st7">RomWBW Bank Switched Memory Layout</text> </g>
<g id="shape59-202" transform="translate(665.566,362.226) rotate(90.2396)">
<title>Sheet.59</title>
<path d="M0 412.82 L27.11 412.82" class="st17"/>
</g>
<g id="shape52-205" transform="translate(16.33,324.5) rotate(-90)">
<title>Sheet.52</title>
<desc>Fixed Mapping of Upper 32K to Last Bank</desc>
<rect x="0" y="398.42" width="172.8" height="14.4" class="st8"/>
<text x="11.1" y="408.32" class="st5">Fixed Mapping of Upper 32K to Last Bank</text> </g>
<g id="shape72-208" transform="translate(331.95,-66.72)">
<title>Sheet.72</title>
<path d="M0 384.02 L0 387.62 A3.59999 3.59999 -180 0 0 3.6 391.22 L45.4 391.22 A5 5 0 0 1 50.4 396.22 L50.4 404.78"
class="st14"/>
</g>
<g id="shape74-213" transform="translate(126.75,-66.72) scale(-1,1)">
<title>Sheet.74</title>
<path d="M0 384.02 L0 387.62 A3.59999 3.59999 -180 0 0 3.6 391.22 L103 391.22 A5 5 0 0 1 108 396.22 L108 404.78"
class="st14"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -0,0 +1,830 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export CharacterEmulationVideoServices.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
width="6.01042in" height="5.76042in" viewBox="0 0 432.75 414.75" xml:space="preserve" color-interpolation-filters="sRGB"
class="st16">
<style type="text/css">
<![CDATA[
.st1 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st2 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}
.st3 {font-size:1em}
.st4 {marker-end:url(#mrkr13-15);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st5 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}
.st6 {fill:#a5a5a5;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st7 {fill:#000000;font-family:Calibri;font-size:0.666664em;font-weight:bold}
.st8 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
.st9 {fill:#00ff00;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st10 {fill:#e6e6e6;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st11 {fill:#b3b3b3;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st12 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st13 {fill:#ffffff;stroke:#000000;stroke-dasharray:0.75,1.5;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st14 {fill:#000000;font-family:Calibri;font-size:0.499992em;font-weight:bold}
.st15 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
.st16 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
]]>
</style>
<defs id="Markers">
<g id="lend13">
<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
</g>
<marker id="mrkr13-15" class="st5" refX="-13.08" orient="auto" markerUnits="strokeWidth" overflow="visible">
<use xlink:href="#lend13" transform="scale(-4.36,-4.36) "/>
</marker>
</defs>
<g>
<title>Page-1</title>
<g id="shape81-1" transform="translate(17.625,414.375) rotate(-90)">
<title>Sheet.81</title>
<rect x="0" y="279.75" width="360" height="135" class="st1"/>
</g>
<g id="shape80-3" transform="translate(-135.375,414.375) rotate(-90)">
<title>Sheet.80</title>
<rect x="0" y="189.75" width="360" height="225" class="st1"/>
</g>
<g id="shape1-5" transform="translate(108.539,-315.375)">
<title>Sheet.1</title>
<desc>Character I/O Services</desc>
<rect x="0" y="378.75" width="53.8364" height="36" class="st1"/>
<text x="6.75" y="387.75" class="st2">Character <tspan x="20.06" dy="1.2em" class="st3">I/O </tspan><tspan x="10.06"
dy="1.2em" class="st3">Services</tspan></text> </g>
<g id="shape2-10" transform="translate(36.375,-333.375)">
<title>Sheet.2</title>
<path d="M0 414.75 L62.35 414.75" class="st4"/>
</g>
<g id="shape8-16" transform="translate(550.125,153.375) rotate(90)">
<title>Sheet.8</title>
<path d="M0 414.75 L17.19 414.75" class="st4"/>
</g>
<g id="shape9-21" transform="translate(108.375,-189.375)">
<title>Sheet.9</title>
<desc>Emulation Services</desc>
<rect x="0" y="369.75" width="54" height="45" class="st1"/>
<text x="5.78" y="389.25" class="st2">Emulation <tspan x="10.14" dy="1.2em" class="st3">Services</tspan></text> </g>
<g id="shape10-25" transform="translate(108.375,-171.375)">
<title>Sheet.10</title>
<desc>TTY</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="19.45" y="408.75" class="st2">TTY</text> </g>
<g id="shape11-28" transform="translate(108.375,-153.375)">
<title>Sheet.11</title>
<desc>ANSI</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="16.98" y="408.75" class="st2">ANSI</text> </g>
<g id="shape12-31" transform="translate(162.211,-180.375)">
<title>Sheet.12</title>
<path d="M0 414.75 L17.35 414.75" class="st4"/>
</g>
<g id="shape13-36" transform="translate(162.211,-162.375)">
<title>Sheet.13</title>
<path d="M0 414.75 L17.35 414.75" class="st4"/>
</g>
<g id="shape14-41" transform="translate(189.375,-99.375)">
<title>Sheet.14</title>
<desc>Video Display Adapter Services</desc>
<rect x="0" y="324.75" width="54" height="90" class="st1"/>
<text x="14.93" y="354.75" class="st2">Video <tspan x="11.88" dy="1.2em" class="st3">Display </tspan><tspan x="10.11"
dy="1.2em" class="st3">Adapter </tspan><tspan x="10.14" dy="1.2em" class="st3">Services</tspan></text> </g>
<g id="shape18-47" transform="translate(243.375,-36.375)">
<title>Sheet.18</title>
<path d="M0 414.75 L62.19 414.75" class="st4"/>
</g>
<g id="shape27-52" transform="translate(315.375,-315.375)">
<title>Sheet.27</title>
<desc>UART</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="13.19" y="408.15" class="st7">UART</text> </g>
<g id="shape34-55" transform="translate(314.311,-261.375)">
<title>Sheet.34</title>
<desc>ASCI</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="14.96" y="408.15" class="st7">ASCI</text> </g>
<g id="group20-58" transform="translate(396.375,-94.875)">
<title>Terminal.20</title>
<g id="shape36-59" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.36</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape37-61" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.37</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape38-63" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.38</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape39-65" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.39</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape40-67" transform="translate(315.375,-99.375)">
<title>Sheet.40</title>
<desc>CVDU</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="12.84" y="408.15" class="st7">CVDU</text> </g>
<g id="shape41-70" transform="translate(360.293,-108.375)">
<title>Sheet.41</title>
<path d="M0 414.75 L26.27 414.75" class="st4"/>
</g>
<g id="shape47-75" transform="translate(315.375,-63.375)">
<title>Sheet.47</title>
<desc>UPD7220</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="7.09" y="408.15" class="st7">UPD7220</text> </g>
<g id="shape54-78" transform="translate(315.375,-27.375)">
<title>Sheet.54</title>
<desc>N8</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="17.8" y="408.15" class="st7">N8</text> </g>
<g id="shape56-81" transform="translate(54.375,-333.375)">
<title>Sheet.56</title>
<desc>CIOXXX</desc>
<rect x="0" y="401.25" width="45" height="13.5" class="st12"/>
<text x="10" y="410.4" class="st7">CIOXXX</text> </g>
<g id="shape57-84" transform="translate(54.375,-117.375)">
<title>Sheet.57</title>
<desc>VDAXXX</desc>
<rect x="0" y="401.25" width="45" height="13.5" class="st12"/>
<text x="8.58" y="410.4" class="st7">VDAXXX</text> </g>
<g id="shape58-87" transform="translate(-378.375,414.375) rotate(-90)">
<title>Sheet.58</title>
<desc>Operating System / Utilities</desc>
<rect x="0" y="378.75" width="360" height="36" class="st1"/>
<text x="122.42" y="399.75" class="st2">Operating System / Utilities</text> </g>
<g id="shape59-90" transform="translate(108.375,-135.375)">
<title>Sheet.59</title>
<desc>Others...</desc>
<path d="M0 414.75 L54 414.75 L54 396.75 L0 396.75 L0 414.75 Z" class="st13"/>
<text x="8.91" y="408.75" class="st2">Others...</text> </g>
<g id="shape60-93" transform="translate(162.211,-144.375)">
<title>Sheet.60</title>
<path d="M0 414.75 L17.35 414.75" class="st4"/>
</g>
<g id="shape61-98" transform="translate(36.375,-211.875)">
<title>Sheet.61</title>
<path d="M0 414.75 L62.19 414.75" class="st4"/>
</g>
<g id="shape62-103" transform="translate(54.375,-211.875)">
<title>Sheet.62</title>
<desc>EMUXXX</desc>
<rect x="0" y="401.25" width="45" height="13.5" class="st12"/>
<text x="7.83" y="410.4" class="st7">EMUXXX</text> </g>
<g id="shape15-106" transform="translate(36.375,-117.375)">
<title>Sheet.15</title>
<path d="M0 414.75 L143.19 414.75" class="st4"/>
</g>
<g id="group16-111" transform="translate(396.375,-58.875)">
<title>Terminal.16</title>
<g id="shape42-112" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.42</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape43-114" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.43</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape44-116" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.44</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape45-118" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.45</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape46-120" transform="translate(360.375,-72.375)">
<title>Sheet.46</title>
<path d="M0 414.75 L26.19 414.75" class="st4"/>
</g>
<g id="group48-125" transform="translate(396.436,-22.875)">
<title>Terminal.48</title>
<g id="shape49-126" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.49</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape50-128" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.50</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape51-130" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.51</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape52-132" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.52</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape53-134" transform="translate(360.293,-36.375)">
<title>Sheet.53</title>
<path d="M0 414.75 L26.27 414.75" class="st4"/>
</g>
<g id="group22-139" transform="translate(396.375,-310.875)">
<title>Terminal.22</title>
<g id="shape23-140" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.23</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape24-142" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.24</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape25-144" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.25</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape26-146" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.26</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape28-148" transform="translate(360.293,-324.375)">
<title>Sheet.28</title>
<path d="M0 414.75 L26.27 414.75" class="st4"/>
</g>
<g id="group29-153" transform="translate(396.375,-256.875)">
<title>Terminal.29</title>
<g id="shape30-154" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.30</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape31-156" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.31</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape32-158" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.32</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape33-160" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.33</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape35-162" transform="translate(359.23,-270.375)">
<title>Sheet.35</title>
<path d="M0 414.75 L27.34 414.75" class="st4"/>
</g>
<g id="shape55-167" transform="translate(360.375,-324.375)">
<title>Sheet.55</title>
<desc>RS-232</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="4.91" y="412.05" class="st14">RS-232</text> </g>
<g id="shape63-170" transform="translate(359.311,-270.375)">
<title>Sheet.63</title>
<desc>RS-232</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="4.91" y="412.05" class="st14">RS-232</text> </g>
<g id="shape64-173" transform="translate(360.375,-108.375)">
<title>Sheet.64</title>
<desc>VGA</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="8" y="412.05" class="st14">VGA</text> </g>
<g id="shape65-176" transform="translate(360.375,-72.375)">
<title>Sheet.65</title>
<desc>VGA</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="8" y="412.05" class="st14">VGA</text> </g>
<g id="shape66-179" transform="translate(360.375,-36.375)">
<title>Sheet.66</title>
<desc>NTSC</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="7.03" y="412.05" class="st14">NTSC</text> </g>
<g id="shape67-182" transform="translate(108.375,-297.375)">
<title>Sheet.67</title>
<desc>UART</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="15.42" y="408.75" class="st2">UART</text> </g>
<g id="shape68-185" transform="translate(108.375,-279.375)">
<title>Sheet.68</title>
<desc>ASCI</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="17.63" y="408.75" class="st2">ASCI</text> </g>
<g id="shape69-188" transform="translate(108.375,-261.375)">
<title>Sheet.69</title>
<desc>VDU</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="17.63" y="408.75" class="st2">VDU</text> </g>
<g id="shape74-191" transform="translate(189.375,-81.375)">
<title>Sheet.74</title>
<desc>SY6545</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="11.9" y="408.75" class="st2">SY6545</text> </g>
<g id="shape75-194" transform="translate(189.375,-63.375)">
<title>Sheet.75</title>
<desc>MC8563</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="9.85" y="408.75" class="st2">MC8563</text> </g>
<g id="shape76-197" transform="translate(189.375,-45.375)">
<title>Sheet.76</title>
<desc>uPD7220</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="8.37" y="408.75" class="st2">uPD7220</text> </g>
<g id="shape79-200" transform="translate(0.375,-396.375)">
<title>Sheet.79</title>
<desc>Character / Emulation / Video Services</desc>
<rect x="0" y="396.75" width="432" height="18" class="st1"/>
<text x="103.64" y="409.95" class="st15">Character / Emulation / Video Services</text> </g>
<g id="shape82-203" transform="translate(54.375,-360.375)">
<title>Sheet.82</title>
<desc>HBIOS</desc>
<rect x="0" y="396.75" width="225" height="18" class="st12"/>
<text x="99.47" y="408.75" class="st2">HBIOS</text> </g>
<g id="shape83-206" transform="translate(297.375,-360.375)">
<title>Sheet.83</title>
<desc>HARDWARE</desc>
<rect x="0" y="396.75" width="135" height="18" class="st12"/>
<text x="42.53" y="408.75" class="st2">HARDWARE</text> </g>
<g id="shape84-209" transform="translate(189.375,-27.375)">
<title>Sheet.84</title>
<desc>TMS9918</desc>
<rect x="0" y="396.75" width="54" height="18" class="st1"/>
<text x="7.65" y="408.75" class="st2">TMS9918</text> </g>
<g id="group87-212" transform="translate(395.311,-130.875)">
<title>Terminal.87</title>
<g id="shape88-213" transform="translate(-391.186,414.75) rotate(-90)">
<title>Sheet.88</title>
<path d="M0 414.75 L27 414.75 L27 409.08 L0 409.08 L0 414.75 ZM26.25 403.93 L23.44 399.37 L3.53 399.37 L0.75 403.93
L26.25 403.93 ZM23.44 399.37 L23.44 391.19 L3.53 391.19 L3.53 399.37 L23.44 399.37 ZM26.25 407.7 L26.25
403.93 L0.75 403.93 L0.75 407.7 L26.25 407.7 ZM24.83 407.7 A1223.48 394.162 90 0 1 2.17 407.7 L24.83
407.7 Z" class="st8"/>
</g>
<g id="shape89-215" transform="translate(-395.768,392.25) rotate(-90)">
<title>Sheet.89</title>
<rect x="0" y="414.641" width="0.75" height="0.109091" class="st9"/>
</g>
<g id="shape90-217" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.90</title>
<path d="M1.69 410.93 L2.63 410.93 L2.63 410.39 L1.69 410.39 L1.69 410.93 ZM2.81 410.93 L3.75 410.93 L3.75 410.39
L2.81 410.39 L2.81 410.93 ZM3.94 410.93 L4.87 410.93 L4.87 410.39 L3.94 410.39 L3.94 410.93 ZM5.06 410.93
L6 410.93 L6 410.39 L5.06 410.39 L5.06 410.93 ZM12.28 410.93 L13.22 410.93 L13.22 410.39 L12.28 410.39
L12.28 410.93 ZM13.41 410.93 L14.34 410.93 L14.34 410.39 L13.41 410.39 L13.41 410.93 ZM14.53 410.93
L15.47 410.93 L15.47 410.39 L14.53 410.39 L14.53 410.93 ZM15.66 410.93 L16.59 410.93 L16.59 410.39 L15.66
410.39 L15.66 410.93 ZM0 412.02 L1.5 412.02 L1.5 411.48 L0 411.48 L0 412.02 ZM1.69 412.02 L2.63 412.02
L2.63 411.48 L1.69 411.48 L1.69 412.02 ZM2.81 412.02 L3.75 412.02 L3.75 411.48 L2.81 411.48 L2.81 412.02
ZM3.94 412.02 L4.87 412.02 L4.87 411.48 L3.94 411.48 L3.94 412.02 ZM5.06 412.02 L6 412.02 L6 411.48
L5.06 411.48 L5.06 412.02 ZM6.19 412.02 L7.12 412.02 L7.12 411.48 L6.19 411.48 L6.19 412.02 ZM7.31 412.02
L8.25 412.02 L8.25 411.48 L7.31 411.48 L7.31 412.02 ZM8.44 412.02 L9.37 412.02 L9.37 411.48 L8.44 411.48
L8.44 412.02 ZM9.56 412.02 L10.5 412.02 L10.5 411.48 L9.56 411.48 L9.56 412.02 ZM10.69 412.02 L11.62
412.02 L11.62 411.48 L10.69 411.48 L10.69 412.02 ZM11.81 412.02 L12.75 412.02 L12.75 411.48 L11.81 411.48
L11.81 412.02 ZM12.94 412.02 L13.87 412.02 L13.87 411.48 L12.94 411.48 L12.94 412.02 ZM14.06 412.02
L15 412.02 L15 411.48 L14.06 411.48 L14.06 412.02 ZM1.69 412.7 L2.63 412.7 L2.63 412.16 L1.69 412.16
L1.69 412.7 ZM2.81 412.7 L3.75 412.7 L3.75 412.16 L2.81 412.16 L2.81 412.7 ZM3.94 412.7 L4.87 412.7
L4.87 412.16 L3.94 412.16 L3.94 412.7 ZM5.06 412.7 L6 412.7 L6 412.16 L5.06 412.16 L5.06 412.7 ZM6.19
412.7 L7.12 412.7 L7.12 412.16 L6.19 412.16 L6.19 412.7 ZM7.31 412.7 L8.25 412.7 L8.25 412.16 L7.31
412.16 L7.31 412.7 ZM8.44 412.7 L9.37 412.7 L9.37 412.16 L8.44 412.16 L8.44 412.7 ZM9.56 412.7 L10.5
412.7 L10.5 412.16 L9.56 412.16 L9.56 412.7 ZM10.69 412.7 L11.62 412.7 L11.62 412.16 L10.69 412.16 L10.69
412.7 ZM11.81 412.7 L12.75 412.7 L12.75 412.16 L11.81 412.16 L11.81 412.7 ZM12.94 412.7 L13.87 412.7
L13.87 412.16 L12.94 412.16 L12.94 412.7 ZM14.06 412.7 L15 412.7 L15 412.16 L14.06 412.16 L14.06 412.7
ZM1.69 413.39 L2.63 413.39 L2.63 412.84 L1.69 412.84 L1.69 413.39 ZM2.81 413.39 L3.75 413.39 L3.75 412.84
L2.81 412.84 L2.81 413.39 ZM3.94 413.39 L4.87 413.39 L4.87 412.84 L3.94 412.84 L3.94 413.39 ZM5.06 413.39
L6 413.39 L6 412.84 L5.06 412.84 L5.06 413.39 ZM6.19 413.39 L7.12 413.39 L7.12 412.84 L6.19 412.84 L6.19
413.39 ZM7.31 413.39 L8.25 413.39 L8.25 412.84 L7.31 412.84 L7.31 413.39 ZM8.44 413.39 L9.37 413.39
L9.37 412.84 L8.44 412.84 L8.44 413.39 ZM9.56 413.39 L10.5 413.39 L10.5 412.84 L9.56 412.84 L9.56 413.39
ZM10.69 413.39 L11.62 413.39 L11.62 412.84 L10.69 412.84 L10.69 413.39 ZM11.81 413.39 L12.75 413.39
L12.75 412.84 L11.81 412.84 L11.81 413.39 ZM12.94 413.39 L13.87 413.39 L13.87 412.84 L12.94 412.84 L12.94
413.39 ZM14.06 413.39 L15 413.39 L15 412.84 L14.06 412.84 L14.06 413.39 ZM1.69 414.07 L2.63 414.07 L2.63
413.52 L1.69 413.52 L1.69 414.07 ZM2.81 414.07 L3.75 414.07 L3.75 413.52 L2.81 413.52 L2.81 414.07 ZM3.94
414.07 L4.87 414.07 L4.87 413.52 L3.94 413.52 L3.94 414.07 ZM5.06 414.07 L6 414.07 L6 413.52 L5.06 413.52
L5.06 414.07 ZM6.19 414.07 L7.12 414.07 L7.12 413.52 L6.19 413.52 L6.19 414.07 ZM7.31 414.07 L8.25 414.07
L8.25 413.52 L7.31 413.52 L7.31 414.07 ZM8.44 414.07 L9.37 414.07 L9.37 413.52 L8.44 413.52 L8.44 414.07
ZM9.56 414.07 L10.5 414.07 L10.5 413.52 L9.56 413.52 L9.56 414.07 ZM10.69 414.07 L11.62 414.07 L11.62
413.52 L10.69 413.52 L10.69 414.07 ZM11.81 414.07 L12.75 414.07 L12.75 413.52 L11.81 413.52 L11.81 414.07
ZM12.94 414.07 L13.87 414.07 L13.87 413.52 L12.94 413.52 L12.94 414.07 ZM3.94 414.75 L11.62 414.75 L11.62
414.2 L3.94 414.2 L3.94 414.75 ZM21 414.75 L23.25 414.75 L23.25 414.2 L21 414.2 L21 414.75 ZM23.44 414.75
L24.37 414.75 L24.37 414.2 L23.44 414.2 L23.44 414.75 ZM23.44 414.07 L24.37 414.07 L24.37 413.52 L23.44
413.52 L23.44 414.07 ZM22.22 414.07 L23.16 414.07 L23.16 413.52 L22.22 413.52 L22.22 414.07 ZM21 414.07
L21.94 414.07 L21.94 413.52 L21 413.52 L21 414.07 ZM21 413.39 L21.94 413.39 L21.94 412.84 L21 412.84
L21 413.39 ZM21 412.7 L21.94 412.7 L21.94 412.16 L21 412.16 L21 412.7 ZM22.22 412.7 L23.16 412.7 L23.16
412.16 L22.22 412.16 L22.22 412.7 ZM23.44 412.7 L24.37 412.7 L24.37 412.16 L23.44 412.16 L23.44 412.7
ZM23.44 413.39 L24.37 413.39 L24.37 412.84 L23.44 412.84 L23.44 413.39 ZM22.22 413.39 L23.16 413.39
L23.16 412.84 L22.22 412.84 L22.22 413.39 Z" class="st10"/>
</g>
<g id="shape91-219" transform="translate(-391.623,414.188) rotate(-90)">
<title>Sheet.91</title>
<path d="M0 410.93 L0.94 410.93 L0.94 410.39 L0 410.39 L0 410.93 ZM0 412.7 L1.5 412.7 L1.5 412.16 L0 412.16 L0 412.7
ZM0 413.39 L1.5 413.39 L1.5 412.84 L0 412.84 L0 413.39 ZM0 414.07 L1.5 414.07 L1.5 413.52 L0 413.52
L0 414.07 ZM0 414.75 L1.5 414.75 L1.5 414.2 L0 414.2 L0 414.75 ZM1.69 414.75 L2.63 414.75 L2.63 414.2
L1.69 414.2 L1.69 414.75 ZM2.81 414.75 L3.75 414.75 L3.75 414.2 L2.81 414.2 L2.81 414.75 ZM11.81 414.75
L12.75 414.75 L12.75 414.2 L11.81 414.2 L11.81 414.75 ZM12.94 414.75 L13.87 414.75 L13.87 414.2 L12.94
414.2 L12.94 414.75 ZM14.06 414.75 L15 414.75 L15 414.2 L14.06 414.2 L14.06 414.75 ZM15.19 414.75 L16.69
414.75 L16.69 414.2 L15.19 414.2 L15.19 414.75 ZM17.25 414.75 L18.19 414.75 L18.19 414.2 L17.25 414.2
L17.25 414.75 ZM18.37 414.75 L19.31 414.75 L19.31 414.2 L18.37 414.2 L18.37 414.75 ZM19.5 414.75 L20.44
414.75 L20.44 414.2 L19.5 414.2 L19.5 414.75 ZM24.66 414.75 L25.59 414.75 L25.59 413.55 L24.66 413.55
L24.66 414.75 ZM24.66 413.44 L25.59 413.44 L25.59 412.16 L24.66 412.16 L24.66 413.44 ZM24.66 412.02
L25.59 412.02 L25.59 411.48 L24.66 411.48 L24.66 412.02 ZM23.44 412.02 L24.37 412.02 L24.37 411.48 L23.44
411.48 L23.44 412.02 ZM22.22 412.02 L23.16 412.02 L23.16 411.48 L22.22 411.48 L22.22 412.02 ZM21 412.02
L21.94 412.02 L21.94 411.48 L21 411.48 L21 412.02 ZM19.5 412.02 L20.44 412.02 L20.44 411.48 L19.5 411.48
L19.5 412.02 ZM19.5 412.7 L20.44 412.7 L20.44 412.16 L19.5 412.16 L19.5 412.7 ZM18.37 414.07 L19.31
414.07 L19.31 413.52 L18.37 413.52 L18.37 414.07 ZM14.06 414.06 L16.69 414.06 L16.69 413.51 L14.06 413.51
L14.06 414.06 ZM15.19 413.37 L16.69 413.37 L16.69 412.17 L15.19 412.17 L15.19 413.37 ZM17.25 412.7 L18.19
412.7 L18.19 412.16 L17.25 412.16 L17.25 412.7 ZM18.37 412.7 L19.31 412.7 L19.31 412.16 L18.37 412.16
L18.37 412.7 ZM18.37 412.02 L19.31 412.02 L19.31 411.48 L18.37 411.48 L18.37 412.02 ZM15.19 412.02 L16.69
412.02 L16.69 411.48 L15.19 411.48 L15.19 412.02 ZM24.19 410.6 L24.94 410.6 L24.94 410.5 L24.19 410.5
L24.19 410.6 ZM23.06 410.6 L23.81 410.6 L23.81 410.5 L23.06 410.5 L23.06 410.6 ZM19.5 410.93 L20.44
410.93 L20.44 410.39 L19.5 410.39 L19.5 410.93 ZM18.37 410.93 L19.31 410.93 L19.31 410.39 L18.37 410.39
L18.37 410.93 ZM17.25 410.93 L18.19 410.93 L18.19 410.39 L17.25 410.39 L17.25 410.93 ZM10.31 410.93
L11.25 410.93 L11.25 410.39 L10.31 410.39 L10.31 410.93 ZM9.19 410.93 L10.12 410.93 L10.12 410.39 L9.19
410.39 L9.19 410.93 ZM8.06 410.93 L9 410.93 L9 410.39 L8.06 410.39 L8.06 410.93 ZM6.94 410.93 L7.87
410.93 L7.87 410.39 L6.94 410.39 L6.94 410.93 ZM17.25 412.02 L18.19 412.02 L18.19 411.48 L17.25 411.48
L17.25 412.02 Z" class="st11"/>
</g>
</g>
<g id="shape92-221" transform="translate(314.311,-135.375)">
<title>Sheet.92</title>
<desc>VDU</desc>
<rect x="0" y="396.75" width="44.9182" height="18" class="st6"/>
<text x="14.96" y="408.15" class="st7">VDU</text> </g>
<g id="shape93-224" transform="translate(359.23,-144.375)">
<title>Sheet.93</title>
<path d="M0 414.75 L26.27 414.75" class="st4"/>
</g>
<g id="shape94-229" transform="translate(359.311,-144.375)">
<title>Sheet.94</title>
<desc>NTSC</desc>
<rect x="0" y="405.75" width="27" height="9" class="st12"/>
<text x="7.03" y="412.05" class="st14">NTSC</text> </g>
<g id="shape96-232" transform="translate(243.375,-90.375)">
<title>Sheet.96</title>
<path d="M0 414.75 L4.05 414.75 A4.05 4.05 -180 0 0 8.1 410.7 L8.1 365.25 A4.5 4.5 0 0 1 12.6 360.75 L61.13 360.75"
class="st4"/>
</g>
<g id="shape7-237" transform="translate(243.375,-72.375)">
<title>Sheet.7</title>
<path d="M0 414.75 L13.5 414.75 A4.5 4.5 -180 0 0 18 410.25 L18 383.25 A4.5 4.5 0 0 1 22.5 378.75 L62.19 378.75"
class="st4"/>
</g>
<g id="shape17-242" transform="translate(243.375,-54.375)">
<title>Sheet.17</title>
<path d="M0 414.75 L22.5 414.75 A4.5 4.5 -180 0 0 27 410.25 L27 401.25 A4.5 4.5 0 0 1 31.5 396.75 L62.19 396.75"
class="st4"/>
</g>
<g id="shape3-247" transform="translate(162.375,-306.375)">
<title>Sheet.3</title>
<path d="M0 414.75 L31.5 414.75 A4.5 4.5 -180 0 0 36 410.25 L36 401.25 A4.5 4.5 0 0 1 40.5 396.75 L143.19 396.75"
class="st4"/>
</g>
<g id="shape4-252" transform="translate(162.375,-270.375)">
<title>Sheet.4</title>
<path d="M0 396.75 L31.5 396.75 A4.5 4.5 0 0 1 36 401.25 L36 410.25 A4.5 4.5 -180 0 0 40.5 414.75 L142.13 414.75"
class="st4"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -1,15 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export WBW.svg Page-1 -->
<!-- Generated by Microsoft Visio, SVG Export Logo.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.5in" height="11in" viewBox="0 0 612 792"
xml:space="preserve" color-interpolation-filters="sRGB" class="st3">
<v:documentProperties v:langID="1033" v:viewMarkup="false">
<v:userDefs>
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
</v:userDefs>
</v:documentProperties>
width="3.76042in" height="1.26042in" viewBox="0 0 270.75 90.75" xml:space="preserve" color-interpolation-filters="sRGB"
class="st3">
<style type="text/css">
<![CDATA[
.st1 {fill:#4bacc6;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.75}
@@ -18,52 +12,51 @@
]]>
</style>
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
<g>
<title>Page-1</title>
<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="19" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
<g id="shape34-1" v:mID="34" v:groupContext="shape" transform="translate(18,-684)">
<g id="shape34-1" transform="translate(0.375,-0.375)">
<title>Sheet.34</title>
<rect x="0" y="702" width="18" height="90" rx="9" ry="9" class="st1"/>
<rect x="0" y="0.75" width="18" height="90" rx="9" ry="9" class="st1"/>
</g>
<g id="shape35-3" v:mID="35" v:groupContext="shape" transform="translate(54,-684)">
<g id="shape35-3" transform="translate(36.375,-0.375)">
<title>Sheet.35</title>
<rect x="0" y="738" width="18" height="54" rx="9" ry="9" class="st1"/>
<rect x="0" y="36.75" width="18" height="54" rx="9" ry="9" class="st1"/>
</g>
<g id="shape36-5" v:mID="36" v:groupContext="shape" transform="translate(90,-684)">
<g id="shape36-5" transform="translate(72.375,-0.375)">
<title>Sheet.36</title>
<rect x="0" y="702" width="18" height="90" rx="9" ry="9" class="st1"/>
<rect x="0" y="0.75" width="18" height="90" rx="9" ry="9" class="st1"/>
</g>
<g id="shape38-7" v:mID="38" v:groupContext="shape" transform="translate(234,-684)">
<g id="shape38-7" transform="translate(216.375,-0.375)">
<title>Sheet.38</title>
<rect x="0" y="738" width="18" height="54" rx="9" ry="9" class="st1"/>
<rect x="0" y="36.75" width="18" height="54" rx="9" ry="9" class="st1"/>
</g>
<g id="shape39-9" v:mID="39" v:groupContext="shape" transform="translate(270,-684)">
<g id="shape39-9" transform="translate(252.375,-0.375)">
<title>Sheet.39</title>
<rect x="0" y="702" width="18" height="90" rx="9" ry="9" class="st1"/>
<rect x="0" y="0.75" width="18" height="90" rx="9" ry="9" class="st1"/>
</g>
<g id="shape44-11" v:mID="44" v:groupContext="shape" transform="translate(198,-684)">
<g id="shape44-11" transform="translate(180.375,-0.375)">
<title>Sheet.44</title>
<rect x="0" y="702" width="18" height="90" rx="9" ry="9" class="st1"/>
<rect x="0" y="0.75" width="18" height="90" rx="9" ry="9" class="st1"/>
</g>
<g id="shape48-13" v:mID="48" v:groupContext="shape" transform="translate(126,-756)">
<g id="shape48-13" transform="translate(108.375,-72.375)">
<title>Sheet.48</title>
<rect x="0" y="774" width="36" height="18" rx="9" ry="9" class="st1"/>
<rect x="0" y="72.75" width="36" height="18" rx="9" ry="9" class="st1"/>
</g>
<g id="shape49-15" v:mID="49" v:groupContext="shape" transform="translate(126,-720)">
<g id="shape49-15" transform="translate(108.375,-36.375)">
<title>Sheet.49</title>
<rect x="0" y="774" width="36" height="18" rx="9" ry="9" class="st1"/>
<rect x="0" y="72.75" width="36" height="18" rx="9" ry="9" class="st1"/>
</g>
<g id="shape50-17" v:mID="50" v:groupContext="shape" transform="translate(126,-684)">
<g id="shape50-17" transform="translate(108.375,-0.375)">
<title>Sheet.50</title>
<rect x="0" y="774" width="36" height="18" rx="9" ry="9" class="st1"/>
<rect x="0" y="72.75" width="36" height="18" rx="9" ry="9" class="st1"/>
</g>
<g id="shape52-19" v:mID="52" v:groupContext="shape" transform="translate(153,-729)">
<g id="shape52-19" transform="translate(135.375,-45.375)">
<title>Sheet.52</title>
<path d="M-0 756 A18 18 0 0 1 18 774 A18 18 0 0 1 -0 792" class="st2"/>
<path d="M-0 54.75 A18 18 0 0 1 18 72.75 A18 18 0 0 1 -0 90.75" class="st2"/>
</g>
<g id="shape53-22" v:mID="53" v:groupContext="shape" transform="translate(153,-693)">
<g id="shape53-22" transform="translate(135.375,-9.375)">
<title>Sheet.53</title>
<path d="M-0 756 A18 18 0 0 1 18 774 A18 18 0 0 1 -0 792" class="st2"/>
<path d="M-0 54.75 A18 18 0 0 1 18 72.75 A18 18 0 0 1 -0 90.75" class="st2"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by Microsoft Visio, SVG Export Panel.svg Page-1 -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
width="4.51042in" height="2.51042in" viewBox="0 0 324.75 180.75" xml:space="preserve" color-interpolation-filters="sRGB"
class="st11">
<style type="text/css">
<![CDATA[
.st1 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st2 {fill:#7f7f7f;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st3 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st4 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}
.st5 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st6 {fill:#000000;font-family:Calibri;font-size:1.00001em}
.st7 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st8 {fill:#000000;font-family:Calibri;font-size:0.666664em}
.st9 {fill:#000000;font-family:Calibri;font-size:0.499992em}
.st10 {fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
.st11 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
]]>
</style>
<g>
<title>Page-1</title>
<g id="shape1-1" transform="translate(27.375,-117.375)">
<title>Sheet.1</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape2-3" transform="translate(99.375,-27.375)">
<title>Sheet.2</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape3-5" transform="translate(106.125,-18.375)">
<title>Sheet.3</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape8-7" transform="translate(63.375,-117.375)">
<title>Sheet.8</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape9-9" transform="translate(99.375,-117.375)">
<title>Sheet.9</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape10-11" transform="translate(135.375,-117.375)">
<title>Sheet.10</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape11-13" transform="translate(171.375,-117.375)">
<title>Sheet.11</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape12-15" transform="translate(207.375,-117.375)">
<title>Sheet.12</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape13-17" transform="translate(243.375,-117.375)">
<title>Sheet.13</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape14-19" transform="translate(279.375,-117.375)">
<title>Sheet.14</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st1"/>
</g>
<g id="shape18-21" transform="translate(27.375,-27.375)">
<title>Sheet.18</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape19-23" transform="translate(34.125,-18.375)">
<title>Sheet.19</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape20-25" transform="translate(63.375,-27.375)">
<title>Sheet.20</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape21-27" transform="translate(70.125,-18.375)">
<title>Sheet.21</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape22-29" transform="translate(135.375,-27.375)">
<title>Sheet.22</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape23-31" transform="translate(142.125,-18.375)">
<title>Sheet.23</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape24-33" transform="translate(171.375,-27.375)">
<title>Sheet.24</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape25-35" transform="translate(178.125,-18.375)">
<title>Sheet.25</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape26-37" transform="translate(207.375,-27.375)">
<title>Sheet.26</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape27-39" transform="translate(214.125,-18.375)">
<title>Sheet.27</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape28-41" transform="translate(243.375,-27.375)">
<title>Sheet.28</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape29-43" transform="translate(250.125,-18.375)">
<title>Sheet.29</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape30-45" transform="translate(279.375,-27.375)">
<title>Sheet.30</title>
<ellipse cx="9" cy="171.75" rx="9" ry="9.00001" class="st2"/>
</g>
<g id="shape31-47" transform="translate(286.125,-18.375)">
<title>Sheet.31</title>
<rect x="0" y="160.5" width="4.5" height="20.25" rx="2.25" ry="2.25" class="st3"/>
</g>
<g id="shape32-49" transform="translate(18.375,-153.375)">
<title>Sheet.32</title>
<path d="M0 180.75 L144 180.75" class="st4"/>
</g>
<g id="shape33-52" transform="translate(199.125,18.375) rotate(90)">
<title>Sheet.33</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape34-55" transform="translate(343.125,18.375) rotate(90)">
<title>Sheet.34</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape35-58" transform="translate(27.375,-135.375)">
<title>Sheet.35</title>
<desc>8</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">8</text> </g>
<g id="shape36-61" transform="translate(63.375,-135.375)">
<title>Sheet.36</title>
<desc>4</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">4</text> </g>
<g id="shape37-64" transform="translate(99.375,-135.375)">
<title>Sheet.37</title>
<desc>2</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">2</text> </g>
<g id="shape38-67" transform="translate(135.375,-135.375)">
<title>Sheet.38</title>
<desc>1</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">1</text> </g>
<g id="shape39-70" transform="translate(18.375,-153.375)">
<title>Sheet.39</title>
<desc>High</desc>
<rect x="0" y="162.75" width="144" height="18" class="st5"/>
<text x="60.91" y="175.35" class="st6">High</text> </g>
<g id="shape40-73" transform="translate(162.375,-153.375)">
<title>Sheet.40</title>
<path d="M0 180.75 L144 180.75" class="st4"/>
</g>
<g id="shape41-76" transform="translate(343.125,18.375) rotate(90)">
<title>Sheet.41</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape42-79" transform="translate(487.125,18.375) rotate(90)">
<title>Sheet.42</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape43-82" transform="translate(171.375,-135.375)">
<title>Sheet.43</title>
<desc>8</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">8</text> </g>
<g id="shape44-85" transform="translate(207.375,-135.375)">
<title>Sheet.44</title>
<desc>4</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">4</text> </g>
<g id="shape45-88" transform="translate(243.375,-135.375)">
<title>Sheet.45</title>
<desc>2</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">2</text> </g>
<g id="shape46-91" transform="translate(279.375,-135.375)">
<title>Sheet.46</title>
<desc>1</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">1</text> </g>
<g id="shape47-94" transform="translate(162.375,-153.375)">
<title>Sheet.47</title>
<desc>Low</desc>
<rect x="0" y="162.75" width="144" height="18" class="st5"/>
<text x="62.02" y="175.35" class="st6">Low</text> </g>
<g id="shape48-97" transform="translate(27.375,-99.3749)">
<title>Sheet.48</title>
<desc>7</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">7</text> </g>
<g id="shape49-100" transform="translate(63.375,-99.3749)">
<title>Sheet.49</title>
<desc>6</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">6</text> </g>
<g id="shape50-103" transform="translate(99.375,-99.375)">
<title>Sheet.50</title>
<desc>5</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">5</text> </g>
<g id="shape52-106" transform="translate(135.375,-99.375)">
<title>Sheet.52</title>
<desc>4</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">4</text> </g>
<g id="shape53-109" transform="translate(171.375,-99.375)">
<title>Sheet.53</title>
<desc>3</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">3</text> </g>
<g id="shape54-112" transform="translate(207.375,-99.375)">
<title>Sheet.54</title>
<desc>2</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">2</text> </g>
<g id="shape55-115" transform="translate(243.375,-99.375)">
<title>Sheet.55</title>
<desc>1</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">1</text> </g>
<g id="shape56-118" transform="translate(279.375,-99.375)">
<title>Sheet.56</title>
<desc>0</desc>
<rect x="0" y="162.75" width="18" height="18" class="st5"/>
<text x="5.96" y="175.35" class="st6">0</text> </g>
<g id="shape57-121" transform="translate(94.875,-58.875)">
<title>Sheet.57</title>
<path d="M0 180.75 L27 180.75" class="st7"/>
</g>
<g id="shape58-124" transform="translate(90.375,-58.875)">
<title>Sheet.58</title>
<desc>Auto</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="10.13" y="178.65" class="st8">Auto</text> </g>
<g id="shape59-127" transform="translate(90.375,-49.875)">
<title>Sheet.59</title>
<desc>Menu</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="8.39" y="178.65" class="st8">Menu</text> </g>
<g id="shape61-130" transform="translate(22.875,-58.875)">
<title>Sheet.61</title>
<path d="M0 180.75 L27 180.75" class="st7"/>
</g>
<g id="shape62-133" transform="translate(18.375,-58.875)">
<title>Sheet.62</title>
<desc>CRT</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="11.75" y="178.65" class="st8">CRT</text> </g>
<g id="shape63-136" transform="translate(18.375,-49.875)">
<title>Sheet.63</title>
<desc>Serial</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="9.03" y="178.65" class="st8">Serial</text> </g>
<g id="shape64-139" transform="translate(58.875,-58.875)">
<title>Sheet.64</title>
<path d="M0 180.75 L27 180.75" class="st7"/>
</g>
<g id="shape65-142" transform="translate(54.375,-58.875)">
<title>Sheet.65</title>
<desc>Sec</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="12.48" y="178.65" class="st8">Sec</text> </g>
<g id="shape66-145" transform="translate(54.375,-49.875)">
<title>Sheet.66</title>
<desc>Pri</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="13.62" y="178.65" class="st8">Pri</text> </g>
<g id="shape67-148" transform="translate(130.875,-58.875)">
<title>Sheet.67</title>
<path d="M0 180.75 L27 180.75" class="st7"/>
</g>
<g id="shape68-151" transform="translate(126.375,-58.875)">
<title>Sheet.68</title>
<desc>Disk</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="11.24" y="178.65" class="st8">Disk</text> </g>
<g id="shape69-154" transform="translate(126.375,-49.875)">
<title>Sheet.69</title>
<desc>ROM</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="9.76" y="178.65" class="st8">ROM</text> </g>
<g id="shape70-157" transform="translate(166.875,-58.875)">
<title>Sheet.70</title>
<path d="M0 180.75 L27 180.75" class="st7"/>
</g>
<g id="shape71-160" transform="translate(162.375,-58.875)">
<title>Sheet.71</title>
<desc>Floppy</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="7.12" y="178.65" class="st8">Floppy</text> </g>
<g id="shape72-163" transform="translate(162.375,-49.875)">
<title>Sheet.72</title>
<desc>Hard</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="10.1" y="178.65" class="st8">Hard</text> </g>
<g id="shape73-166" transform="translate(202.875,-58.875)">
<title>Sheet.73</title>
<path d="M0 180.75 L99 180.75" class="st7"/>
</g>
<g id="shape74-169" transform="translate(198.375,-49.875)">
<title>Sheet.74</title>
<desc>4</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="15.97" y="178.65" class="st8">4</text> </g>
<g id="shape75-172" transform="translate(234.375,-49.875)">
<title>Sheet.75</title>
<desc>2</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="15.97" y="178.65" class="st8">2</text> </g>
<g id="shape76-175" transform="translate(270.375,-49.875)">
<title>Sheet.76</title>
<desc>1</desc>
<rect x="0" y="171.75" width="36" height="9.00001" class="st5"/>
<text x="15.97" y="178.65" class="st8">1</text> </g>
<g id="shape78-178" transform="translate(198.375,-58.875)">
<title>Sheet.78</title>
<desc>ROM App / Boot Slice</desc>
<rect x="0" y="171.75" width="108" height="9.00001" class="st5"/>
<text x="18.99" y="178.65" class="st8">ROM App / Boot Slice</text> </g>
<g id="shape79-181" transform="translate(18.375,-0.375)">
<title>Sheet.79</title>
<desc>ROM Apps: 0=Monitor 1=BASIC 2=Forth 3=Game 4=CP/M 2.2 5=Z-Sys...</desc>
<rect x="0" y="171.75" width="288" height="9" class="st5"/>
<text x="19.9" y="178.05" class="st9">ROM Apps: 0=Monitor 1=BASIC 2=Forth 3=Game 4=CP/M 2.2 5=Z-System 6=Net Boot 7=User</text> </g>
<g id="shape80-184" transform="translate(0.375,-0.375)">
<title>Sheet.80</title>
<rect x="0" y="0.750005" width="324" height="180" class="st10"/>
</g>
<g id="shape81-186" transform="translate(18.375,-72.375)">
<title>Sheet.81</title>
<path d="M0 180.75 L144 180.75" class="st4"/>
</g>
<g id="shape82-189" transform="translate(199.125,99.375) rotate(90)">
<title>Sheet.82</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape84-192" transform="translate(18.375,-72.375)">
<title>Sheet.84</title>
<desc>Console</desc>
<rect x="0" y="162.75" width="72" height="18" class="st5"/>
<text x="16.61" y="175.35" class="st6">Console</text> </g>
<g id="shape85-195" transform="translate(162.375,-72.375)">
<title>Sheet.85</title>
<path d="M0 180.75 L144 180.75" class="st4"/>
</g>
<g id="shape86-198" transform="translate(271.125,99.375) rotate(90)">
<title>Sheet.86</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape87-201" transform="translate(487.125,99.375) rotate(90)">
<title>Sheet.87</title>
<path d="M0 180.75 L18 180.75" class="st4"/>
</g>
<g id="shape88-204" transform="translate(90.375,-72.375)">
<title>Sheet.88</title>
<desc>Boot</desc>
<rect x="0" y="162.75" width="216" height="18" class="st5"/>
<text x="96.4" y="175.35" class="st6">Boot</text> </g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

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