I now have a working manual BASIC bootstrap that can load RAMDSK.CO from the device after a cold restart.
https://github.com/bkw777/NODE_DATAPAC/blob/main/software/RAMDSK/RBOOT.DO

It is only 8 lines like the old docs say BOOT.BA was
Well, it's 7 lines not counting a comment and a message, or 9 lines counting both. But they are not very neat or convenient. It's still kind of a lot to manually type in for a bootstrap, but if you had a print out you could type it in a couple minutes and then you have RAMDSK back a few seconds after that. This is not exactly a convenient way to install, but it should exist as an option just on principle. You're on the road, suffer a cold reset, everything's safely backed up on the RAMPAC, but you need to get RAMDSK installed somehow.

I was dreaming it might be possible to write something short enough to print right on the card in the silkscreen. hahaha no. :)
Maybe it can be improved over time.

I also wrote a simple inspector that can read raw data from anywhere on the devivce, in either bank, and display in either ascii or hex, and the ascii also shows all the non-printing control characters as their CTRL-x character in inverse video so the display doesn't get messed up and no bytes are hidden either. So 0x00 shows as inverse "@" for instance.
https://github.com/bkw777/NODE_DATAPAC/tree/main/software/RPI

The main point of it is to be small and scrutable, uses no machine code, supports banks.
--
bkw


On 12/14/23 14:46, Brian K. White wrote:
I think I'm getting there with figuring how to access the hardware from BASIC.

Select bank 0 block 0
OUT129,0

"129" selects bank 0, "0" selects block 0 from within that bank

read a byte, which will be byte #0 of this block
INP(131)

Read and print the ascii of all the bytes in bank0 block1
This will be the first block of actual file data (probably also with some kind of linked-list pointer bytes at the head of each) of the first file saved to the device, where block 0 only has the file table. Actually I see the file name is in block 1 not block 0, so, it's not as simple as that. But I DO see my file name immediately followed by the text I wrote in it.

10 OUT 129,1
20 FOR I=0 TO 1023
30 PRINT CHR$(INP(131));
40 NEXT

Do the same but in bank 1
change line 10 to:
10 OUT 133,1

That's not  so bad!

So a bootstrap program will just be a matter of figuring out the exact start & stop addresses. IE read and throw away some number of bytes, to skip over some header junk, then read more bytes and keep them, go to the next block and do the same, stop reading when you have the right number of bytes (which maybe we actually parse from the 6-byte .CO header since that should be simple enough even for a manually typed in bootstrapper.

In one of the archived discussions Paul Globman says the original bootstrap program was only 8 lines of basic, and that it was required that RAMDSK.CO be the first file saved after a battery-pull, so it probably wasn't actually parsing much but just starting at a hardcoded expected offset, and maybe actually reading the file length since a .CO contains it right there easy to read.


--
bkw

Reply via email to