Juan Castro's HDB-DOS stuff.

Allen Huffman via Coco <coco-uNHYcr1XS/wmlAP/[email protected]>
Newsgroups gmane.comp.hardware.tandy.coco
Message-ID <[email protected]>
Comments and Question for Juan:

> On Aug 1, 2025, at 7:00 PM, Juan Castro <[email protected]> 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



-- 
Coco mailing list
[email protected]
https://pairlist5.pair.net/mailman/listinfo/coco
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.