Browse Source

Propeller Firmware Enhancements

- Support DEC graphics character set
- Allow use of all lines on VGA display
- Support inverted bits on front panel LEDs and switches by config
work v3.5.0-dev.3
Wayne Warthen 2 years ago
parent
commit
ee8cdfa4b8
  1. 3
      Doc/ChangeLog.txt
  2. BIN
      Doc/RomWBW Applications.pdf
  3. BIN
      Doc/RomWBW Disk Catalog.pdf
  4. BIN
      Doc/RomWBW Errata.pdf
  5. BIN
      Doc/RomWBW ROM Applications.pdf
  6. BIN
      Doc/RomWBW System Guide.pdf
  7. BIN
      Doc/RomWBW User Guide.pdf
  8. 2
      ReadMe.md
  9. 2
      ReadMe.txt
  10. 76
      Source/Doc/UserGuide.md
  11. 2
      Source/HBIOS/cfg_duo.asm
  12. 2
      Source/HBIOS/cfg_dyno.asm
  13. 2
      Source/HBIOS/cfg_epitx.asm
  14. 2
      Source/HBIOS/cfg_heath.asm
  15. 2
      Source/HBIOS/cfg_master.asm
  16. 2
      Source/HBIOS/cfg_mbc.asm
  17. 4
      Source/HBIOS/cfg_mk4.asm
  18. 2
      Source/HBIOS/cfg_mon.asm
  19. 2
      Source/HBIOS/cfg_n8.asm
  20. 2
      Source/HBIOS/cfg_rcz180.asm
  21. 2
      Source/HBIOS/cfg_rcz280.asm
  22. 2
      Source/HBIOS/cfg_rcz80.asm
  23. 2
      Source/HBIOS/cfg_rph.asm
  24. 2
      Source/HBIOS/cfg_s100.asm
  25. 2
      Source/HBIOS/cfg_sbc.asm
  26. 2
      Source/HBIOS/cfg_scz180.asm
  27. 2
      Source/HBIOS/cfg_z80retro.asm
  28. 2
      Source/HBIOS/cfg_zeta.asm
  29. 2
      Source/HBIOS/cfg_zeta2.asm
  30. 47
      Source/HBIOS/hbios.asm
  31. 2
      Source/HBIOS/ppp.asm
  32. 2
      Source/HBIOS/prp.asm
  33. 2
      Source/HBIOS/romldr.asm
  34. 6
      Source/Images/d_nzcom/ReadMe.txt
  35. BIN
      Source/Images/d_nzcom/u0/TCAP.LBR
  36. BIN
      Source/Images/d_nzcom/u0/Z3TCAP.TCP
  37. 21
      Source/Prop/Spin/AnsiTerm.spin
  38. 29
      Source/Prop/Spin/ParPortProp.spin
  39. 46
      Source/Prop/Spin/PropIO.spin
  40. 24
      Source/Prop/Spin/PropIO2.spin
  41. 702
      Source/Prop/Spin/VGA_1024.spin
  42. 2
      Source/ver.inc
  43. 2
      Source/ver.lib

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

BIN
Doc/RomWBW Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW Disk Catalog.pdf

Binary file not shown.

BIN
Doc/RomWBW Errata.pdf

Binary file not shown.

BIN
Doc/RomWBW ROM Applications.pdf

Binary file not shown.

BIN
Doc/RomWBW System Guide.pdf

Binary file not shown.

BIN
Doc/RomWBW User Guide.pdf

Binary file not shown.

2
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

2
ReadMe.txt

@ -1,6 +1,6 @@
RomWBW ReadMe
Wayne Warthen (wwarthen@gmail.com)
12 Jan 2024
21 Jan 2024

76
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 |
+---------------------------------+---------------+---------------+---------------+---------------+
| \<end\> | 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 |
+---------------------------------+---------------+---------------+---------------+---------------+
| \<end\> | 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:

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

4
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

2
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
;

47
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
;
;

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

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

2
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

6
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
-- WBW 11:19 AM 1/22/2024

BIN
Source/Images/d_nzcom/u0/TCAP.LBR

Binary file not shown.

BIN
Source/Images/d_nzcom/u0/Z3TCAP.TCP

Binary file not shown.

21
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

29
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

46
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

24
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

702
Source/Prop/Spin/VGA_1024.spin

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

2
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

2
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

Loading…
Cancel
Save