[Coco] Juan Castro's HDB-DOS stuff.
Allen Huffman
alsplace at pobox.com
Sat Aug 2 14:32:33 EDT 2025
Comments and Question for Juan:
> On Aug 1, 2025, at 7:00 PM, Juan Castro <jccyc1965 at gmail.com> wrote:
>
> - All CoCo 3 tokens are recognized, so a CoCo 3 BASIC program will not be
> garbled upon loading
I assume they give an ?SN ERROR, but you can at least see them de-tokenized?
> - 51x24 and 64x24 text modes in PMODE 4, switchable with WIDTH command
> - Requires at least 4 graphics pages (6K) PCLEARed; forces PMODE 4
> - PRINT@ works as expected, with the maximum position being 1223 in 51x24
> mode and 1535 in 64x24 mode
Did that take big changes? I guess 0-511 was already past a byte, so using a 16-bit value already? Just changing the max based on screen mode?
> - The charset defined in ROM is ISO-8859-15, although it's possible to
> redefine it with HSET MEM COPY and HPOINT(5) (see below)
Ah, https://en.wikipedia.org/wiki/ISO/IEC_8859-15
So extra characters the CoCo 1/2 VDG does not have. Did the CoCo 3 native font have most of these? I guess I have no idea what they based the CC3 characters on.
> - TIMERL function similar to TIMER but wraps at 2^32 (2 years, 98.5 days)
Nice!
> - TIMER FOR N waits N seconds (N may be a fraction: TIMER FOR 1.5 waits 1.5s)
Very nice. I’m not sure how a timeout would be done normally. I guess estimating using TIMER/60 for seconds in a loop?
> - HSET MEM COPY moves BASIC to RAM in 64KB machines; HSET MEM and HRESET MEM
> switch to RAM and ROM respectively
Cool - no “ROMRAM.BAS” to run first or whatever. Does the switch do the same as the POKE that would bank ROM in and out?
> - HSET COLOR 1 sets text screen to orange; HSET COLOR 0 sets it back to green.
And it sticks??? How easy was that fix?
> - HPOINT(3) returns the address of a useful data area for manipulating the
> new graphics-text mode (cursor blink, shape etc); see new file
> cocoroms/rom16kvars.asm
POKEs to addresses there to change behavior?
> - HPOINT(4) returns the frequency of timer interrupts - 50 for PAL, 60 for
> NTSC - this is the value you need to divide TIMER/TIMERL by to get seconds
How on earth can you tell that??? Games always had to ask.
> - HPOINT(5) returns the address of the graphics-mode text font - 896 bytes
> for the 51-column version, followed by another 896 bytes for the "thin"
> (64-column) version
How is the encoding for the 51 column version? I assume for 64, it is 4 bits per letter, so if a font was 8 rows high, it would be 4 bytes to do that?
> - BASIC printer output redirected to DriveWire virtual printer (experimental),
> now with a flag in the aforementioned data area to disable redirection,
> still with no BASIC interface to control it
Normal PRINT#-2 supported as well?
> - Accepts binary constants with &B, just like &H and &O
> - Also, these notations can yield values up to 2^32-1
> - Ancient bug in &O (accepted 8 as a digit) fixed
Nice! &B would have been so much nicer to have. All those old POKE and PEEK hardware things were goggly-gook, but if you could see the bits, they would make more sense…
POKE &HFF20, PEEK(&HFF20 AND &B01000000)
> - Conversely, HEX$ now accepts values up to 2^32-1
> - ONERR, ERNO, and ERLIN work as expected
> - Differently from the CoCo 3, ERNO and ERLIN can be examined in direct mode
> after the BASIC program ends.
…still with the crashes?
> - LPEEK and LPOKE work like PEEK and POKE but arguments are 16-bit unsigned
> integers, i.e., they affect addresses A and A+1. Example: LPEEK(&H68)
> returns the line number of the running BASIC program -- previously you needed
> to use 256*PEEK(&H68)+PEEK(&H69).
Think of the typing that would have saved us.
?LPEEK(25)
> - Additionally, both have now a block copy syntax: LPEEK$(A,N) returns a
> string with N characters with a copy of memory at address A. Likewise,
> LPOKE A,X$ pokes all characters of X$ consecutively starting at address A.
Explain the use here. Encoding assembly in a string, then POKEing it into memory with one blast?
> - GOTO X may be used as an expression; it simply returns X. Useful for
> self-documenting programs that can be renumbered. Example:
> - 10 PRINT"TO CHANGE THE FUNCTION, EDIT LINE";GOTO 500
How does the parser know?
> - Allows PCLEAR 0 for more RAM - instigated by an article by Allen Huffman:
> https://subethasoftware.com/2015/01/16/pclear-0-to-get-more-coco-basic-memory
> Requires PMODE 0. You should not, under any circumstances, do anything with
> graphics while in this mode or your BASIC program will be mercilessly
> clobbered.
Woot!
This looks fun. I really need to install it into my XROAR.
--
Allen Huffman - PO Box 7634 - Urbandale IA 50323 - 515-999-0227 (vmail/TXT only)
http://www.subethasoftware.com - https://www.facebook.com/subethasoftware
More information about the Coco
mailing list