-- Copyright (C) 1984  by Xerox Corporation. All rights reserved. 
-- MultibusAddresses.mesa, HGM, 25-Oct-84  2:40:42

DIRECTORY
  DicentraInputOutput USING [IOAddress];

MultibusAddresses: DEFINITIONS =
  BEGIN
  
  IOAddress: TYPE = DicentraInputOutput.IOAddress;
  
  
  io: IOAddress = NIL;
  
  --   Hex   Hex
  --  Byte  Word
  
  --  2000  1000      miscBoard: IOAddress = io + 1000H;
  -- 42000 21000 --   modem0: IOAddress = io + 21000H;
  -- 82000 41000 --   dialer0: IOAddress = io + 41000H;
  -- A2000 51000 --   dialer1: IOAddress = io + 51000H;
  -- C2000 61000 --   dialer2: IOAddress = io + 61000H;
  -- 12000  9000 --   scc0: IOAddress = io + 09000H;
  -- 32000 19000 --   scc1: IOAddress = io + 19000H;
  -- 52000 29000 --   scc2: IOAddress = io + 29000H;
  -- 72000 39000 --   scc3: IOAddress = io + 39000H;
  -- 92000 49000 --   timeout: IOAddress = io + 49000H;
  -- B2000 59000 --   eprom: IOAddress = io + 59000H;
  -- D2000 69000 --   desByte: IOAddress = io + 69000H;
  -- F2000 79000 --   desWord: IOAddress = io + 79000H;
  
  --  3E00  1F00 --   controlStore: IOAddress = io + 1F00H;
  
  --  4000  2000 --   firstSunBoard: IOAddress = io + 2000H;
  --  4100  2080      secondSunBoard: IOAddress = io + 2080H;
  --  4200  2100      thirdSunBoard: IOAddress = io + 2100H;
  --  4300  2180      fourthSunBoard: IOAddress = io + 2180H;
  --  ....
  
  --  5000  2800 --   firstT1Board: IOAddress = io + 2800H;
  --  5100  2880      secondT1Board: IOAddress = io + 2880H;
  --  5200  2900      thirdT1Board: IOAddress = io + 2900H;
  --  5300  2980      fourthT1Board: IOAddress = io + 2980H;
  --  ....
  
  -- 3Com boards use 8K bytes of address space.  With 16 bit addressing, you can only get 7 of them on a machine.  If the last half of IO addressing is reserved for the future, you can only get 3.  3 seems a bit small, even though 1 machine probably can't keep up with 3 busy nets.  Using 20 (or 24) bit addressing looks attractive but that gets complicated because most other boards don't inspect the extra address bits.  The trick is to assign the first 3Com board a portion of the normal address range.  Additional boards live in hyperspace behind the first one.  Thus no other board can have an address where it might get confused if it only responds to 16 bit addresses.
  
   
  --  6000  3000 --   first3ComBoard: IOAddress = io + 3000H;
                        processorIdLocation: IOAddress = first3ComBoard + 200H;
  -- 16000 0B000      second3ComBoard: IOAddress = io + 0B000H;
  -- 26000 13000      third3ComBoard: IOAddress = io + 13000H;
  
  -- 08000  4000      Last Half Reserved for non standard additions
  -- 08000  4000 --   slot: IOAddress = io + 4000H;





  -- Main memory real address 0 through 1 megaword are reserved for the Emulator.
  -- That's 2 boards.  (There are only 12 bits of page number in the map.)
  
  -- The map lives in bank 1.  (Only the first 1/4 of it for now.)
  
  END..