PARTNO 31XXXX ; NAME U201 ; DATE April 25, 1991 ; REV 1 ; DESIGNER Dave Haynie ; COMPANY Commodore ; ASSEMBLY Gemini ; Location U201 ; /************************************************************************/ /* */ /* Gemini: Satellite Mapper, U201 and U401 */ /* */ /************************************************************************/ /* Allowable Target Device Types: 22V10-15 */ /************************************************************************/ /* Clock: NONE */ /************************************************************************/ /* Free Pins: I(2) */ /************************************************************************/ /* HISTORY */ /* DBH Apr 25: Completely new. */ /************************************************************************/ /** Inputs **/ PIN 1 = !EML ; /* Bus access to local memory */ PIN 2 = !AS ; /* Local address strobe */ PIN 3 = !LME ; /* Local access to bus */ PIN [4..11] = [A31..24] ; /* Local addresses */ PIN 13 = A23 ; PIN 23 = A22 ; PIN [16..14] = [FC2..0] ; /* Local function codes */ /** Outputs **/ PIN 17 = !EXT ; /* Want access to expansion bus */ PIN 18 = !COPQ ; /* Coprocessor space qualifier */ PIN 19 = !REGQ ; /* Register space qualifier */ PIN 20 = !DSACK0 ; /* Data size acknowledge */ PIN 21 = RAMIO ; /* RAM controller I/O addresses */ PIN 22 = RAMHI ; /* RAM controller high addresses */ /** Declarations and Intermediate Variable Definitions **/ field addr = [A31..24]; localmem = addr:[00000000..00ffffff]; cpuspace = FC2 & FC1 & FC0; memspace = FC1 $ FC0; /** Logic Equations **/ /* The External Access strobe indicates that the satellite wants access to the expansion bus. */ EXT = !EML & !localmem & memspace; /* The coprocessor qualifier is very simple, look at the function codes. However, some special encoding is done when the satellite is accessing exteral memory. If the external memory is in the second 16 megs, it gets asserted. This and REGQ serve to indicate when A24 needs to be inverted. */ COPQ = !EML & cpuspace # LME & addr:[01000000..01ffffff]; /* The register qualifier looks at the current bus address, to decide if any of the I/O registers could be accessed. I/O registers include the timer control register at $0080000 and the interrupt vector register at $00a00000. */ REGQ = !EML & localmem & A23 & !A22 & memspace # LME & addr:[01000000..01ffffff]; /* Here are the RAMSEY spoofing line. Normally, RAMSEY responds to the $00DExxxx range for register access, the $07000000-$073fffff range for 4MB of DRAM. These guys rearrange those conventions. To get RAM, we set RAMHI high and RAMIO low, forcing the RAMSEY address to $07000000- $073fffff. To get I/O, RAMHI goes low and RAMIO goes high, giving RAMSEY the address range $00c00000-$00ffffff. To turn off RAMSEY, set RAMHI and RAMIO both low. */ RAMHI = !EML & localmem & !A23 & !A22 & memspace # EML; RAMIO = !EML & localmem & A23 & A22 & memspace; /* RAMSEY generates its own DSACKs, so does the FPU. I need one for any access to REGQ space. */ DSACK0 = 'b'1; DSACK0.OE = REGQ & !COPQ & AS;