The code is a bit difficult to understand, but it represents the 'normal'
path for processing a DECtape word. The code always flows all the
way to the break.
For start of block, there's extra code to check for a timing error; but
then the first word is processed (case 0).
For a normal word, a 3-cycle data break is done - increment word
count and current address, check for word count overflow, put the
word in the buffer; but then check for end of block (case DTO_WCO).
If the word count has already overflowed, just check for end of block.
So yes, the end of case 0 should be labeled 'fall through' as well.
FNC_WRIT has the same structure and needs the same comment.
CID Action
1416081 changed variable answer to int
1416082 checked returned values with ASSURE - read error means corrupted target code.
1416088 added return
1416109 This fallthru was intentional - duplicated code to make coverity happy
1416111 This fallthru was intentional - duplicated code to make coverity happy
1416116 This fallthru was intentional - duplicated code to make coverity happy
1416117 This fallthru was intentional - duplicated code to make coverity happy
1416124 protected against negative return
1416142 added ASSURE, however this case won't happen since reg_intpending==true implies positive int level
1416145 checked non-NULL, return SCPE_ARG if NULL
1416150 since only 2 drives are supported, fdc_selected is decoded to 0 and 1 only (allowed 2 and 3 before)
1416152 restrict to 2 drives only
1416166 checked value with ASSURE
1416101 typo: should have been resx
1416106 unnecessary code removed
1416110 this fallthru was intentional - duplicated code to make coverity happy
1416112 this fallthru was intentional - duplicated code to make coverity happy
1416148 change condition to check for negative value
1416179 break was remainder from former logic - removed
1415866 code was remainder from former unimplemented instruction trap - removed
the opcode table first word consists of bits:
<7> = FPD is legal for this opcode.
<4:6> = number of specifiers for unimplemented opcodes (VAX subsets)
<3> = unused
<0:2> = number of specifiers
The mask used to be 0x70. The convention is that x_M_y is a mask value
<right-justified>, for a macro like:
#define get_foo(x) (((x) >> x_V_foo) & x_M_foo)
For a subset VAX (like the 3900), the unimplemented opcodes are those
Many of the intermediate state variables are captured by the instruction
history mechanism. Make sure that these don't come into and out of
scope between instruction executions.