diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 1beee141..0c8fe511 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -2,6 +2,9 @@ Version 3.5 ----------- - M?F: Fix for hours display in HBRTC application - M?F: Fix for assembly error in DS1501RTC driver +- WBW: Add VT-100 graphics char selection to Propeller firmware +- WBW: Allow all lines of VGA display to be used on Propeller firmware +- WBW: Allow front panel LED/Switch bits to be inverted in config Version 3.4 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 417c0466..283c494c 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index f5f574a1..1a25bdc2 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index 4a019607..b1e58c4a 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 5cae7d61..a7e45c0b 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 491b01b1..0f54d3d9 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 27d3b7a6..1cd455a5 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index fd653ed0..567f22c5 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.5 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -12 Jan 2024 +21 Jan 2024 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 1f655065..8573ae63 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -12 Jan 2024 +21 Jan 2024 diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index 9fe81088..a75455eb 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -1749,10 +1749,84 @@ with 6 slices containing 5 ready-to-run OSes and a slice with the WordStar application files. Alternatively, you can create your own hard disk image with the specific slice contents you choose. +#### Standard Hard Disk Physical Layout + +As previously described in [Hard Disk Layouts], the exact placement of +slices and optional FAT partition will vary depending on which disk +layout (hd512 or hd1k) you are using and your partition table entries. +To simplify the use of hard disk images, RomWBW has adopted standard +partition table entries for disk image files provided. + +These partition sizes and locations were chosen to: + +- Fit entirely on 1GB media +- Allow for 64 CP/M filesystem slices +- Allow for a 384KB FAT filesystem + +**NOTE:** RomWBW is not limited to these partition table entries. You +can change the size and location of the RomWBW and/or FAT partitions to +increase/decrease the number of slices or FAT filesystem size. + ++---------------------------------+-------------------------------+-------------------------------+ +| | **--- Legacy (hd512) ---** | **--- Modern (hd1k) ---** | +| +---------------+---------------+---------------+---------------+ +| | Byte(s) | Sector(s) | Byte(s) | Sector(s) | ++=================================+==============:+==============:+==============:+==============:+ +| RomWBW (slices) Start | 0 | 0 | 1,048,576 | 2,048 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| RomWBW (slices) Size | 545,259,520 | 1,064,960 | 536,870,912 | 1,048,576 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| FAT Filesystem Start | 545,259,520 | 1,064,960 | 537,919,488 | 1,050,624 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| FAT Filesystem Size | 402,653,184 | 786,432 | 402,653,184 | 786,432 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| \ | 947,912,704 | 1,851,392 | 940,572,672 | 1,837,056 | ++---------------------------------+---------------+---------------+---------------+---------------+ + +The above partition table entries will result in the following locations and sizes of +filesystems on the RomWBW disk images. + + ++---------------------------------+-------------------------------+-------------------------------+ +| | **--- Legacy (hd512) ---** | **--- Modern (hd1k) ---** | +| +---------------+---------------+---------------+---------------+ +| | Byte(s) | Sector(s) | Byte(s) | Sector(s) | ++=================================+==============:+==============:+==============:+==============:+ +| Prefix Start | -- | -- | 0 | 0 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Prefix Size | -- | -- | 1,048,576 | 2,048 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice Size | 8,519,680 | 16,640 | 8,388,608 | 16,384 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 0 Start | 0 | 0 | 1,048,576 | 2,048 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 1 Start | 8,519,680 | 16,640 | 9,437,184 | 18,432 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 2 Start | 17,039,360 | 33,280 | 17,825,792 | 34,816 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 3 Start | 25,559,040 | 49,920 | 26,214,400 | 51,200 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 4 Start | 34,078,720 | 66,560 | 34,603,008 | 67,584 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 5 Start | 42,598,400 | 83,200 | 42,991,616 | 83,968 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 6 Start | 51,118,080 | 99,840 | 51,380,224 | 100,352 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 7 Start | 59,637,760 | 116,480 | 59,768,832 | 116,736 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| Slice 63 Start | 536,739,840 | 1,048,320 | 529,530,880 | 1,034,240 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| FAT Filesystem Start | 545,259,520 | 1,064,960 | 537,919,488 | 1,050,624 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| FAT Filesystem Size | 402,653,184 | 786,432 | 402,653,184 | 786,432 | ++---------------------------------+---------------+---------------+---------------+---------------+ +| \ | 947,912,704 | 1,851,392 | 940,572,672 | 1,837,056 | ++---------------------------------+---------------+---------------+---------------+---------------+ + #### Combo Hard Disk Image The combo disk image is essentially just a single image that has several - of the individual filesystem images (slices) already concatenated +of the individual filesystem images (slices) already concatenated together. The combo disk image contains the following 6 slices in the positions indicated: diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index d1364553..304dca96 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/Source/HBIOS/cfg_duo.asm @@ -67,9 +67,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $42 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $42 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 816e56b6..017c7562 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_epitx.asm b/Source/HBIOS/cfg_epitx.asm index 446b096d..8dd1157c 100644 --- a/Source/HBIOS/cfg_epitx.asm +++ b/Source/HBIOS/cfg_epitx.asm @@ -70,9 +70,11 @@ DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU FALSE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm index d3014c57..9560f8b7 100644 --- a/Source/HBIOS/cfg_heath.asm +++ b/Source/HBIOS/cfg_heath.asm @@ -69,9 +69,11 @@ WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 004339a2..28837f80 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -98,9 +98,11 @@ WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 5fd069ef..310808bf 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -64,9 +64,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 536ea233..c72e8388 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES -FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_mon.asm b/Source/HBIOS/cfg_mon.asm index 92bff9fe..6dfdb42c 100644 --- a/Source/HBIOS/cfg_mon.asm +++ b/Source/HBIOS/cfg_mon.asm @@ -64,9 +64,11 @@ WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 4cac526e..ef3dbd14 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -71,9 +71,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 5263d4a9..6f6d736c 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -75,9 +75,11 @@ DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 39ea9909..fe9d45f5 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 23fb5c29..e14701c4 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -69,9 +69,11 @@ WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 32c14e8f..122c7249 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index a22cdec1..e55b6c17 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/Source/HBIOS/cfg_s100.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index fd2b8deb..6d9bf25a 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -64,9 +64,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 6ac906a9..24afc498 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -69,9 +69,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU TRUE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 042a2127..6517daf4 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -67,9 +67,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 16d3f185..94e3a2ed 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -56,9 +56,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index f5185065..f9efe35b 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -67,9 +67,11 @@ WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ] ; FPLED_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL LEDS FPLED_IO .EQU $00 ; FP: PORT ADDRESS FOR FP LEDS +FPLED_INV .EQU FALSE ; FP: LED BITS ARE INVERTED FPLED_DSKACT .EQU TRUE ; FP: ENABLES DISK I/O ACTIVITY ON FP LEDS FPSW_ENABLE .EQU FALSE ; FP: ENABLES FRONT PANEL SWITCHES FPSW_IO .EQU $00 ; FP: PORT ADDRESS FOR FP SWITCHES +FPSW_INV .EQU FALSE ; FP: SWITCH BITS ARE INVERTED ; DIAGLVL .EQU DL_CRITICAL ; ERROR LEVEL REPORTING ; diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 35d235dd..4fa86e54 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -95,11 +95,10 @@ MODCNT .SET MODCNT + 1 #DEFINE ALIGN(N) .FILL ((($+(N-1)) & ~(N-1)) - $) ; #IF (FPLED_ENABLE) - #DEFINE DIAG(N) PUSH AF - #DEFCONT \ LD A,N -; #DEFCONT \ OUT (DIAGPORT),A + #DEFINE DIAG(N) PUSH AF + #DEFCONT \ LD A,N #DEFCONT \ CALL FP_SETLEDS - #DEFCONT \ POP AF + #DEFCONT \ POP AF #ELSE #DEFINE DIAG(N) \; #ENDIF @@ -132,30 +131,30 @@ MODCNT .SET MODCNT + 1 #ENDIF ; #DEFINE SYSCHKERR(HB_ERR) \ -#DEFCONT \ CALL SYSCHKA -#DEFCONT \ LD A,HB_ERR -#DEFCONT \ OR A + #DEFCONT \ CALL SYSCHKA + #DEFCONT \ LD A,HB_ERR + #DEFCONT \ OR A ; ; ; #IF (INTMODE == 0) -; NO INTERRUPT HANDLING -#DEFINE HB_DI ; -#DEFINE HB_EI ; + ; NO INTERRUPT HANDLING + #DEFINE HB_DI ; + #DEFINE HB_EI ; #ELSE #IF (CPUFAM == CPU_Z280) #IF (INTMODE == 3) -; Z280 MODE 3 INTERRUPT HANDLING (INTA, C/T 0, & UART RCVR ENABLED) -#DEFINE HB_DI DI -#DEFINE HB_EI EI $0B + ; Z280 MODE 3 INTERRUPT HANDLING (INTA, C/T 0, & UART RCVR ENABLED) + #DEFINE HB_DI DI + #DEFINE HB_EI EI $0B #ELSE -; Z280 MODE 1/2 INTERRUPT HANDLING -#DEFINE HB_DI DI -#DEFINE HB_EI EI + ; Z280 MODE 1/2 INTERRUPT HANDLING + #DEFINE HB_DI DI + #DEFINE HB_EI EI #ENDIF #ELSE -#DEFINE HB_DI DI -#DEFINE HB_EI EI + #DEFINE HB_DI DI + #DEFINE HB_EI EI #ENDIF #ENDIF ; @@ -1181,6 +1180,9 @@ BOOTWAIT: #IF (FPLED_ENABLE) ; NO STACK YET, SO CAN'T USE DIAG() MACRO LD A,DIAG_01 + #IF (FPLED_INV) + XOR $FF ; INVERT BITS IF NEEDED + #ENDIF OUT (FPLED_IO),A #ENDIF #IF (LEDENABLE) @@ -1391,6 +1393,9 @@ Z280_INITZ: #IF (FPLED_ENABLE) ; NO STACK YET, SO CAN'T USE DIAG() MACRO LD A,DIAG_02 + #IF (FPLED_INV) + XOR $FF ; INVERT BITS IF NEEDED + #ENDIF OUT (FPLED_IO),A #ENDIF @@ -6826,6 +6831,9 @@ FP_SETLEDS: OR A ; SET FLAGS LD A,L ; RESTORE REG A JR Z,FP_SETLEDS1 ; BAIL OUT IF NOT ACTIVE + #IF (FPLED_INV) + XOR $FF ; INVERT BITS IF NEEDED + #ENDIF OUT (FPLED_IO),A ; WRITE FP_SETLEDS1: POP HL ; RESTORE HL @@ -6843,6 +6851,9 @@ FP_GETSWITCHES: OR A ; SET FLAGS RET Z ; BAIL OUT IF NOT ACTIVE IN A,(FPSW_IO) ; READ SWITCHES + #IF (FPSW_INV) + XOR $FF ; INVERT BITS IF NEEDED + #ENDIF RET ; DONE ; ; diff --git a/Source/HBIOS/ppp.asm b/Source/HBIOS/ppp.asm index 72d2ab53..2ebcad99 100644 --- a/Source/HBIOS/ppp.asm +++ b/Source/HBIOS/ppp.asm @@ -250,7 +250,7 @@ PPP_FWVER .DB $00, $00, $00, $00 ; MMNNBBB (M=MAJOR, N=MINOR, B=BUILD) ; PARPORTPROP CONSOLE DRIVER ;================================================================================================== ; -PPPCON_ROWS .EQU 37 ; PROPELLER VGA DISPLAY ROWS (40 - 3 STATUS LINES) +PPPCON_ROWS .EQU 29 ; PROPELLER VGA DISPLAY ROWS (30 - 1 STATUS LINES) PPPCON_COLS .EQU 80 ; PROPELLER VGA DISPLAY COLS ; .ECHO "PPPCON: ENABLED\n" diff --git a/Source/HBIOS/prp.asm b/Source/HBIOS/prp.asm index f857c5fc..38849dce 100644 --- a/Source/HBIOS/prp.asm +++ b/Source/HBIOS/prp.asm @@ -121,7 +121,7 @@ PRPCON_ERR .EQU $40 ; BIT SET WHEN PROPIO CONSOLE ERROR HAS OCCURRED PRPCON_KBDRDY .EQU $20 ; BIT SET WHEN KEYBOARD BUF HAS A BYTE READY (BUF FULL) PRPCON_DSPRDY .EQU $10 ; BIT SET WHEN DISPLAY BUF IS READY FOR A BYTE (BUF EMPTY) ; -PRPCON_ROWS .EQU 37 ; PROPELLER VGA DISPLAY ROWS (40 - 3 STATUS LINES) +PRPCON_ROWS .EQU 29 ; PROPELLER VGA DISPLAY ROWS (30 - 1 STATUS LINES) PRPCON_COLS .EQU 80 ; PROPELLER VGA DISPLAY COLS ; .ECHO "PRPCON: ENABLED\n" diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 89479466..84f10d7e 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -1383,8 +1383,6 @@ str_s100con .db "\r\n\r\nConsole on S100 Bus",0 clrled: #if (BIOS == BIOS_WBW) #if (FPLED_ENABLE) - ;xor a ; zero accum - ;out (FPLED_IO),a ; clear diag leds ld b,BF_SYSSET ; HBIOS SysGet ld c,BF_SYSSET_PANEL ; ... Panel swiches value ld l,$00 ; all LEDs off diff --git a/Source/Images/d_nzcom/ReadMe.txt b/Source/Images/d_nzcom/ReadMe.txt index 5ba7e09a..15d11f7e 100644 --- a/Source/Images/d_nzcom/ReadMe.txt +++ b/Source/Images/d_nzcom/ReadMe.txt @@ -51,8 +51,10 @@ done to create a minimal ready-to-run setup for RomWBW: - Extract VT100 TCAP from Z3TCAP.LBR and saved it as TCAP.Z3T. - Created PROFILE.SUB to launch NZCOM at startup. - Created empty STARTZCM.COM. - - TCSELECT.COM was removed because a later version is provided + - Original TCSELECT.COM was removed and replaced with a newer version from the Z3 files. + - TCAP.LBR and Z3TCAP.TCP were removed and replaced with + Z3TCAP.LBR from new TCSELECT distribution. - Z3LOC.COM and LBREXT.COM were removed because more recent versions are provided from Common files. - Replaced ZRDOS with ZSDOS in NZCOM.LBR. The standalone @@ -318,4 +320,4 @@ in this user area for more information. N.B., at a minimum, some of the files in this user area must be copied to user area 0 for CP/NET to work properly. --- WBW 3:20 PM 8/27/2021 \ No newline at end of file +-- WBW 11:19 AM 1/22/2024 \ No newline at end of file diff --git a/Source/Images/d_nzcom/u0/TCAP.LBR b/Source/Images/d_nzcom/u0/TCAP.LBR deleted file mode 100644 index 9a3fd9c5..00000000 Binary files a/Source/Images/d_nzcom/u0/TCAP.LBR and /dev/null differ diff --git a/Source/Images/d_nzcom/u0/Z3TCAP.TCP b/Source/Images/d_nzcom/u0/Z3TCAP.TCP deleted file mode 100644 index 07adc281..00000000 Binary files a/Source/Images/d_nzcom/u0/Z3TCAP.TCP and /dev/null differ diff --git a/Source/Prop/Spin/AnsiTerm.spin b/Source/Prop/Spin/AnsiTerm.spin index 5799c987..3d178878 100644 --- a/Source/Prop/Spin/AnsiTerm.spin +++ b/Source/Prop/Spin/AnsiTerm.spin @@ -15,11 +15,11 @@ CON cols = 80 ' screen columns rows = 30 ' screen rows chars = rows * cols ' screen characters - termRows = 25 ' rows in terminal area + termRows = rows - 1 ' rows in terminal area termChars = termRows * cols ' characters in terminal area termLastRow = termChars - cols ' buffer pos of first char in last term row statArea = termChars ' starting position of status area - statRows = rows - TermRows ' status area rows + statRows = 1 ' status area rows blank = $20 spkVol = 75 @@ -46,6 +46,7 @@ VAR long vgaBasePin word curAttr ' active attribute value word bold, underscore, blink, reverse, fg, bg + word alt ' alt char set active DAT @@ -81,6 +82,7 @@ PUB start(BasePin) | i, char reverse := 0 fg := 0 bg := 0 + alt := 0 setMode(0) ' reset attributes PUB vidOn @@ -174,6 +176,10 @@ PRI clsTerm PRI outc(c) + if (alt == 1) + if ((c => $5F) and (c < $7F)) + c := c - $5F + screen[pos++] := (curAttr | c) lastc := c @@ -400,11 +406,11 @@ PRI ansi(c) | x, defVal x += cols "K": - if arg0 == -1 + if ((arg0 == -1) or (arg0 == 0)) clEOL(pos) - elseif arg0 == 1 + elseif (arg0 == 1) clBOL(pos) - else + elseif (arg0 == 2) clEOL(pos - (pos // cols)) "L": @@ -563,6 +569,11 @@ PUB processChar(c) return 5: ' Set character set (not implemented) + if (c == "0") + alt := 1 + if (c == "B") + alt := 0 + state := 0 return diff --git a/Source/Prop/Spin/ParPortProp.spin b/Source/Prop/Spin/ParPortProp.spin index b5238e79..a9955d13 100644 --- a/Source/Prop/Spin/ParPortProp.spin +++ b/Source/Prop/Spin/ParPortProp.spin @@ -3,8 +3,8 @@ ************************************ * ParPortProp for RomWBW * * Interface to RBC ParPortProp * - * Version 0.97 * - * May 9, 2020 * + * Version 0.98 * + * January 20, 2024 * ************************************ Wayne Warthen @@ -30,24 +30,24 @@ 2018-03-11 WBW: Implement character attributes 2020-05-09 WBW: Switch monitor refresh to 60Hz + 2024-01-20 WBW: Add graphics char selection to AnsiTerm }} CON - VERSION = (((0 << 8) + 97) << 16) + 0 + VERSION = (((0 << 8) + 98) << 16) + 0 _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 - + 'SLEEP = 60 * 5 ' Screen saver timeout in seconds SLEEP = 0 ' Zero for no screen saver VGA_BASE = 16 ' VGA Video pins 16-23 (??) KBD_BASE = 14 ' PS/2 Keyboard pins 14-15 (DATA, CLK) SD_BASE = 24 ' SD Card pins 24-27 (DO, CLK, DI, CS) - - STAT_ATTR1 = %00110000_00000000 ' Status area screen attribute (first line) - STAT_ATTR = %01110000_00000000 ' Status area screen attribute + + STAT_ATTR = %00110000_00000000 ' Status area screen attribute (first line) PPI_CMD = $0100 ' pin 8, PC0, active ??? PPI_STB = $0200 ' pin 9, PC4, active low @@ -143,19 +143,16 @@ PUB main | tmp dsp.cls MsgNewLine - dsp.VidOn + dsp.vidOn statRows := (dsp.statInfo >> 8) & $FF statCols := dsp.statInfo & $FF dsp.statFill(0, 0, STAT_ATTR, $20, statRows * statCols) - dsp.statFill(0, 0, STAT_ATTR1, $20, statCols) - dsp.statStr(0, 1, STAT_ATTR1, @strROM) - dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR1, @strHW) - dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR1, @strVer) - - 'dsp.statStr(2, (statCols - 20) / 2, STAT_ATTR, string("<<< Message Area >>>")) + dsp.statStr(0, 1, STAT_ATTR, @strROM) + dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR, @strHW) + dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR, @strVer) MsgStr(string("Initializing ParPortProp...")) @@ -221,7 +218,7 @@ PUB main | tmp else MsgStr(string(" OK")) MsgNewLine - + dsp.beep MsgStr(string("ParPortProp Ready!")) @@ -610,7 +607,7 @@ PRI Activity DAT -strVer byte "F/W v0.97",0 +strVer byte "F/W v0.98",0 strHW byte "ParPortProp",0 strROM byte "RomWBW",0 diff --git a/Source/Prop/Spin/PropIO.spin b/Source/Prop/Spin/PropIO.spin index 9e074fe0..57d0dce7 100644 --- a/Source/Prop/Spin/PropIO.spin +++ b/Source/Prop/Spin/PropIO.spin @@ -3,9 +3,9 @@ ******************************* * PropIO for RomWBW * * Interface to RBC PropIO * - * Version 0.97 * - * May 9, 2020 * - ******************************* + * Version 0.98 * + * January 20, 2024 * + ********************************* Wayne Warthen wwarthen@gmail.com @@ -35,11 +35,12 @@ 2015-11-15 WBW: Added SD card capacity reporting 2018-03-11 WBW: Implement character attributes 2020-05-09 WBW: Switch monitor refresh to 60Hz + 2024-01-20 WBW: Add graphics char selection to AnsiTerm }} CON - VERSION = (((0 << 8) + 97) << 16) + 0 + VERSION = (((0 << 8) + 98) << 16) + 0 _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 @@ -50,9 +51,8 @@ CON VGA_BASE = 16 ' VGA Video pins 16-23 (??) KBD_BASE = 14 ' PS/2 Keyboard pins 14-15 (DATA, CLK) SD_BASE = 24 ' SD Card pins 24-27 (DO, CLK, DI, CS) - - STAT_ATTR1 = %00110000_00000000 ' Status area screen attribute (first line) - STAT_ATTR = %01110000_00000000 ' Status area screen attribute + + STAT_ATTR = %00110000_00000000 ' Status area screen attribute (first line) DSKCMD_NOP = $00 DSKCMD_STATUS = $01 @@ -78,10 +78,7 @@ CON TRMST_ACTMASK = (TRMST_KBDACT | TRMST_DSPACT) ' bit mask for kbd or dsp active - - OBJ - 'dsp : "VGA_1024" ' VGA Terminal Driver dsp : "AnsiTerm" ' VGA Terminal Driver kbd : "Keyboard" ' PS/2 Keyboard Driver sdc : "safe_spi" ' SD Card Driver @@ -101,7 +98,7 @@ VAR long TimerCount long DiskResult long CardType - + byte statRows byte statCols @@ -122,20 +119,17 @@ PUB main dsp.cls MsgNewLine - dsp.VidOn + dsp.vidOn statRows := (dsp.statInfo >> 8) & $FF statCols := dsp.statInfo & $FF dsp.statFill(0, 0, STAT_ATTR, $20, statRows * statCols) - dsp.statFill(0, 0, STAT_ATTR1, $20, statCols) - dsp.statStr(0, 1, STAT_ATTR1, @strROM) - dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR1, @strHW) - dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR1, @strVer) + dsp.statStr(0, 1, STAT_ATTR, @strROM) + dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR, @strHW) + dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR, @strVer) - 'dsp.statStr(2, (statCols - 20) / 2, STAT_ATTR, string("<<< Message Area >>>")) - MsgStr(string("Initializing PropIO...")) TermStatKbdAdr := @TermStatKbd @@ -185,10 +179,12 @@ PUB main else MsgStr(string(" OK")) MsgNewLine + + dsp.beep MsgStr(string("PropIO Ready!")) MsgNewLine - + repeat if (DiskStat & DSKST_ACT) ProcessDiskCmd @@ -315,13 +311,13 @@ PRI Timer waitcnt(clkfreq * 1 + cnt) if (TimerCount > 0) if (TimerCount == 1) - dsp.VidOff + dsp.vidOff TimerCount-- PRI Activity if (SLEEP > 0) if (TimerCount == 0) - dsp.VidOn + dsp.vidOn TimerCount := SLEEP { @@ -338,18 +334,18 @@ PRI DumpBuffer(Buffer) | i, j DAT -strVer byte "F/W v0.97",0 +strVer byte "F/W v0.98",0 strHW byte "PropIO",0 strROM byte "RomWBW",0 {{ Ports - +------/WAIT - |+-----/RD + +------ CLR + |+----- /RD ||+---- A1 |||+--- A0 - ||||+--/CS + ||||+-- /CS ||||| ||||| P15..P0 --> xxxxxxxx_xxxxxxxx diff --git a/Source/Prop/Spin/PropIO2.spin b/Source/Prop/Spin/PropIO2.spin index ad1592f7..a62e5cf0 100644 --- a/Source/Prop/Spin/PropIO2.spin +++ b/Source/Prop/Spin/PropIO2.spin @@ -3,8 +3,8 @@ ********************************* * PropIO 2 for RomWBW * * Interface to RBC PropIO 2 * - * Version 0.97 * - * May 9, 2020 * + * Version 0.98 * + * January 20, 2024 * ********************************* Wayne Warthen @@ -35,11 +35,12 @@ 2015-11-15 WBW: Added SD card capacity reporting 2018-03-11 WBW: Implement character attributes 2020-05-09 WBW: Switch monitor refresh to 60Hz + 2024-01-20 WBW: Add graphics char selection to AnsiTerm }} CON - VERSION = (((0 << 8) + 97) << 16) + 0 + VERSION = (((0 << 8) + 98) << 16) + 0 _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 @@ -51,8 +52,7 @@ CON KBD_BASE = 14 ' PS/2 Keyboard pins 14-15 (DATA, CLK) SD_BASE = 24 ' SD Card pins 24-27 (DO, CLK, DI, CS) - STAT_ATTR1 = %00110000_00000000 ' Status area screen attribute (first line) - STAT_ATTR = %01110000_00000000 ' Status area screen attribute + STAT_ATTR = %00110000_00000000 ' Status area screen attribute (first line) DSKCMD_NOP = $00 DSKCMD_STATUS = $01 @@ -79,7 +79,6 @@ CON TRMST_ACTMASK = (TRMST_KBDACT | TRMST_DSPACT) ' bit mask for kbd or dsp active OBJ - 'dsp : "VGA_1024" ' VGA Terminal Driver dsp : "AnsiTerm" ' VGA Terminal Driver kbd : "Keyboard" ' PS/2 Keyboard Driver sdc : "safe_spi" ' SD Card Driver @@ -126,14 +125,11 @@ PUB main statCols := dsp.statInfo & $FF dsp.statFill(0, 0, STAT_ATTR, $20, statRows * statCols) - dsp.statFill(0, 0, STAT_ATTR1, $20, statCols) - dsp.statStr(0, 1, STAT_ATTR1, @strROM) - dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR1, @strHW) - dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR1, @strVer) + dsp.statStr(0, 1, STAT_ATTR, @strROM) + dsp.statStr(0, (statCols - strsize(@strHW)) / 2, STAT_ATTR, @strHW) + dsp.statStr(0, (statCols - strsize(@strVer) - 1), STAT_ATTR, @strVer) - 'dsp.statStr(2, (statCols - 20) / 2, STAT_ATTR, string("<<< Message Area >>>")) - MsgStr(string("Initializing PropIO...")) TermStatKbdAdr := @TermStatKbd @@ -188,7 +184,7 @@ PUB main MsgStr(string("PropIO Ready!")) MsgNewLine - + repeat if (DiskStat & DSKST_ACT) ProcessDiskCmd @@ -338,7 +334,7 @@ PRI DumpBuffer(Buffer) | i, j DAT -strVer byte "F/W v0.97",0 +strVer byte "F/W v0.98",0 strHW byte "PropIO v2",0 strROM byte "RomWBW",0 diff --git a/Source/Prop/Spin/VGA_1024.spin b/Source/Prop/Spin/VGA_1024.spin deleted file mode 100644 index 516a0940..00000000 --- a/Source/Prop/Spin/VGA_1024.spin +++ /dev/null @@ -1,702 +0,0 @@ -'' VGA_1024.spin -'' -'' MODIFIED BY VINCE BRIEL FOR POCKETERM FEATURES -'' MODIIFED BY JEFF LEDGER / AKA OLDBITCOLLECTOR -'' - -CON - cols = 80 '128 ' number of screen columns - lcols = cols / 4 ' number of long in columns - rows = 40 '64 ' number of screen rows - chars = rows*cols ' number of screen characters - esc = $CB ' keyboard esc char - rowsnow = 36 ' adjusted for split screen effect - maxChars = rowsnow*cols ' adjusted value for split screen effect - lastChar = maxChars / 4 ' last screen position in longs adjusted for split - lastLine = (rowsnow - 1) * cols ' character position of last row - cols1 = 81 ' adjusted value for 80th character - TURQUOISE = $29 - -OBJ - vga : "vga_Hires_Text" - -VAR - byte screen[chars] ' screen character buffer - byte tmpl[cols] ' temporary line buffer - word colors[rows] ' color specs for each screen row (see ColorPtr description above) - byte cursor[6] ' cursor info array (see CursorPtr description above) - long sync, loc, xloc, yloc ' sync used by VGA routine, others are local screen pointers - long kbdreq ' global val of kbdflag - long BR[8] - long Brate - byte inverse - byte invs - byte state ' Current state of state machine - word pos ' Current Position on the screen - word oldpos ' Previous location of cursor before update - word regionTop, regionBot ' Scroll region top/bottom - long arg0 ' First argument of escape sequence - long arg1 ' Second argument of escape sequence - byte lastc ' Last displayed char - word statpos - long vgabasepin - -PUB start(BasePin) | i, char - vgabasepin := BasePin - -''init screen colors to gold on blue - repeat i from 0 to rows - 1 - colors[i] := $08F0 '$2804 (if you want cyan on blue) - -''init cursor attributes - cursor[2] := %110 ' init cursor to underscore with slow blink - BR[0]:=300 - BR[1]:=1200 - BR[2]:=2400 - BR[3]:=4800 - BR[4]:=9600 - BR[5]:=19200 - BR[6]:=38400 - BR[7]:=57600 - BR[8]:=115200 - xloc := cursor[0] := 0 - yloc := cursor[1] := 0 - loc := xloc + yloc*cols - - pos := 0 - regionTop := 0 - regionBot := 35 * cols - state := 0 - statpos := 37 * cols - -PUB vidon - if (!vga.start(vgabasepin, @screen, @colors, @cursor, @sync)) - return false - - 'waitcnt(clkfreq * 1 + cnt) 'wait 1 second for cogs to start - - -PUB vidoff - vga.stop - -PUB inv(c) - inverse:=c - -PUB color(colorVal) | i - repeat i from 0 to rows - 1 - colors[i] := $0000 | colorVal - -PUB cursorset(c) | i - i:=%000 - if c == 1 - i:= %001 - if c == 2 - i:= %010 - if c == 3 - i:= %011 - if c == 4 - i:= %101 - if c == 5 - i:= %110 - if c == 6 - i:= %111 - if c == 7 - i:= %000 - cursor[2] := i - -PUB bin(value, digits) - -'' Print a binary number, specify number of digits - - repeat while digits > 32 - outc("0") - digits-- - - value <<= 32 - digits - - repeat digits - outc((value <-= 1) & 1 + "0") - - -PUB clrbtm(ColorVal) | i - repeat i from 36 to rows - 1 'was 35 - colors[i] := $0000 + ColorVal - -PUB cls1(VerStr) | i - - longfill(@screen[0], $20202020, chars / 4) - - clrbtm(TURQUOISE) - - inverse := 1 - statprint(36, 0, VerStr) - inverse := 0 - - repeat i from 37 to (rows - 1) - statprint(i,0, string(" ")) - - -{{ - x :=xloc - y := yloc - invs := inverse - ''clrbtm(TURQUOISE) - longfill(@screen, $20202020, chars/4) - xloc := 0 - yloc :=0 - loc := xloc + yloc*cols - repeat 80 - outc(32) - xloc := 0 - yloc :=36 - loc := xloc + yloc*cols - inverse := 1 - str(string(" ")) - inverse := 0 - str(string("Baud Rate: ")) - i:= BR[6] - dec(i) - str(string(" ")) - xloc := 18 - loc := xloc + yloc*cols - str(string("Color ")) - str(string("PC Port: ")) - if pcport == 1 - str(string("OFF ")) - if pcport == 0 - str(string("ON ")) - str(string(" Force 7 bit: ")) - if ascii == 0 - str(string("NO ")) - if ascii == 1 - str(string("YES ")) - str(string(" Cursor CR W/LF: ")) - if CR == 1 - str(string("YES")) - if CR == 0 - str(string("NO ")) - outc(13) - outc(10) - - inverse:=1 - xloc := 6 - loc := xloc + yloc*cols - str(string("F1")) - xloc := 19 - loc := xloc + yloc*cols - str(string("F2")) - xloc := 30 - loc := xloc + yloc*cols - str(string("F3")) - xloc := 46 - loc := xloc + yloc*cols - str(string("F4")) - xloc := 58 - loc := xloc + yloc*cols - str(string("F5")) - xloc := 70 - loc := xloc + yloc*cols - str(string("F6")) - inverse := invs - xloc := cursor[0] := x 'right & left was 0 - yloc := cursor[1] := y 'from top was 1 - loc := xloc + yloc*cols -}} - -PUB clsupdate(c,screencolor,PCPORT,ascii,CR) | i,x,y,locold - - invs := inverse - locold := loc - x := xloc - y := yloc - ''(TURQUOISE) - xloc := 0 - yloc :=36 - loc := xloc + yloc*cols - inverse := 1 - str(string(" ")) - inverse := 0 - xloc := 0 - yloc :=37 - loc := xloc + yloc*cols - str(string("Baud Rate: ")) - i:= BR[6] - dec(i) - str(string(" ")) - xloc := 18 - loc := xloc + yloc*cols - - str(string("Color ")) - str(string("PC Port: ")) - if pcport == 1 - str(string("OFF ")) - if pcport == 0 - str(string("ON ")) - str(string(" Force 7 bit: ")) - if ascii == 0 - str(string("NO ")) - if ascii == 1 - str(string("YES ")) - str(string(" Cursor CR W/LF: ")) - if CR == 1 - str(string("YES")) - if CR == 0 - str(string("NO ")) - xloc := 0 - yloc :=38 - loc := xloc + yloc*cols - inverse:=1 - xloc := 6 - loc := xloc + yloc*cols - str(string("F1")) - xloc := 19 - loc := xloc + yloc*cols - str(string("F2")) - xloc := 30 - loc := xloc + yloc*cols - str(string("F3")) - xloc := 46 - loc := xloc + yloc*cols - str(string("F4")) - xloc := 58 - loc := xloc + yloc*cols - str(string("F5")) - xloc := 70 - loc := xloc + yloc*cols - str(string("F6")) - inverse := invs - xloc := cursor[0] := x - yloc := cursor[1] := y -' loc := xloc + yloc*cols - loc := locold - -PUB dec(value) | i - -'' Print a decimal number - - if value < 0 - -value - outc("-") - - i := 1_000_000_000 - - repeat 10 - if value => i - outc(value/i + "0") - value //= i - result~~ - elseif result or i == 1 - outc("0") - i /= 10 - -PUB hex(value, digits) - -'' Print a hexadecimal number, specify number of digits - - repeat while digits > 8 - outc("0") - digits-- - - value <<= (8 - digits) << 2 - - repeat digits - outc(lookupz((value <-= 4) & $f : "0".."9", "A".."F")) - - -PUB str(string_ptr) - -'' Print a zero terminated string - - repeat strsize(string_ptr) - process_char(byte[string_ptr++]) - -PUB statprint(r, c, str1) | x, ptr - - ptr := r * cols + c - repeat x from 0 to STRSIZE(str1) - 1 - putc(ptr++, BYTE[str1 + x]) - -PUB statnum(r, c, num1) | i, ptr - - ptr := r * cols + c - - if num1 < 0 - -num1 - putc(ptr++,"-") - - i := 1_000_000_000 - - repeat 10 - if num1 => i - putc(ptr++, (num1/i +"0")) - num1 //= i - result~~ - elseif result or i == 1 - putc(ptr++, "0") - i /= 10 - -PUB putc(position, c) - if inverse - c |= $80 - screen[position] := c - -PUB cls - longfill (@screen, $20202020, lastChar) - -PUB fullcls - longfill(@screen, $20202020, 800) - -PUB setInverse(val) - inverse := val - -PUB setInv(c) - if c == 7 - setInverse(1) - else - setInverse(0) - -PUB clEOL(position) | count - count := cols - (position // cols) - bytefill(@screen + position, $20, count) - -PUB clBOL(position) | count - count := position // cols - bytefill(@screen + position - count, $20, count) - -PUB delLine(position) | src, count - position -= position // cols - - src := position + cols - - count := (maxChars - src) / 4 - - if count > 0 - longmove(@screen + position, @screen + src, count) - - longfill(@screen + lastLine, $20202020, lcols) - -PUB clEOS(position) - cleol(position) - position += cols - (position // cols) - repeat while position < maxChars - longfill(@screen + position, $20202020, lcols) - pos += cols - -PUB setCursorPos(position) - cursor[0] := position // cols - cursor[1] := position / cols - -PUB insLine(position) | base, nxt - base := position - (position // cols) - position := lastLine - repeat while position > base - nxt := position - cols - longmove(@screen + position, @screen + nxt, lcols) - position := nxt - clEOL(base) - -PUB insChar(position) | count - count := (cols - (position // cols)) - 1 - bytemove(@tmpl, @screen + position, count) - screen[position] := " " - bytemove(@screen + position + 1, @tmpl, count) - -PUB delChar(position) | count - count := (cols - (position // cols)) - 1 - bytemove(@screen + position, @screen + position + 1, count) - screen[position + count] := " " - -PRI inRegion : answer - answer := (pos => regionTop) AND (pos < regionBot) - -PRI scrollUp - delLine(regionTop) - if regionBot < maxChars - insLine(regionBot) - -PRI scrollDown - if regionBot < maxChars - delLine(regionBot) - insLine(regionTop) - -PRI ansi(c) | x, defVal - - state := 0 - - if (c <> "r") AND (c <> "J") AND (c <> "m") AND (c <> "K") - if arg0 == -1 - arg0 := 1 - if arg1 == -1 - arg1 := 1 - - case c - "@": - repeat while arg0-- > 0 - insChar(pos) - - "b": - repeat while arg0-- > 0 - outc(lastc) - - "d": - if (arg0 < 1) OR (arg0 > rows) - arg0 := rows - pos := ((arg0 - 1) * cols) + (pos // cols) - - "m": - setInv(arg0) - if arg1 <> -1 - setInv(arg1) - - "r": - if arg0 < 1 - arg0 := 1 - elseif arg0 > cols - arg0 := cols - if arg1 < 1 - arg1 := 1 - elseif arg1 > cols - arg1 := cols - if arg1 < arg0 - arg1 := arg0 - - regionTop := (arg0 - 1) * cols - regionBot := arg1 * cols - pos := 0 - - "A": - repeat while arg0-- > 0 - pos -= cols - if pos < 0 - pos += cols - return - - "B": - repeat while arg0-- > 0 - pos += cols - if pos => maxChars - pos -= cols - return - - "C": - repeat while arg0-- > 0 - pos += 1 - if pos => maxChars - pos -= 1 - return - - "D": - repeat while arg0-- > 0 - pos -= 1 - if pos < 0 - pos := 0 - return - - "G": - if (arg0 < 1) OR (arg0 > cols) - arg0 := cols - pos := (pos - (pos // cols)) + (arg0 - 1) - - "H", "f": - if arg0 =< 0 - arg0 := 1 - if arg1 =< 0 - arg1 := 1 - pos := (cols * (arg0 - 1)) + (arg1 - 1) - if pos < 0 - pos := 0 - if pos => maxChars - pos := maxChars - 1 - - "J": - if arg0 == 1 - clBOL(pos) - x := pos - cols - x -= x // cols - repeat while x => 0 - clEOL(x) - x -= cols - return - - if arg0 == 2 - pos := 0 - - clEOL(pos) - x := pos + cols - x -= (x // cols) - repeat while x < maxChars - clEOL(x) - x += cols - - "K": - if arg0 == -1 - clEOL(pos) - elseif arg0 == 1 - clBOL(pos) - else - clEOL(pos - (pos // cols)) - - "L": - if inRegion - repeat while arg0-- > 0 - if regionBot < maxChars - delLine(regionBot) - insLine(pos) - - "M": - if inRegion - repeat while arg0-- > 0 - delLine(pos) - if regionBot < maxChars - insLine(regionBot) - - "P": - repeat while arg0-- - delChar(pos) - -PRI outc(c) - - putc(pos++, lastc := c) - if pos == regionBot - scrollUp - pos -= cols - elseif pos == maxChars - pos := lastLine - -PUB process_char(c) - - case state - - 0: - if c > 127 - c := $20 - - if c => $20 - outc(c) - setCursorPos(pos) - return - - if c == $1B - state := 1 - return - - if c == $0D - pos := pos - (pos // cols) - setCursorPos(pos) - return - - if c == $0A - if inRegion - pos += cols - if pos => regionBot - scrollUp - pos -= cols - else - pos += cols - if pos => maxChars - pos -= cols - setCursorPos(pos) - return - - if c == 9 - pos += (8 - (pos // 8)) - - if pos => maxChars - pos := lastLine - delLine(0) - - setCursorPos(pos) - return - - if c == 8 - if pos > 0 - pos -= 1 - setCursorPos(pos) - return - - 1: - case c - "[": - arg0 := arg1 := -1 - state := 2 - return - - "P": - pos += cols - if pos => maxChars - pos -= cols - - "K": - if pos > 0 - pos -= 1 - - "H": - pos -= cols - if pos < 0 - pos += cols - - "D": - if inRegion - scrollUp - - "M": - if inRegion - scrollDown - - "G": - pos := 0 - - "(": - state := 5 - return - - state := 0 - return - - 2: - if (c => "0") AND (c =< "9") - if arg0 == -1 - arg0 := c - "0" - else - arg0 := (arg0 * 10) + (c - "0") - return - - if c == ";" - state := 3 - return - - ansi(c) - setCursorPos(pos) - return - - 3: - if (c => "0") AND (c =< "9") - if arg1 == -1 - arg1 := c - "0" - else - arg1 := (arg1 * 10) + (c - "0") - return - - if c == ";" - state := 4 - return - - ansi(c) - setCursorPos(pos) - return - - 4: - if (c => "0") AND (c =< "9") - return - - if c == ";" - return - ansi(c) - setCursorPos(pos) - return - - 5: - state := 0 - return - - return \ No newline at end of file diff --git a/Source/ver.inc b/Source/ver.inc index fc785228..93dddec4 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.2" +#DEFINE BIOSVER "3.5.0-dev.3" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 0ee4ff09..f9ae276d 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.2" + db "3.5.0-dev.3" endm