[Simh] Custom ROMs on PDP-11 sim
Johnny Billquist
bqt at softjar.se
Sat Dec 16 16:38:44 EST 2017
On 2017-12-16 16:21, Timothe Litt wrote:
> On 16-Dec-17 07:35, Johnny Billquist wrote:
>> Top-posting to make it simple, while still keeping the original text.
>>
>> While it is true that device access might be done using relative
>> addressing, that would in general be a bad software design. Things
>> like device CSRs should never be accessed as relative addresses, but
>> should be absolute. Any sane programmer should know that. And it is
>> not any extra effort in doing this on a PDP-11, so the programmer have
>> no real excuse for not doing it right. (But I know that people
>> sometimes still do things wrong anyway.)
>
> While this case is moot, dumping peripheral ROMs has come up before, so
> correct information may be useful to someone in the future.
Indeed.
> I'm pretty sure that (among other things), I'm knowledgeable, sane and a
> programmer. I was not writing about "the general case". This thread
> was specifically about ROMs embedded in a peripheral.
Not trying to make any statements about you here.
> This is a
> different environment from the "general" case, and one where your
> comments are off-base. This is the exception to *never*. It has
> nothing to do with laziness or 'wrong'; I assumed neither. And PIC is
> only one aspect of the problem as presented.
>
> It is true that in a typical OS driver, a CSR base is specified by an
> absolute (if possibly mapped) address, with code like
>
> mov #173100, r0 ; or
> mov csrbase(R5), r0 ; where r5 points to some data structure, and
> csrbase contains an absolute I/O address
> bit #100, 4(r0)
>
> This ensures that the *code* can be moved; *the device is at some fixed
> address* determined by SYSGEN, autoconfiguration, or the like. So the
> references are register deferred and/or indexed relative to an
> "absolute" address. The code should be PIC, as most (later) OSs want to
> be able to dynamically load drivers. I'd agree that in this case, PIC
> with an absolute device address is the preferred (and sometimes
> required) implementation.
>
> In the specific case of a device ROM, CSR access would indeed be
> properly done with relative addressing. There isn't much (sane)
> choice. Calling it 'bad software design' is inappropriate, and
> overlooks the environmental constraints and functional requirements of a
> device ROM.
Fair enough. If you actually have a device which includes both CSR and
code, that are moved together through I/O space, then yes you'd want to
use relative addressing for the CSR.
However, such a device would be wrong to start with. And I've never seen
anyone do that, but sure, it could be done.
But with the limited space in the I/O page, you would not want to have
the same code replicated all over the space.
So in the end no, I do not believe that it would ever be the right thing
to have relative addressing for CSRs. Your example is valid in that such
a design would make sense to have relative addressing, but such a device
is already a wrong thing to start with, and should not be.
Johnny
--
Johnny Billquist || "I'm on a bus
|| on a psychedelic trip
email: bqt at softjar.se || Reading murder books
pdp is alive! || tryin' to stay hip" - B. Idol
More information about the Simh
mailing list