PARTNO U283 ; NAME U283 ; DATE September 1, 1993 ; REV 1 ; DESIGNER Dave Haynie ; COMPANY Commodore ; ASSEMBLY Nyx ; LOCATION West Chester ; DEVICE g22v10 ; /************************************************************************/ /* */ /* Nyx Chip RAM Module Mapper, Part 2 */ /* */ /* This is one of two devices used to help map module ID codes */ /* into proper AAA autoconfig codes. */ /* */ /************************************************************************/ /* Allowable Target Device Types: 22V10-25 */ /************************************************************************/ /* Clock: NONE */ /************************************************************************/ /* Free Pins: 23(IO) */ /************************************************************************/ /* HISTORY */ /* DBH Oct 15: Completely new. */ /* DBH Sep 1: Disable ID buffer altogether if no module is */ /* asserting. */ /************************************************************************/ /** INPUTS: **/ PIN [1..10] = [MC9..0] ; /* Module config codes. */ PIN 11 = !CFGRD ; /* Chip-RAM configuration strobe */ PIN 13 = DUAL_SING ; /* The Chip-RAM bus size */ /** OUTPUTS: **/ PIN 14 = !BUFEN ; /* Turn on the configuration buffer. */ PIN 15 = VRM0 ; /* Slot 0 has VRAM. */ PIN 16 = BLT0 ; /* External blitter in slot 0. */ PIN 17 = FIL0 ; /* Slot 0 is filled. */ PIN 18 = VRM1 ; /* Slot 1 had VRAM. */ PIN 19 = BLT1 ; /* External blitter in slot 1. */ PIN 20 = FIL1 ; /* Slot 1 is filled. */ PIN 21 = RSHIFT0 ; /* RAS address shift controls. */ PIN 22 = RSHIFT1 ; /** INTERMEDIATE TERMS: **/ /* The module code lines are in MC9..MC0. There are five bits for each module, with the following definitions: bit meaning 0 1 = VRAM. 0 = DRAM 1 1 = Satellite blitter, 0 = plain memory 2 \ 0 = 4MB, 1 = 2MB, 2 = 1MB, 3 = Empty 3 / 4 1 = 32-bit, 0 = 64-bit The module should be ignored is we have any 32-bit module in a 64-bit system. */ /* The VRAM, BLIT, and size encodings are very straight forward. */ m0isVRAM = MC0; m0hasBLIT = MC1; m0is64 = !MC4; m1isVRAM = MC5; m1hasBLIT = MC6; m1is64 = !MC9; /* If there's a sizing conflict, for now we disable all of the memory. This should be pretty obvious to the user. This is the disable signal. */ modsOK = !m0is64 & DUAL_SING # !m1is64 & DUAL_SING; /* The variables below decode the simple conditions for each slot, to make the output terms read easier. */ m0isEmpty = MC3 & MC2 # !modsOK; m0is1MB = MC3 & !MC2 & modsOK; m0is2MB = !MC3 & MC2 & modsOK; m0is4MB = !MC3 & !MC2 & modsOK; m1isEmpty = MC8 & MC7 # !modsOK; m1is1MB = MC8 & !MC7 & modsOK; m1is2MB = !MC8 & MC7 & modsOK; m1is4MB = !MC8 & !MC7 & modsOK; /** OUTPUT TERMS: **/ /* The configuration buffers for slots 3-7 turn on when CFGRD is asserted. If both slots are empty, the configuration buffers are left off, since this may indicate a module doing the configuration itself. */ BUFEN = CFGRD & !m0isEmpty # CFGRD & !m1isEmpty; /* The configuration slots are based on the modules inserted and the size of the bus. A 32-bit system can use a 64-bit module, only half of it is addressed. A 64-bit system will ignore a 32-bit module. The filling of slots looks like this: MOD1 MOD0 S0 S1 S2 S3 S4 S5 S6 S7 0M 0M 0 0 0 0 0 0 0 0 0M 1M 1 0 0 0 0 0 0 0 0M 2M 1 1 0 0 0 0 0 0 0M 4M 1 1 1 1 0 0 0 0 1M 0M 1 0 0 0 0 0 0 0 1M 1M 1 1 0 0 0 0 0 0 1M 2M 1 1 1 0 0 0 0 0 1M 4M 1 1 1 1 1 0 0 0 2M 0M 1 1 0 0 0 0 0 0 2M 1M 1 1 1 0 0 0 0 0 2M 2M 1 1 1 1 0 0 0 0 2M 4M 1 1 1 1 1 1 0 0 4M 0M 1 1 1 1 0 0 0 0 4M 1M 1 1 1 1 1 0 0 0 4M 2M 1 1 1 1 1 1 0 0 4M 4M 1 1 1 1 1 1 1 1 */ !FIL1 = !modsOK # m0isEmpty & m1isEmpty # m0isEmpty & m1is1MB # m0is1MB & m1isEmpty; !FIL0 = !modsOK # m0isEmpty & m1isEmpty; /* The blitter and VRAM controls have to consider which module is driving the particular slot. */ VRM0 = m0isVRAM & !m0isEmpty # m1isVRAM & m0isEmpty & !m1isEmpty; BLT0 = m0hasBLIT & !m0isEmpty # m1hasBLIT & m0isEmpty & !m1isEmpty; VRM1 = m0isVRAM & m0is2MB # m0isVRAM & m0is4MB # m1isVRAM & m0is1MB & !m1isEmpty # m1isVRAM & m0isEmpty & m1is2MB # m1isVRAM & m0isEmpty & m1is4MB; BLT1 = m0hasBLIT & m0is2MB # m0hasBLIT & m0is4MB # m1hasBLIT & m0is1MB & !m1isEmpty # m1hasBLIT & m0isEmpty & m1is2MB # m1hasBLIT & m0isEmpty & m1is4MB; /* The RAS shift lines depend on what's in slots 0-3. That looks like this: MOD0 RSHIFT1 RSHIFT0 Empty 1 1 1MB 0 1 2MB 1 0 4MB 0 0 */ RSHIFT0 = m0isEmpty # m0is1MB; RSHIFT1 = m0isEmpty # m0is4MB;