[Coco] Coco3 warm start...
robert.gault at worldnet.att.net
Fri Nov 16 18:31:06 EST 2007
William Astle wrote:
> Okay, replying to myself. Tacky I know, but I figured out where I went
> wrong with my analysis.
> After tracing the code in mess, I realized that because the system is in
> ROM mode, when it checks the ordinary Basic reset vectors, it finds
> invalid data there (Disk basic is not present and the Extended Basic ROM
> is set to have $FF at the reset point rather than $12 which gets set
> back by the patching code). Then, after it has finished copying and
> patching the ROM code, it jumps into Basic which then determines that it
> really is a warm start.
What you have said is true but not relevant for a Coco Disk system.
The first code a Coco3 will run after a reset is at $8C1B. That will
force 32k internal ROM mode and jump to $C000. That is the Coco3
initialization routine not the Disk ROM. That code runs until $C0C7
(actually at $4088) where tests are made for cold or warm start.
The first test is
which will pass if there is no "run away code" and you just pushed the
Reset button. The second test at $C0CE (actually at $408F) is
which will also pass if the MMU blocks have not been swapped around. The
third test at $C0E7 (actually $4095) is
cmpa #$12 or NOP
which will also pass if the MMU blocks have not been changed. The fourth
test at $C0F1 (actually $409F) is
which will fail unless OS-9 is running or some program that uses MMU
block-0 and sets the reset flag.
Now the default MMU block $38 is restored, ROM copied to RAM, memory is
left in RAM mode, and the code jumps to the normal reset vector at $72.
The code has not yet seen the Extended Basic patch which "is set to have
$FF at the reset point rather than $12".
If you want, I can send you a trace (generated in MESS) of the code that
gets run starting at $8C1B.
More information about the Coco