[Coco] CoCo 32k rom architecture

Robert Gault robert.gault at att.net
Tue Jan 26 17:00:11 EST 2016


Barry Nelson wrote:
> Ok, but…
>
> How does the rom map both before and after those bits are set? Does it start out with the top 16k half of the 32k rom mapped at $C000, or the lower half? After the bits are toggled, the rom maps to $8000-$FDFF, correct? At that point does the lower half of the rom map to $8000-$BFFF and the top half maps to $COOO-$FDFF? How does this all line up with the format of a .ccc file? Does the file have the lower address half first or does it start with the part of the rom that maps at $C000? Does the cartridge need any special wiring or special hardware?
>
>
>

Well, I ran a test with a real Coco3, MPI, and the Rad Warrior cart which is a 
32K unit. The same test does not work with MESS so emulators are up for grabs. 
The .ccc image of this pack does work with VCC 2.01 but VCC does not have a 
debugger.

The cart was in MPI slot2 and the MPI was set for empty slot4. The Coco3 started 
with Extended Basic.
I turned off the cart auto-start with
POKE&HFF23,&H34
accessed the cart with
POKE&HFFDE,0
POKE&HFF7F,&H11
and read the cart with
FOR I=0 TO 10: PRINT HEX$(PEEK(&HC000+I));:NEXT

The data printed was the same as the first ten bytes in the .ccc image of this 
game. That suggests that with 16k internal and 16k external, you read the first 
16k from the cart ROM at $C000 but after setting $FF90 for 32k external, then 
where is that code?
This does raise the following problem. The beginning code in the game was
  lda #$47
  sta $FF90
Now where then would the next opcode be read? RegPC is still at $C005 but the 
code there is junk in this context. That would seem to require that the first 
16k is still at $C000- while the second 16k is seen from $8000-. Frankly that 
make no sense at all.

What I would require to know exactly what happens, is a way to read memory on a 
Coco3 after setting $FF90 for 32k external ROM. Unfortunately you can't use 
Basic as it gets removed. You would need an ml program loaded into RAM below 
$8000 that sends data to the screen.
Guess I'll have to write a routine to solve this. :)

Robert



More information about the Coco mailing list