Johnny,

My comments are inline. I may not have understood everything you commented on, but I will :).

On 12/23/15 5:09 PM, Johnny Billquist wrote:
I definitely do not want to discourage work like yours, or disparage it. It's nice that people care and are interested.

Thanks, I invited criticism, not to worry. I wrote it because I wanted to understand it and unfortunately, no one else wrote anything I was able to easily comprehend (not that this was easy) in the hopes to help others. I'll improve it and appreciate your comments.

That said, there are lots of things to comment on. First of all, I wouldn't say that this bootstrap is capable of booting a large number of peripherial devices. It can only read in the ABSLDR from paper tape, on the PC11 paper tape reader.
I wrote that bit before I finished the draft. I have removed it and will edit a suitable substitute sentence later.
Third, your disassembly, and notation is a little funky, while not totally incorrect.

I'm sure. I am not an assembly language programmer and am learning as I go.

I think it would make more sense for you to write it this way:

START:    MOV    CSR,R1
LOOP:    MOV    (PC)+,R2
PTR:    .WORD    352
    INC    (R1)
WAIT:    TSTB    (R1)
    BPL    WAIT
    MOVB    2(R1),37400(R2)
    INC    PTR
    BR    LOOP
CSR:    .WORD    177550

Sounds reasonable. I'll probably use it.

As for your analysis:
Your explanation of branches seems somewhat over complicated. The instruction is indeed in just 8 bits, while 8 bits are the offset. However, there is no need to mess things up with one-complement, or tricks like that. The offset is an 8-bit value. Sign extend to 16 bits. Multiply by 2, and add to the updated PC. Simple as that. (Note that I said "updated PC". The PC will contain the address of the instruction after the branch before you start doing the calculation for the branch destination.)

Ah, I mixed this up a bit. I will make edits that clarify along the lines you describe. What the analysis shows is how I, an inexperienced person, did the calculations. I will have to do some math practice, but I think I see how it works using the offset directly and will make edits.

In fact, no calculations are ever done in ones complement on the PDP-11. You also make things a bit too complicated. An instruction like
    MOVB    2(R1),37400(R2)

is encoded as (as you correctly said)
    116162
    2
    37400

However, at execution, you should think of this as:
CPU fetches instruction - 116162
CPU increments PC
CPU starts evaluating first argument - 61 -> X(R1), meaning X needs to be fetched from (PC).
CPU increments PC (because of addressing mode of argument 1)
CPU starts evaluating second argument - 62 -> X(R2), meaning X needs to be fetched from (PC).
CPU increments PC (because of addressing mode of argument 2)

Don't start fooling around thinking (PC+2) and (PC+4). That will sooner or later mess you up. It's always (PC), but PC gets incremented several times.

Hmm. Your explanation makes sense, I'll think about it and make some edits.

Öater you also have:
"lines 8-10: store the read byte into the memory location referenced by 037400 + the new displacement, 000076
lines 11-12: increment the displacement to 000078, etc."

...it actually increments the displacement to 000077. It's only incremented by one. Besides 8 don't even exist in octal. Had it incremented by 2, it would have become 000100. :-)

    Johnny

This was a typo. Thanks for catching it. I've edited it.



_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

Reply via email to