PARTNO U130 ; NAME MAPPER ; DATE May 23, 1991 ; REV 1 ; DESIGNER Dave Haynie; COMPANY Commodore ; ASSEMBLY A2631 ; LOCATION West Chester; /************************************************************************/ /* */ /* A2631 Mapper */ /* */ /* This device is responsible for generating autovector, Zorro II, */ /* FPU, and SCSI controller chip selects for the A2631 system. */ /* */ /************************************************************************/ /* */ /* DEVICE DATA: */ /* */ /* Device: 22V10-10 */ /* Clock: NONE */ /* Unused: IO(20),IO(19) */ /* */ /************************************************************************/ /* */ /* REVISION HISTORY: */ /* */ /* DBH May 23: Original version. */ /* */ /************************************************************************/ /** INPUTS: **/ PIN [1..8] = [A26..19] ; /* System addresses */ PIN 9 = !BGACK ; /* A2000 BGACK */ PIN 10 = FC2 ; /* Function codes */ PIN 11 = FC1 ; PIN 13 = FC0 ; PIN [23..21] = [A18..16] ; /* More addresses */ /** OUTPUTS: **/ PIN 18 = !AVEC ; /* Interrupt acknowledge autovector */ PIN 17 = !IOZ2 ; /* Zorro II & A2000 I/O Space */ PIN 16 = !MEMZ2 ; /* Zorro II Memory Space */ PIN 15 = !FPUCS ; /* Floating point unit chip select */ PIN 14 = !SCSI ; /* A3000-style SCSI device chip select */ /** INTERNAL TERMS: **/ /* The main address field */ field addr = [A26..16]; /* There are the CPU state types. */ field cpustate = [FC2..0] ; cpuspace = (cpustate:7); userdata = (cpustate:1); userprog = (cpustate:2); superdata = (cpustate:5); superprog = (cpustate:6); normspace = (cpustate:[1,2,5,6]); dataspace = (cpustate:[1,5]); instspace = (cpustate:[2,6]); /* These are the field types in a CPU space cycle. */ field spacetype = [A19..16]; interruptack = (spacetype:f0000); coppercom = (spacetype:20000); breakpoint = (spacetype:00000); /* There are the major chunks of memory in the system. */ field cpuaddr = [A26..16] ; chipdata = dataspace & (cpuaddr:[0000000..01fffff]); chipinst = instspace & (cpuaddr:[0000000..01fffff]); mainbus = !cpuspace & (cpuaddr:[0200000..09fffff]); cias = !cpuspace & (cpuaddr:[0a00000..0bfffff]); extraram = !cpuspace & (cpuaddr:[0c00000..0cfffff]); chipregs = !cpuspace & (cpuaddr:[0df0000..0dfffff]); busio = !cpuspace & (cpuaddr:[0e80000..0efffff]); romspace = !cpuspace & (cpuaddr:[0f80000..0ffffff]); ramseymem = !cpuspace & (cpuaddr:[7000000..7ffffff]); ramseyreg = !cpuspace & (cpuaddr:[0de0000..0deffff]); scsireg = !cpuspace & (cpuaddr:[0dd0000..0ddffff]); /** OUTPUT TERMS: **/ /* This selects the 68882 math chip, as long as there's no DMA going on. */ FPUCS = cpuspace & coppercom & mc68882 & !BGACK; /* This forces all interrupts to be serviced by autovectoring. None of the built-in devices supply their own vectors, and the system is generally incompatible with supplied vectors, so this shouldn't be a problem working all the time. During DMA we don't want any AVEC generation, in case the DMA device is like a Boyer HD and doesn't drive the function codes properly. */ AVEC = cpuspace & interruptack & !BGACK; /* This select is for cachable resources on the 16 bit bus. */ MEMZ2 = chipinst # mainbus # extraram # romspace; /* This select is for uncachable resources on the 16 bit bus. */ IOZ2 = chipdata # busio # cias # chipregs; /* This is a plain old DMA chip select. */ SCSI = scsireg & !BGACK;