From: "ab8kf" <ab8kf@...>
Jan 2, 2005
Where can I get all the discovered memory and port maps to date?
-Sean
From: "donhamilton2002" <donhamilton2002@...>
Jan 3, 2005
From: Sean Walton <ab8kf@...>
Jan 3, 2005
Too bad that more progress was not made. In any case
I have several questions regarding these specs:
| PORT definitions
| P01 = keyboard (in = cols, out = rows)
Do we have the keyboard matrix mapping?
| P02 = various
| .7 = LCD_ON (output)
Is this part of a "sleep" mode?
| .6 = CALLERID_DATA (input)
What is this?? I'm guessing that indicates that
caller ID data is waiting...?
| .5 = NOT_MODEM_POWER (output)
Another part of a "sleep" mode?
| .4 = YOUGOTMAIL_LED (output)
This is obvious.
| .3 = LCD_CAS (output)
What is this?
| .2 = CALLERID_DATA_RDY (input)
?? Wait... Didn't I see this above... now I'm
confused.
| .1 = KEYROW_9 (output)
??
| .0 = KEYROW_8 (output)
??
| P03 = software masks for ISRs: in's are interrupt
source, out's are masks.
| Highest to lowest:
| .7 = Caller id handler
Ok, I think I understand this one...
| .5 = maybe RTC???
Yeah, I understand. Now, I have questions about the
Real-Time Clock...
| .6 = Modem handler
How much do we know about the modem? E.g. does it
have a queue?
Smartmodem compliant?
| .4 = increment time16
??? What's this??
| .3 = null
| .0 = null
| .1 = Keyboard handler
| .2 = null
OK.
| P05 = slot4000page holds A14 - A21, for addresses in
#4000-7FFF range.
| P06 = slot4000device holds A22 - A29, for addresses
in #4000-7FFF range.
| P07 = slot8000page holds A14 - A21, for addresses in
#8000-BFFF range.
| P08 = slot8000device holds A22 - A29, for addresses
in #8000-BFFF range.
|Device codes:
| 0 = codeflash (64 pages)
| 1 = ram ( 8 pages)
| 2 = LCD (right half) ( 1 page )
| 3 = dataflash (32 pages)
| 4 = LCD (left half) ( 1 page )
| 5 = modem ( 1 page )
OK, I guessing that the notes "holds A22 - A29" is
bogus because of the
device codes and should read:
P05 = slot4000 page holds A14 - A21, for addresses
in #4000-7FFF range.
P06 = slot4000 device code for $4000 slot
P07 = slot8000 page holds A14 - A21, for addresses
in #8000-BFFF range.
P08 = slot8000 device code for $8000 slot
| P09 = printer control & power detect & power button.
| .0 = PRINTER_STROBE (output)
| .1 = PRINTER_AUTOFEED (output)
| .2 = PRINTER_INIT (output)
| .3 = PRINTER_SELECT (output)
| .4 = POWERBUTTON (input)
| .5 = dc-dc good (input)
| .6 = +5V good (input)
| .7 = +6V good (input)
Clear.
| P0A = printer control direction
Um... I'm assuming that this is ALWAYS=1111.0000.
Input is b=0, output is b=1
(I believe that's the standard for parallel line
controllers).
| P0D = CPU clock rate control (clock is 8MHz on
reset)
| #f0=8MHz, #30=10MHz, #00=12MHz. Resets to 8MHz.
| (bits: ?X?X.???? bits 6 & 4 defined/known)
Has anyone fleshed out the unknown bits?
I do find it interesting when devices select their own
clock rate: why would
anyone want anything but the fastest rate?
| P21 = printer status (db25 pins 10,11,12,13,15)
Which bits are mapped to which pin?
| P28 = various (output)
| .0 = modem_reset
Ok, I get this.
| .1 = 74C74_pin4_via600ohm
| .2 = callid_dataclock
| .3 = callid_sleep/reset
| .4 = callid_FSK/not_DTMF
What is all of this?
| .5 = ??
| .6 = ??
| .7 = ??
Has anyone done more here?
| P2C = printer data direction
Um... I'm assuming that P2C.0-7 maps to D0-7. To
enable bidirectional PIO,
the lines have to be driven 0000.0000 for input and
1111.1111 for output. Does
anyone know if this is compatible with APIO/PPI specs.
It would be fun to
connect a Zip drive.
| P2D = printer data (db25 pins 2 - 9)
Gotcha. (Of course, I'm assuming that P2D.0-7 => D0-7
| P2F = RTC clock rate control????
Does anyone know the division rate?
| There are a few more ports not doc. here. (probably
clock/calendar?????)
Anyone know what they are?
| Just what is a "bank? Is it where memory goes, or
the memory that goes there?
| As in "there are 2 banks, at #4000 & #8000" versus
"there are 64 banks of
| codeflash", and "32 banks of dataflash", and "8
banks of ram". Too avoid
| confusion, I am calling the chunks of memory
"pages", and the places those
| chunks are swapped into "slots". I find it too
confusing to keep calling them
| both banks.
| There are 4 slots, of 16k each, at #0000, #4000,
#8000, & #C000.
| Only slot #4000 & slot #8000 have been observed to
be swappable, with
| codeflash swapping into #4000, and ram into #8000.
Also, it seems everything
| except the ram uses #4000 slot. (LCD, dataflash,
Modem, caller ID)
| slot #0000 is always codeflash page #00
| slot #4000 is codeflash pages #01 to #3f (Or LCD,
dataflash, Modem, caller ID)
| slot #8000 is ram pages #1 to #7
| slot #C000 is always ram page #00
Okay, I'm cool with the definitions. However, I am
unclear about several
things:
1) It appears that either the $4000 or the $8000 slot
can take a device
page. Does this mean that I can map any of the
devices to either slot?
The slot definitions, above, say 'no'. Therefore, I
have to assume that
the device selector for $8000 (P08) must always =1
(RAM bank).
2) Is it possible to have both LCD banks visible
selected at the same
time? (This depends on Q#1 being 'yes'.)
3) The modem is a serial device. Are all but the
first byte be undefined?
4) What does the Caller ID data look like? Is it a
string? Is it serial
and interupt-driven like the modem?
| On reset, slot4000 and slot8000 both contain
codeflash page 0 (dev 0, pg 0).
| I would guess that any device can swap into either
slot, but so far the ram
| is the only thing to use #8000 slot, and it never
goes in the #4000 slot.
Okay, one question answered. That means that the
monochrome display is fully
writable (one can actually write to the full display
without paging).
| It seems that the #0000 slot always is codeflash
page #00, & since pg #00 has
| the bank swapping code, this makes sense. There are
a lot of low level
| routines in this page, too. And if the dataflash and
codeflash both swap into
| slot #4000, then the only routines to directly
access dataflash MUST be in
| page 0 of codeflash ...
Logical. logical. logical.
Slot $0000 appears to be the main manager for the
"operating system".
| (or copied to ram, as in update mode)
Aha! Here's the other goodie. The update mode seems
to be running from RAM.
So, I have several hypotheses and questions:
1) Is the "update mode" the re-flashing function that
SJ was playing with?
2) Has anyone found & isolated this "update mode"?
3) This clearly means that we can execute in other
regions than $0000 and
$4000
| It stands to reason that slot #C000 is fixed ram
page, since it contains the
| stack. Everything I have seen says that the #4000
slot is where all the
| coderom above #003fff is mapped.
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
(URL)
From: "Cyrano Jones" <cyranojones_lalp@...>
Jan 4, 2005
Yes. But I'm tryin'.
When it rains, it pours! :-)
I sketched it on paper, and it is on the "todo list"
to type it up. If you really want it, I can post it
sooner rather than later.
In the meantime, the Matrix is 10 rows by 8 columns.
(bet you saw all three movies, and missed that! ;^)
8 of the rows are connected to output port #00,
and the other 2 are on output port #02 bits 0 & 1.
The 8 columns are read back on input port #00.
I guess so, for just the lcd.
The cpu can turn off the power to most of the
circuits (including the lcd) in what I would call the sleep mode,
but that is separate from this.
Also, some parts of the circuit can be powered down
independent of the rest (modem for instance).
I don't know for sure, but it seems a good guess that
turning the lcd off with a low to "LCD_ON" would save
power. LCD_ON seems to be an enable for the lcd
driver circuits (inside of the lcd).
Serial data, from the caller id chip, to the cpu.
This one actually gates the power on/off to the
modem circuitry. It seems logical that it would
be off to save power whenever you are not using the modem.
I am not an expert on lcd's, in fact this mailstation
lcd is the first I have really looked at. I looked
at several common lcd data sheets, and as I recall
this one did not match any of the common ones.
Since message 38, I have seen sevearal lcd's
that have a command/data pin, and I suppose
that could be the real function of this signal
(it goes directly to the lcd ribbon cable). But
if that is the case, the only command I see
the mailstation sending is a "column number".
I called it cas (column address select), because
it reminded me of how DRAM chips are addressed.
But it is probably better to rename it "column register select",
because the column number is sent on the data
bus (in a seperate write cycle), not on a
multiplexed address bus as with DRAM cas.
Maybe there *are* other commands
besides the column number, and it really *is*
"command register select"???? I dunno.
Above was the actual serial data input, *this* is
the handshake that tells the cpu to read that data.
The 2 (of 10) rows that did not fit port #01.
I dunno, but I can post the data sheet
(if it is not already there???)
The handler does implement send and recv queue's in software.
There are two software timebases, one is a 16 bit
value, and the other is 32 bit. The 32 bit one
seems to be counting milliseconds, but I don't
know what this one is counting (besides the
number of times that int 3.4 has happened).
The only thing that happens during
int 3.4 is this 16 bit counter is incremented.
So far, I don't know where this value is used,
or what for.
A22-29 *is* the device code.
Although there are no pins on the cpu for a22-a29,
the device reg's can be thought of as holding those
bits.
I have been using the notation "DDPP:XXXX"
for 32 bit mailstation addresses, where
DD is one byte of device address (port #06 or #08),
PP is one byte of page address (port #05 or #07), and
XXXX is two bytes of slot & offset (the z80's idea of the address).
The hi two bits of XXXX determine the "slot"
(which dev & page registers to use)
and the lo 14 bits are the offset in
page PP of device DD.
(slot0000 and slotC000 don't have writeable
device and page registers, AFAICT, they use
fixed values, so addresses in these "slots"
always refer to fixed pages, with
slot0000 always holding page #00 of device #00
and
slotC000 always holding page #00 of device #01.)
The mailstation probably leaves it set that way.
Or I should say it sets it that way, and leaves it.
I would guess (but have not tried it) that you
could set any way you want, in *your* code.
Not me.
The power dissipation in CMOS devices is directly
proportional to the clock rate. The batteries
will last 1.5 times as long at 8 MHz. (But it might take
1.5 times as long to do your calculation!)
P21.7 in - printer status busy (db25.11)
P21.6 in - printer status ack (db25.10)
P21.5 in - printer status paper end(db25.12)
P21.4 in - printer status select (db25.13)
P21.3 in - printer status error (db25.15)
(The DB25 is a standard parallel port pinout.)
I think that 28.0 & 28.1 may be reversed????
P28.0 = connected to pin 4 of the 74c74 ic via a 600 ohm resistor.
P28.1 = modem_reset
The 74c74 is a dual flip flop, and it gates
the power to most of the board (via a transistor).
I think pulsing 28.0 will turn the board off.
callid_dataclock - the cpu toggles this line, and
the callid chip sends one serial bit for each clock.
callid_sleep/reset - puts the callid chip in low power sleep mode.
callid_FSK/not_DTMF - selects whether the callid chip listens for
call id data (freq shift keyed modem-like data) or touch-tones
(dual tone multi freq)
I don't know if they are used for anything internal,
but I don't think they are brought out to pins on the cpu.
Dunno. What are APIO/PPI ?
The description above is just how the mailstation
code is using the hardware. I have verified that
the coderom can be mapped to slot8000, and
also that ram can be mapped to slot4000.
I assume that any device can go in either slot,
but I only tested those.
Both lcd banks are visible all the time, they
are the right and left halfs of the screen.
The cpu can only access one half at a time, though.
In fact, the cpu can only access one byte (one row,
of one column, of one half the screen) at a time.
Each row is mapped to a different address in the cpu's
address space. Changing columns within a half requires
sending a new column number to that column register thingy.
And changing halfs requires outputing a device number to
the appropriate device register.
The modem interface to the cpu is parallel,
one byte at a time (the uart is inside the modem chip).
When the modem is banked in, the 8 modem registers
are mapped to the first 8 bytes of whichever slot it is in
(probably mirrored throughout) The mailstation code
puts the modem into slot4000.
So, with the modem in slot 4000, the recv data is
read from memory address #4000, and send data
is written to that address.
#4001-4007 are the status and control registers.
Dunno.
Yes. Yes.
You mean by putting one half in slot4000 and the other
half in slot8000??????
I suppose you could do that, but you would still have to deal
with the column addresses. IOW, you cannot map all the
screen pixels into memory at the same time. You possibly could
map one column from first half and one column from
the second half at the same time.
(Each column is a byte wide x 128 bytes high. And each half screen
is 20 columns wide.)
The mailstation handles this nastiness by using a screen
buffer in ram (in fixed slotC000). All drawing is done
in this buffer, which *is* a block of bits representing the
whole 320 x 128 pixel screen. There are text, line, and icon
drawing routines.
And after a whole screen is drawn another routine
copies the whole mess over to the actual lcd.
Half the screen at a time.
One column of each half at a time.
One byte of each column at a time.
Those above referenced drawing routines are there, too!
Yes.
Yes.
Yes. The protocol was described in message 92
and code to interface posted in the files section (mesg 85 + 86).
Yes, it is just that the mailstation code is assembled/linked
to run in those slots. Your code can run wherever you like.
My code is still not ready for prime time, but I expect
too post a "beta" version "real soon now". I tried it out
under win XP, and it does not work. :-(
There is also a nasty tendency for the mailstation flash to be erased
if you leave the laplink cable attached while rebooting the pc.
CJ
From: Sean Walton <ab8kf@...>
Jan 4, 2005
If it isn't obvious, I'm trying to write a firmware
specification.
| > | PORT definitions
| > | P01 = keyboard (in = cols, out = rows)
| > Do we have the keyboard matrix mapping?
|
| I sketched it on paper, and it is on the "todo list"
| to type it up. If you really want it, I can post it
| sooner rather than later.
If you could scan the sketch and email it, I will
formalize it.
| > | P03.3 = LCD_CAS (output)
| > What is this?
|
| I am not an expert on lcd's, in fact this
mailstation
| lcd is the first I have really looked at. I looked
| at several common lcd data sheets, and as I recall
| this one did not match any of the common ones.
| Since message 38, I have seen sevearal lcd's
| that have a command/data pin, and I suppose
| that could be the real function of this signal
| (it goes directly to the lcd ribbon cable). But
| if that is the case, the only command I see
| the mailstation sending is a "column number".
| I called it cas (column address select), because
| it reminded me of how DRAM chips are addressed.
| But it is probably better to rename it "column
register select",
| because the column number is sent on the data
| bus (in a seperate write cycle), not on a
| multiplexed address bus as with DRAM cas.
| Maybe there *are* other commands
| besides the column number, and it really *is*
| "command register select"???? I dunno.
Ok, I can understand this... However, this is a
bit-wide: So,
the column must be selected serially. How long is the
column
address and where is the clock port?
| > | .5 = maybe RTC???
| > Yeah, I understand. Now, I have questions about
the
| > Real-Time Clock...
Do we have any information about the RTC?
| > | .6 = Modem handler
| > How much do we know about the modem? E.g. does it
| > have a queue?
| > Smartmodem compliant?
|
| I dunno, but I can post the data sheet
| (if it is not already there???)
| The handler does implement send and recv queue's in
software.
I don't recall seeing the document. I think that we
need to
place the significant documents like this in the
/files folder.
| > | .4 = increment time16
| > ??? What's this??
|
| There are two software timebases, one is a 16 bit
| value, and the other is 32 bit. The 32 bit one
| seems to be counting milliseconds, but I don't
| know what this one is counting (besides the
| number of times that int 3.4 has happened).
| The only thing that happens during
| int 3.4 is this 16 bit counter is incremented.
| So far, I don't know where this value is used,
| or what for.
What are the port #s for these two counters?
| > P06 = slot4000 device code for $4000 slot
| > P07 = slot8000 page holds A14 - A21, for
addresses
| > in #8000-BFFF range.
| > P08 = slot8000 device code for $8000 slot
|
| A22-29 *is* the device code.
I think that we are picking nits on semantics.
According to the 3SI176 pinout, pin #26-32 appear to
be
a port with each pin assigned to each device. You
know
the code better than anyone else -- when selecting a
device is it a bitset or is the pinout inaccurate?
| > I do find it interesting when devices select their
own
| > clock rate: why would
| > anyone want anything but the fastest rate?
|
| The power dissipation in CMOS devices is directly
| proportional to the clock rate. The batteries
| will last 1.5 times as long at 8 MHz. (But it might
take
| 1.5 times as long to do your calculation!)
Excellent point. I believe that power consumption is
nonlinear: the faster you go the power increases
nonlinearly. So, keeping things slow is a "good
thing."
| > | P28 = various (output)
| > | .0 = modem_reset
| > Ok, I get this.
| >
| > | .1 = 74C74_pin4_via600ohm
| > | .2 = callid_dataclock
| > | .3 = callid_sleep/reset
| > | .4 = callid_FSK/not_DTMF
| > What is all of this?
|
| I think that 28.0 & 28.1 may be reversed????
Once again, I was using collected information I could
find.
You know the code far better than I do. I have made
the
change.
| P28.0 = connected to pin 4 of the 74c74 ic via a 600
ohm resistor.
| P28.1 = modem_reset
|
| The 74c74 is a dual flip flop, and it gates
| the power to most of the board (via a transistor).
| I think pulsing 28.0 will turn the board off.
Does the board turn itself "on" through the hardware?
| > | P2C = printer data direction
| > Um... I'm assuming that P2C.0-7 maps to D0-7. To
| > enable bidirectional PIO,
| > the lines have to be driven 0000.0000 for input
and
| > 1111.1111 for output. Does
| > anyone know if this is compatible with APIO/PPI
specs.
|
| Dunno. What are APIO/PPI ?
APIO = Advanced Parallel I/O
PPI should be ECP/EPP (sorry)
It may actually work... You stated that you can
reprogram
the MS using the parallel port. Do you manage to do
bidirectional communication to-from the PC/MS?
| > 2) Is it possible to have both LCD banks
visible
| > selected at the same
| > time? (This depends on Q#1 being 'yes'.)
|
| Both lcd banks are visible all the time, they
| are the right and left halfs of the screen.
Sorry, I should have been more clear: I meant "visible
to the firmware code."
| Each row is mapped to a different address in the
cpu's
| address space. Changing columns within a half
requires
| sending a new column number to that column register
thingy.
| And changing halfs requires outputing a device
number to
| the appropriate device register.
| I suppose you could do that, but you would still
have to deal
| with the column addresses. IOW, you cannot map all
the
| screen pixels into memory at the same time. You
possibly could
| map one column from first half and one column from
| the second half at the same time.
| (Each column is a byte wide x 128 bytes high. And
each half screen
| is 20 columns wide.)
|
| The mailstation handles this nastiness by using a
screen
| buffer in ram (in fixed slotC000). All drawing is
done
| in this buffer, which *is* a block of bits
representing the
| whole 320 x 128 pixel screen. There are text, line,
and icon
| drawing routines.
|
| And after a whole screen is drawn another routine
| copies the whole mess over to the actual lcd.
| Half the screen at a time.
| One column of each half at a time.
| One byte of each column at a time.
Please help me, I need more clarification.
I believe that you are implying that each byte
represents a pixel on
the display -- is that true? If so, the screen has
its own memory
of 320x128x8 (or ~40KB). It's also possible that the
display grays.
Could you explain in more detail exactly how a block
of bits are
written to the display?
| > 2) Has anyone found & isolated this "update
mode"?
|
| Yes. The protocol was described in message 92
| and code to interface posted in the files section
(mesg 85 + 86).
I will look at those messages -- this is a major step
and kudos to
you!
| My code is still not ready for prime time, but I
expect
| too post a "beta" version "real soon now". I tried
it out
| under win XP, and it does not work. :-(
Still, I think that you have made some mjor progress!
| There is also a nasty tendency for the mailstation
flash to be erased
| if you leave the laplink cable attached while
rebooting the pc.
eeek!
-Sean
__________________________________
Do you Yahoo!?
Yahoo! Mail - now with 250MB free storage. Learn more.
(URL)
From: "Neil Morrison" <neilsmorr@...>
Jan 4, 2005
From: "Cyrano Jones" <cyranojones_lalp@...>
...
There is good reason for this. LCDs tend to be slow to update, so it's
better to do some things with it off in some cases. They may not use this,
but you never know.
Regards,
Neil Morrison
From: Sean Walton <ab8kf@...>
Jan 4, 2005
Really? That jives with CJ's statement implying that
the LCD has its own memory. Good comment!
-Sean
__________________________________
Do you Yahoo!?
Yahoo! Mail - Find what you need with new enhanced search.
(URL)
From: "Neil Morrison" <neilsmorr@...>
Jan 4, 2005
I have a lot of experience with the Tandy Model 100 and they are very slow
to scroll etc. so it's normal to find ways around this.
Neil
From: "Sean Walton" <ab8kf@...>
From: "Cyrano Jones" <cyranojones_lalp@...>
Jan 6, 2005
Sounds interesting. By firmware spec, do you mean
essentially a datasheet for the mailstation hardware?
I typed it and uploaded to file section. Also
another modem datasheet, and a revised verion of my lcd
data.
[blah blah, lcd, blah....]
The lcd interface is byte wide.
Column numbers are sent as bytes.
And pixel data is sent 8 pixels per byte.
The columns are 8 pixels wide by 128 pixels high.
2 halfs x 20 columns/half x 8 pixels/column = 320 pixel wide screen.
[...blah, rtc, blah...]
I'm pretty sure that i/o ports #10 thru #1F are for the rtc.
The date & time digits are #10-#1C, and the last 3
are some sort of control.
[...modem...]
done. I skimmed thru it again, and it would seem
that the modem in the ms is capable of controling a
speakerphone, and the interfacing to a headset, too.
Hmmmm.
No ports, they are in ram.
On the software side, it is the binary address.
To select device 5 (the modem), the device register
holds "0000 0101"
You are correct that the device bits are decoded
internally to a "1 of 7", and the device address
bits never make it outside the cpu. And it is
impossible to add even an 8th device, coz the
whole device reg & decoder is buried in the chip.
(There is one device select unused and available for
expansion purposes, device 6).
[......................]
Yes, but not with that same signal. It can wake itself
up at a set time, and download mail. And as far as I
can tell, the cpu is sleeping, or off, before wakeup.
So it can't wake itself up with a i/o bit.
It must be a timer, likely part of the rtc.
[....]
My hunch is that it is just a matter of writing
the software. The data pins on the parport are
capable of bidir communication.
Yes, but the ms update code uses a "laplink" type
of protocol. It requires the minimum in parports,
and will work with even the oldest par ports. It
does not use real bidir capability, it receives
5 bits at a time using the status lines as inputs.
[.................................................]
each byte is 8 horizontal pixels.
It does have its own memory.
(2 halfs x 20 cols x 128 rows x 8 pixels).
no.
check the revised lcd data in file section, under "part files".
[.........]
CJ
From: Sean Walton <ab8kf@...>
Jan 6, 2005
Essentially, yes. A firmware specification does
define all the hardware elements in an embedded
system, but it goes further to describe the:
-Support devices and their programming
+flash devices
+RTC
+display
+modem
+keyboard
+parallel port
+caller ID
+LEDs
+power modes
-Interrupt subsystem
+priorities
+masking
+stacking
-Paging mechanisms and rules
+slots & pages
-Ports -- their meaning and programming
+...?
-Clocking: RTC and clock interrupts (if they exist)
+timers
+wake-ups
+MM/DD/YYYY HH:MM:SS.mmm
Many of the items above are still in flux, but I could
gather what we know right now into a useful
programmers document. I would like to get to the
point of being able to completely reprogram the MS
with my own OS and programming language(s). This is
the first step in that direction. That is the reason
I put that poll up -- I wanted to see if publishing
this would be useful to more than myself alone.
-Sean
__________________________________
Do you Yahoo!?
Yahoo! Mail - now with 250MB free storage. Learn more.
(URL)
From: "John R. Hogerhuis" <jhoger@...>
Jan 6, 2005
Sean,
Useful, certainly, but most of us can get along with an I/O map, memory
map and the datasheets, so if I were you I wouldn't put too much effort
into polished engineering documentation. Just the essentials will
suffice for those who will be writing code.
Where hard questions come up, one just disassembles the original
firmware.
Maybe better just to start hacking and document peculiarities as you go?
I always figured the linux-hacker stuff looked sufficient to start
getting code up and running. It certainly helped point the way to the
native reflash code.
(CJ -- I haven't forgotten about porting/testing the reflash code, alas
I am just swamped with end-of-year bookkeeping stuff at the moment...)