A student writes:

        I have a couple of questions to ask.

A long time ago, I found a man who would always answer a question
with a question.  This seems appropriate here.  If you are not able
to see what I am getting at by my use of questions, please ask again,
and I will try another tack.

        (a) At initialization, the PC value is set
        to x3000, all registers are initialized to x0,
        and very interestingly, the NZP flag-bits are also
        *all* reset. That causes problems if the first
        instruction itself is a branch. It can be argued
        that since the condition codes have not been
        set by any instruction, it is illegal to

Nope.  Not illegal.  Just silly on the part of the programmer.

        branch conditionally. However,
        due to this inconsistency (exactly
        one bit among NZP not begin 1), even
        a Branch Always instruction fails to branch!
        So, why not just initialize the NZP state to say 010 by default?

Branch instructions are taken or not taken depending on the condition code
set by the previous instruction that set condition codes.  Does it make
sense for the first instruction to be a conditional branch instruction?

What will the simulator do if the condition codes are 000 when the first
instruction of the application program is a conditional branch?  Is that
sufficient to make this a non-problem?

        (b) What should our simulator do when it encounters
        an input that could not have been generated by a (non-buggy)
        LC-3b assembler? -- eg, if the opcode is set to 0xa or 0xb, or if

How could a non-buggy assembler generate either of these two opcodes?

        the unused bits of a JMP instruction
        are not all zeroes, or if bit 5 of an ADD instruction is zero (which
        means no immediate value following), but bits 4:3 are not zeroes, etc?

Why would a non-buggy assembler do that?

Yale Patt