[Coco] Color BASIC BREAK CHECK RAM hook ($17c)

Allen Huffman alsplace at pobox.com
Mon Jun 20 00:42:14 EDT 2022


> On Jun 19, 2022, at 7:32 PM, Walter ZAMBOTTI <zambotti at iinet.net.au> wrote:
> 
> sounds technical.
> 
> You could have provided a short explanation of what the console out hook is or what it does.
> 
> I assume console means display so this is where the the bits finally hit the video ram memory and are displayed on screen?!?!?

It is, quite so, to me, but probably not for many on this list who learned all of this 40 years ago.

The ROM has a routine calls CONSOUT that takes whatever character is in register A and outputs it to a device.

Devices are numbered, like:

-2 - printer
-1 - cassette
0 - screen and keyboard
1-15 - disk

Printing to the screen we all know, but you can also use its device number:

PRINT “HELLO”

PRINT #0,”HELLO"

When you print to the printer, you don’t have to open it first. You just use the device:

PRINT #-2,”THIS GOES TO THE PRINTER”

And then tape and disk files get opened first:

OPEN “O”,#-1,”TAPEFILE”
PRINT #-1,”THIS GOES TO TAPE”
CLOSE #-1

OPEN “O”,#1,”DISKFILE”
PRINT #1,”THIS GOES TO DISK”
CLOSE #1

CONSOUT is called for all of those, and the ROM code checks the device number and decides where to go.

Color BASIC had support for printer #-2, tape #-1, and screen #0. 

The RAM hook was used to add more devices.  In Color BASIC, when a character is being output, the ROM routine first calls the RAM hook. For Color BASIC alone, it’s nothing — just a return.

But when Extended BASIC ROM is there, it changes the RAM hook to a jump instruction pointing to new code in the Extended ROM.  That code looks at the device and handles a special case for the DLOAD command, which I just learned was device #-3. I had no idea about this one. But it would do that, and then return.

Disk BASIC, if present, overrides the RAM hook and makes it jump to Disk BASIC somewhere. In that code, it checks for disk devices and handles it, and then jumps directly to the handler in Extended BASIC. This means Disk BASIC was hard coded to a specific address in Exended BASIC which Microsoft would have had to ensure did not change.  I don’t know how many versions of Extended BASIC got released, but they would have all had to keep this routine in the same ROM location for compatibility.

And down the rabbit hole I go… I’ll have an article about this up on subethasoftware.com <http://subethasoftware.com/> soon with example code and what I have learned so far.

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