[sebhc] Rather serious H8/PAM-8 design flaw.
    Dave Dunfield 
    dave04a at dunfield.com
       
    Thu May 27 05:34:20 CDT 2004
    
    
  
>>--- how does it get back to PAM-8?
>On the next clock interrupt.  PAM8's service routine checks to see if it's 
>in user mode (mon led is out), and if so, it checks to see if the 
>interrupted opcode is a halt, or if the RTM key combination is being 
>pressed.  In either case, it beeps and returns to monitor mode.  Remember, 
>PAM8 itself is designed to be a debugger!
This is a rather serious design flaw!
After interrupting ANY instruction (including HLT), the PC is advanced to the
byte afterward .. this means that to "examine" the instruction, PAM-8 has to
backup the stacked PC by one byte, and look for a $76 (HLT opcode).
Problem is - there's lots of mylti-byte instructions which end with $76.
Eg:
   LDA  $76xx    <= Or STA
   LHLD $76xx    <= Or SHLD
   MVI  A,$76    <= Or any register
   CPI  $76
   ANI  $76      <= Or ORI, XRI
   LXI  H,$76xx  <= Any register
   JMP  $76xx    <= Any Jxx inst
   CALL $76xx    <= Any Cxx inst
PAM-8 has no way of knowing that the instruction just interrupted was HLT
or a multi-byte instruction ending with $76
Try this program on your real H8 (or the emulator - but It does happen
on the real H8 also - I have verified this):
       ORG     $2040
loop:  MVI     A,$75
       JMP     LOOP
As expected, it runs "forever".
Now, change the second line to: MVI A,$76
Volia - the program will immediately exit to PAM-8 - in fact, you CANNOT
keep it running with interrupts enabled.
Any code which occupies the $76xx block of memory is almost certain to have
Jxx and/or Cxx instructions ending with $76 - If there's any data stored in
that page, there is very likely to be LDA/STA/LHLD/SHLD/LXI instructions
which end in $76. Plus - even in non-$76xx blocks, there are plenty of
immediate instructions which might end in $76 for any program of significant
complexity.
This is basically a time-bomb waiting to go off - if an interrupt happens at
just the right time in a program containing ANY instruction ending with $76,
PAM-8 will halt the program and re-enter the monitor.
Wow!
Regards,
Dave
-- 
dave04a (at)    Dave Dunfield
dunfield (dot)  Firmware development services & tools: www.dunfield.com
com             Vintage computing equipment collector.
                http://www.parse.com/~ddunfield/museum/index.html
--
Delivered by the SEBHC Mailing List
    
    
More information about the Sebhc
mailing list