PET interrupt routine and IEEE load

From: André Fachat <afachat_at_gmx.de>
Date: Sat, 19 Feb 2011 14:34:42 +0100
Message-ID: <20110219133442.159590@gmx.net>
Hi there,

I have written a (teaser: USB keyboard/mouse) driver for the PET (BASIC4)
and found that when the interrupt routine is not in page $E4**,
the IEEE488 load hangs! I.e. when doing a 

  LOAD"$",8

it just hangs, in fact after loading everything. I found that
the load routine at $f401, after the actual load (at $F356, called
from $F415), calls into $F92B. This routine first checks if 
the STOP key is pressed (I wonder why, as loading has finished
anyway here), but directly after its call to the check, at $F92E
it checks if the IRQ routine high byte is $E4, and if not so,
loops back to the beginning of the routine!

The only way I found to get around this really is a bad hack: in the 
interrupt routine, if the interrupted code is between $F92B and 
$F930, move the IRQ return address on the stack to $F934, so that the
check is skipped. Once in the loop, the probability to eventually
get interrupted there seems to be high enough such that you do not
notice any delay when you do the LOAD.

Now my questions:
- anyone knows what this routine is really for, resp. why is it
called from after the end of the LOAD? It seems this is actually 
tape-related (in fact on RUN/STOP it resets the interrupt pointers,
disabling the driver!)
- anyone knows any other way to get around this limitation with the
custom interrupt routine? Besides patching the ROM....

Thanks!
André

-- 
NEU: FreePhone - kostenlos mobil telefonieren und surfen!			
Jetzt informieren: http://www.gmx.net/de/go/freephone

       Message was sent through the cbm-hackers mailing list
Received on 2011-02-19 14:00:10

Archive generated by hypermail 2.2.0.