[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