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