MMU

Base model of 8bit Atari has a small PAL (replaceable with PALCE or GAL) chip to decode memory access (MMU, C061618). It is part of the original chipset. Sometimes, this chip is bad. To repair computer it is possible to program new PAL (or erase old PALCE/GAL) chip and use it in your computer. The only thing is to find FUSE files.
Current, the original version of Atari 1088XEL does not use MMU chip- memory decoding is done in a U1MB module. It is possible to connect the original MMU chip to the board to test the computer with some tricks, but the BASIC image must be in a separate ROM chip.

My version of Atari 1088XEL SMD can use the original MMU chip (no ROM BASIC) or slightly modified chip with OS and BASIC in the same ROM chip.
MMU PAL/PALCE notes, source equations and fuse files:
PALCE source codes and fuse files.

Source files are compiled with the original PALASM (freeware from AMD) in DOSBox.
It is possible to translate PAL fuse file to GAL fuse file with the PAL2GAL tool.

There are two versions of fuse and source files: “original”and “slightly modified” BASIC output:

ORIGINAL:

OS = A13 * A14 * A15 * REN * REF ;/* addresses $E000-$FFFF */
+ /A12 * /A13 * A14 * A15 * REN * REF ;/* addresses $C000-$CFFF */
+ A12 * A11 * /A13 * A14 * A15 * MPD * REN * REF ;/* addresses $D800-$DFFF */
+ A12 * /A11 * /A13 * A14 * /A15 * /MAP * REN * REF ; /* addresses $5000-$5800 - mapped */

BASIC = A13 * /BE * /A14 * A15 * /RD5 * REF ; /* BE and $A000-$BFFF */

MODIFIED BASIC:

OS = A13 * A14 * A15 * REN * REF ;/* addresses $E000-$FFFF */
+ /A12 * /A13 * A14 * A15 * REN * REF ;/* addresses $C000-$CFFF */
+ A12 * A11 * /A13 * A14 * A15 * MPD * REN * REF ;/* addresses $D800-$DFFF */
+ A12 * /A11 * /A13 * A14 * /A15 * /MAP * REN * REF ; /* addresses $5000-$5800 - mapped */
+ BASIC
BASIC = A13 * /BE * /A14 * A15 * /RD5 * REF ; /* BE and $A000-$BFFF */

The modifications is very simple- OS CS gets low not only on OS access, but also when BASIC is selected. Original BASIC pin is used as ROM’s A14 to select ROM bank.

Extended version in Verilog:

module ATARI_MMU(
A11,A12,A13,A14,A15, //pin 1,2,3,4,5
PB0, //pin 9 , OS RAM enable
PB1, //pin 18 , basic enable
PB7, //pin 6 , diagnostic bit
RD4, //pin 7 , right cart present (8000-9FFF)
RD5, //pin 8 , left cart present (A000-BFFF)
REF, // pin 11, dram refresh
MPD, // pin 14, math pack disable


S5, //pin 12 , left cart CS
BASIC, // pin 13
OS, // pin 15
CASINH, // pin 16
IO, //pin 17
S4, // pin 19, right cart select.

ROM_CS,
ROM_A14

);

input A11,A12,A13,A14,A15;
input PB0, PB1,PB7,RD4,RD5,REF,MPD;

output IO,CASINH,OS,BASIC;
output S5,S4;

output ROM_CS, ROM_A14;

//REN=PB0 (ROMen)
//MAP=PB7 (maP)
//BE=PB1 (Basic)

assign BASIC	= REF & (!RD5) & (!PB1) & A15 & (!A14) & A13; // (A000-BFFF)

assign S4	= REF & RD4 & A15 & (!A14) & (!A13); // cart b (8000-9FFF)
assign S5	= REF & RD5 & A15 & (!A14) & A13; // cart a (A000-BFFF)
assign IO	= REF & A15 & A14 & (!A13) & A12 & (!A11); // (D000-D7FF)

assign OS	= 	(REF & PB0 & A15 & A14 & A13) | //(E000-FFFF)
				(REF & PB0 & A15 & A14 & (!A13) & (!A12)) | //(C000-CFFF)
				(REF & PB0 & A15 & A14 & (!A13) & A12  & A11 & MPD) | // (D800-DFFF)
				(REF & PB0 & (!PB7) & (!A15) & A14 & (!A13) & A12 & (!A11)); //(5000-5800)


//assign CASINH = IO | OS | S4 | S5 | BASIC | !REF;

assign CASINH      = S4	|	/* right cart. */
        S5	|	/* left cart. */
        BASIC |	/* BE and $A000-$BFFF */
        OS |					/* OS addresses */
        IO |	/* I/O addresses */
        (!REF);
//additional by Levas:

assign ROM_CS = OS | BASIC;
assign ROM_A14 = BASIC;

// PB0 - OS ROM region. 0-disable, 1-enable
// PB1 - BASIC. 0-enable, 1-disable.
// PB2 - extended RAM bank
// PB3 - extended RAM bank
// PB4 - CPU extended RAM. 0-enable, 1- disable.
// PB5 - ANTIC extended RAM. 0-enable, 1-disable.
// PB6 - EXEGS missile command
// PB7 - self test ROM region. 0-enable, 1- disable.

//A 15 14 13 12. 11
//  1  1  1  0   0 : E000->FFFF - OS.
//  1  1  0  1   1 : D800->DFFF - Floating point ROM
//  1  1  0  1   0 : D000->D7FF - hardware regs (chips)
//  1  1  0  0   0 : C000->C7FF - not used?
//  1  0  1  0   0 : A000->BFFF - cartridge A
//  1  0  0  0   0 : 8000->9FFF - cartridge B (or A)
endmodule

How ROM is mapped? To make ROM image compatible with original MMU, OS image must start from the beginning of the chip (0x0000). If modified MMU is used, BASIC /CS is inverted and used to select ROM page (A14). When OS is selected, BASIC is 0, /CS is 0. Meanwhile in modified MMU, when BASIC ROM selected, OS CS goes low too and BASIC goes high.

Leave a Reply

Your email address will not be published. Required fields are marked *