2020-10-30 20:31:47 -04:00
|
|
|
# Writing to a AT28 from Collapse OS
|
|
|
|
|
|
|
|
# Gathering parts
|
|
|
|
|
|
|
|
* A RC2014 Classic
|
|
|
|
* An extra AT28C64B
|
|
|
|
* 1x 40106 inverter gates
|
|
|
|
* Proto board, RC2014 header pins, wires, IC sockets, etc.
|
|
|
|
|
|
|
|
# Building the EEPROM holder
|
|
|
|
|
|
|
|
The AT28 is SRAM compatible so you could use a RAM module for
|
|
|
|
it. However, there is only one RAM module with the Classic
|
|
|
|
version of the RC2014 and we need it to run Collapse OS.
|
|
|
|
|
|
|
|
You could probably use the 64K RAM module for this purpose, but
|
|
|
|
I don't have one and I haven't tried it. For this recipe, I
|
|
|
|
built my own module which is the same as the regular ROM module
|
|
|
|
but with WR wired and geared for address range 0x2000-0x3fff.
|
|
|
|
|
|
|
|
If you're tempted by the idea of hacking your existing RC2014
|
|
|
|
ROM module by wiring WR and write directly to the range
|
|
|
|
0x0000-0x1fff while running it, be aware that it's not that
|
|
|
|
easy. I was also tempted by this idea, tried it, but on bootup,
|
|
|
|
it seems that some random WR triggers happen and it corrupts the
|
|
|
|
EEPROM contents. Theoretically, we could go around that by
|
|
|
|
putting the AT28 in write protection mode, but I preferred
|
|
|
|
building my own module.
|
|
|
|
|
|
|
|
I don't think you need a schematic. It's really simple.
|
|
|
|
|
|
|
|
# Writing contents to the AT28
|
|
|
|
|
Rename A!, A@ and A, to C!*, C@* and C,*
Also, rename "Addressed devices" to "Indirect memory access".
I do this because I need to add indirect versions of !, @ and ,
to allow boostrapping directly to EEPROM and that A,, thing I've
added to assemblers felt like really bad names.
With this change, I'd like to generalize the use of the * suffix
for aliases.
2020-12-07 19:06:58 -05:00
|
|
|
There is an AT28! writer word in B400 which is C!*-compatible
|
|
|
|
(see "Indirect memory access" in doc/usage.txt) and and waits
|
|
|
|
until the write is complete before returning. If you use C!
|
|
|
|
directly, bytes you write might not have the time to completely
|
|
|
|
write themselves before you write another one.
|
|
|
|
|
|
|
|
To use, set C!* with "' AT28! ' C!* **!". Once this is done, you
|
|
|
|
can use MOVE, or /tools/upload, both will call C!* and do the
|
|
|
|
right thing. Unset C!* with "' C! ' C!* **!" afterwards.
|
|
|
|
|
|
|
|
B400 also has AT28, which is the same as AT28!, but for C,.
|