[net.micro.amiga] Memory/clock expansion for the Amiga

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

The next few postings describe in detail an expansion board that you can
build to add 1MB of memory and a clock to your amiga.  Note that this
memory and clock DOES NOT conform to the standard Amiga expansion
architecture, and as such, won't autoconfig.  You probably won't be able
to use a standard expansion box with this either.  With that said, here
it is.  It was forwarded to me by a friend who got it sent to him by
someone who got if off of a BBS...  You get the idea. 

I have no idea if this works or not.  Hey, it could smoke your system 
for all I know.  The schematic looks resonable enough, but I'm not a
hardcore hardware hacker.

Do what you wish with it; if it doesn't work, I sure won't be held
responsable.   Look at the README file for more info about where it
came from.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

Start with mem.doc for an overview of the project. This document will
explain the other files.

If you have any comments or questions about the documentation, leave me
Email on the Denver Amiga BBS, (303) 693-4735.  If you cannot get the board
to work, please try to get local help from some technical type. I cannot
debug miswiring over the phone.

Several people have asked about expanding the board.  I have two
suggestions. If you can, the easy thing to do would be to use 1 meg chips.
These are very expensive at present, but would give you a 4 meg board.  The
extra address multiplexer is already there, only a little rework of the
select lines is needed.  A second copy of the memory array is possible,
including the drivers.  If you do this, you must add another chip to develop
more ras lines.  Also, you will have to add a power supply since the Amiga
cannot handle more chips than are on the present design.

This project is released to the public domain for non commercial use. This
entire archive file is copyright 1986 by Michael W. Fellinger, 1590 Quince
Ave. Boulder, Co 80302.  Any contributions cheerfully accepted at that
address. Anyone interested in commercial use should contact me first.

My next hardware project for the Amiga will be a cheap hard disk interface.
Anyone interested should leave me Email. At this time, the hardware has been
figured out, but I need a device driver. Help would be appreciated.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

static int adr[6]={9,8,7,4,2,0};
static char *month[12]={
       "Jan",
       "Feb",
       "Mar",
       "Apr",
       "May",
       "Jun",
       "Jul",
       "Aug",
       "Sep",
       "Oct",
       "Nov",
       "Dec"};

static unsigned char d,i,*adradr=(char *)0x600003,*dataadr=(char *)0x600001;

readclock(data)
char data[];
{
    *adradr=0xc;/* check for end of update cycle */
    d=*dataadr;
    do {
        *adradr=0xc;
    } while((*dataadr&0x10)==0);
    /* here if just completed update cycle */
    do {
        for(i=0;i<6;i++) {
           *adradr=adr[i];
           data[i]=*dataadr;
        }
        *adradr=0xa;
        if((*dataadr&0x80)!=0) continue;/* update */
        *adradr=0xc;
    } while((*dataadr&0x10)!=0);
    /* here if read without encountering another update */
}

writeclock(data)
char data[];
{
    *adradr=0xc;/* check for end of update cycle */
    d=*dataadr;
    do {
        *adradr=0xc;
    } while((*dataadr&0x10)==0);
    /* here if just completed update cycle */
    do {
        for(i=0;i<6;i++) {
           *adradr=adr[i];
           *dataadr=data[i];
        }
        *adradr=0xa;
        if((*dataadr&0x80)!=0) continue;/* update */
        *adradr=0xc;
    } while((*dataadr&0x10)!=0);
    /* here if written without encountering another update */
}

main(argc,argv)
int argc;
char *argv[];
{
    int i;
    char data[6];
    char string[40];
    int day,year,hour,min,sec;
    /* check validity of clock */
    *adradr=0xa;
    if((i=(*dataadr&0x7f))!=0x20)
    {
        printf("reg a is %d\n",i);
        *adradr=0xa;
        *dataadr=0x20;
        *adradr=0xd;
        *dataadr=0;
    }
    *adradr=0xb;
    if((i=*dataadr)!=0x7)
    {
        printf("reg b is %d\n",i);
        *adradr=0xb;
        *dataadr=0x7;
        *adradr=0xd;
        *dataadr=0;
    }
    *adradr=0xd;
    if(((i=*dataadr) != 0x80) && (argc < 3))
    {
        printf("reg d is %d\n",i);
        printf("CLOCK CHIP INVALID\n");
        printf("To validate clock chip execute:\n");
        printf("  clock dd-mmm-yy hh:mm:ss\n");
        exit(30);
    }
    *adradr=0xd;
    *dataadr=0x80; /* set clock ok bit */
    readclock(data);
    while((argc--)>1){
       if(strlen(argv[argc])==9&&argv[argc][2]=='-'&&argv[argc][6]=='-')
       {  /* handle date */
          sscanf(argv[argc],"%2d-%3s-%2d",&day,string,&year);
          if(day>0&&day<32) data[2]=day;
          else {
              printf("bad day of month\n");
              exit(30);
          }
          for(i=0;i<12;i++) {
              for(d=0;d<3;d++) {
                 if(tolower(string[d])!=tolower(month[i][d])) break;
                 else if(d==2) data[1]=i+1;
              }
              if(d==3) break;
          }
          if(i==12){
              printf("bad month\n");
              exit(30);
          }
          data[0]=year;
       }
       else if(strlen(argv[argc])>4&&argv[argc][2]==':') /* time */
       {  /* handle time */
          if(strlen(argv[argc])==8&&argv[argc][5]==':')
             sscanf(argv[argc],"%2d:%2d:%2d",&hour,&min,&sec);
          else {
             sscanf(argv[argc],"%2d:%2d",&hour,&min);
             sec=0;
          }
          if(hour>=0&&hour<24) data[3]=hour;
          else {
              printf("bad hour\n");
              exit(30);
          }
          if(min>=0 && min<60) data[4]=min;
          else {
              printf("bad minute\n");
              exit(30);
          }
          if(sec>=0 && sec<60) data[5]=sec;
          else {
              printf("bad second\n");
              exit(30);
          }
       }
       else /* syntax error */
       {
           printf("Incorrect arguements\n");
           exit(30);
       }
       writeclock(data);
    }
    
    sprintf(string,"date %2d-%3s-%2d %2d:%2d:%2d\n",data[2],month[data[1]-1],
       data[0],data[3],data[4],data[5]);
    for(i=0;string[i];i++) {
       if(string[i]==' ' && i!=4 && i!=14) string[i]='0';
    }
    if((!Execute(string,0,0))||(!Execute("date\n",0,0)))
       printf("\nDATE INVALID\n");
}


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

            4-20pf Var 
    +-----)|---------+
    |                |
   GND      ||       |
       +---||||------+---+----+                        5ea 1N4148
       |    || 32768Hz   |    |
       |                 /20M |                    5V---|<|-----|<|---+
       +---)|---GND      \    | 2 +---------+ 24                      |
       |   10pf          /    +---+         +----+--|<|----+----|<|---+
       |                 |      3 |         |  V |       G |          |
       +-------/\/\/-----+--------+ MC14    |  B +---)|--N |          /
               390k            17 | 6818    |  B |  1uf  D |          \ 560
                       DS---------+         |    |         +--+       /
                               14 | [C8]    |    +--|<|--+    |       |
                       AS---------+         |    |       |    |      [10]
         18 +-----+ 2          11 |         |    +-/\/\/-+    |      12v
 D7---------+     +---------------+         |      100k  |    |
         17 |74LS | 3          10 |         | 18         |    |
 D6---------+ 245 +---------------+         +------+-----+    |
         16 |     | 4           9 |         | 22   |       G  |
 D5---------+     +---------------+         +------+--)|---N  |
         15 |[B8] | 5           8 |         |        1uf   D  |
 D4---------+     +---------------+         |                 |
         14 |     | 6           7 |         | 20              |
 D3---------+     +---------------+         +----- GND        | +
         13 |     | 7           6 |         |             ---------
 D2---------+     +---------------+         |              -------   4 CELL
         12 |     | 8           5 |         |             ---------  NICAD
 D1---------+     +---------------+         |              -------
         11 |     | 9           4 |         |             ---------  5 VOLTS
 D0---------+     +---------------+         |              -------
            |     |               |         |                 |
        19  |     | 1          15 |         | 13              |
 SEL*------O|     +-------+-------+         |O-----------+   GND
            +-----+       |       +---------+            |
 BRW ---------------------+                              |
                                                 +-------)-------+
        74LS04 [A6]                              O       |       |
       3 |\  4 SEL 1                       12 +-----+ 9  |       |
 SEL*----| >O-------+                 GND-----+     +----+       |
         |/       2 +---                      |     |            |
 LDS----------------+    \  6  11 |\  10 AS 11|     | 8          |
                  4 |     |O------| >O--------|>    |O---+       |
 A1-----------------+    /        |/          +-----+    |       |
       1 |\  2    5 +---                         O       |       |
 BRW-----| >O-------+                            |       |       |
         |/                                     VBB      |       |
                   74LS20 [A7]                           |       |
                                               2/2 74HC  | [A8]  |
                 13                                 74   |       |
         5V---------+                                    O 4     |
                 12 +---                            2 +-----+ 5  |
 SEL----------------+    \  8   9 |\  8       GND-----+     +----+
                 10 |     |O--+---| >O----DS          |     |       NOTE:
 LDS----------------+    /    |   |/                3 |     | 6      chips at
       5 |\  6    9 +---      +-----------------------|>    |O-     A8 and C8
 A1------| >O-------+                                 +-----+       powered
         |/                                              O 1        from VBB
                                                         |          not from
                                                         +---[53]   5v sup
                                                             RES*


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

The clock is set by using "clock" just like you would use "date" to set the
regular Amiga clock.  When you first build the board, the clock may gain or
loose a few seconds a day.  You can correct this by adjusting the variable
capacitor in the clock circuit.  The best way to do this requires patience.
Note the amount of error in a known amount of time, say a day or a week.
Make an adjustment of perhaps a quarter turn on the capacitor (remember the
direction). Wait this amount of time again.  Note the change in the error.
Now you can correct the capacitor by the proportional amount.  If the error
is worse, the capacitor must be turned in the opposite direction from the
first attempt.  If the error is of the opposite sense, then the first
adjustment overshot.  If a quarter turn is worth a second a day, then to
correct a second a week will require a one twentyeighth turn.  Since such
delicate adjustments are hard to make, you may need several tries.  You can
quit when the clock is sufficiently accurate for your needs.  Ultimately,
the clock can be adjusted for about one second a month error.  This may be
more trouble than you wish to take, since correcting the time is a one line
command.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

The memory system was wirewrapped on a 4.5in by 8.5in board perforated on
.1in centers. This is a standard size available from several vendors. A
connector to fit the Amiga expansion connector is mounted to the board such
that the board will stand beside the Amiga extending from the rear up near
the mouse/joystick connectors. The board is slightly higher than the Amiga
but hasn't gotten in the way for me. The memory array (four rows of eight
chips) is at the top of the board. A fifth row contains the buffers for the
array. Next is the connector for the Amiga. Three rows below the connector
are used for timing logic and the clock. The chips all face the Amiga so
that the wire wrap pins of the chips and the connector face out for easy
testing. (I hope this isn't an issue for you, but I did a lot of it.)

The connector is spaced away from the board by placing a 1/2 inch wide
strip of plastic (made from the tubes that wire wrap sockets come in)
between the rows of pins.  This leaves just enough room on the pin on the
back side of the board for one wire to be wrapped on the pin.  This allows
the connector to reach into the Amiga and leave room for the chips between
the board and the side of the computer.

                                    TOP

     +-------+-------+-------+-------+-------+-------+-------+-------+
     |  H1   |  H2   |  H3   |  H4   |  H5   |  H6   |  H7   |  H8   |
     +-------+-------+-------+-------+-------+-------+-------+-------+
     |  G1   |  G2   |  G3   |  G4   |  G5   |  G6   |  G7   |  G8   |
     +-------+-------+-------+-------+-------+-------+-------+-------+
     |  F1   |  F2   |  F3   |  F4   |  F5   |  F6   |  F7   |  F8   |
     +-------+-------+-------+-------+-------+-------+-------+-------+
 F   |  E1   |  E2   |  E3   |  E4   |  E5   |  E6   |  E7   |  E8   |
 R   +-------+-------+-------+--+----+---+---+-------+-------+-------+ B
 O   |      D1       |    D3    |   D4   |    D5     |     D7        | A
 N   +---+-----------+----------+--------+-----------+---------------+ C
 T       |           C O N N E C T O R               |               | K
     +---+---+-------+-------+-------+-------+-------+      C8       |
     |  C1   |  C2   |  C3   |  C4   |  C5   |  C6   |               |
     +-------+-------+-------+-------+-------+-------+---------------+
     |  B1   |  B2   |  B3   |  B4   |  B5   |  B6   |         B8    |
     +-------+-------+-------+-------+-------+-------+-------+-------+
     |  A1   |  A2   |  A3   |  A4   |  A5   |  A6   |  A7   |  A8   |
     +-------+-------+-------+-------+-------+-------+-------+-------+

                                   BOTTOM

     View of board from wire wrap pin side. You are looking at the right
side of the Amiga if the board is installed. The chip locations are called
out in the schematic and parts list.

The connector is numbered like this:

        1.5.........................85   From same view as above.
        2...........................86

The schematic calls out pins on this connector like [nn]. If you look in the
hardware manual (preliminary) you may think the connector looks like:

        123.........................43
        ............................86

This is WRONG.

If you cannot find an 86 pin connector with .1in spacing (sometimes called a
43 pin dual row connector) you can cut down a longer connector. I easily
found 100 pin connectors. If you do this be careful when installing the board
that the connector is aligned with the cardedge in the Amiga. It is very
easy to have it slip to the side with one end missing. This will harm the
computer.

When looking at the chips from the back side (as viewed above) the pins are
like this:

        1  2  3  4  5  6  7  8


        16 15 14 13 12 11 10 9

For 16 pin chips. For other sizes of chip, the numbering goes clockwise as
shown.

All chip sockets, except the 24 pin socket for the MC146818, have a .1uf
capacitor connected between the corner pins 8 and 16 (or 7 and 14 or 10 and
20). There are two techniques that I find convenient. If the type of socket
and the type of capacitor permit, the nicest thing to do is to attach the
capacitor to the socket pins before the socket is pushed into the board. The
socket may permit the capacitor to fit into the cavity usually found between
the rows of pins. The wires will raise the socket only slightly off the
board. If this won't work because of the parts at hand, I usually solder the
capacitors on last, after all wirewrap connections are made. Any other
approach tends to make wirewrapping difficult because the capacitor is in
the way.

I would wrap the power and ground connections first. Make a grid of these
wires such that each ground pin is connected to its nearest neighbors in all
four directions. If your sockets won't accept four levels of wrap, connect
at least three ways so that as much of the grid structure as possible is
maintained. The memory array has many pins that are common to all 32 chips.
These connections are also best made with a grid like pattern. The idea is
to connect all the relevant pins with a minimum of inductance. Since, with
wire wrap, there is no other parameter under your control, redundant
connections are the way to achieve this.

The other connections can be made in any order you like. Minimizing total
wire lengths when connecting several pins is nice, but not strictly
necessary. I made some effort in this direction when I placed the parts and
wired them, but the layout is not optimal in this sense. I don't think it is
necessary to be too concerned with the wirewrapping "rules" for this board.
One thing to attempt to do is to keep wires on the same "level". If you have
four pins (for instance) you connect the first and second, then the third
and fourth, and finally the second and third. Doing things this way means
that when you make a mistake you only have to remove at most three wires to
correct it. You cannot unwrap a wire and re-use it, (if you do, the
connection will probably fail in a few months) so any misconnected wire
must be completely removed. This means any wire covering it must be removed.
Don't daisychain yourself into a situation where many wires must be removed
to correct an error.

There is a variable capacitor in the clock circuit.  This is used to adjust
the clock so that it keeps proper time.  The capacitor should be mounted so
that it can be adjusted with the board installed and running.  Since there
are many styles of capacitor, I cannot suggest any particular method.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

This document describes the operation and construction of a one megabyte
memory board with optional battery backed up clock for the Amiga. You can
also build a 512k memory by only populating one bank. I do not mention
elsewhere that the software needs to be modified to match the new limits if
you do this. 

The memory system consists of two banks of 256k words each. The banks are
selected by the row address strobe (RAS) which is qualified by an address
bit (A19) to select the bank. The upper and lower data strobes are used to
generate seperate column address strobes (CAS) for the upper and lower
bytes. Refresh is accomplished by activating the row address strobes for
both banks while supplying a refresh address. Refresh cycles occur, if
possible, when the memory is not being accessed (because some other resource
is being addressed) or when necessary by holding off the processor to force
time for the refresh cycle. All timing is derived from the 68000 clocks.
This allows a fully synchronous design so that there are no glitches in
timing possible. This also means that the processor must wait one clock
cycle when it accesses this memory. The processor clock is simply too slow
to go through the necessary states without the wait. If one eliminated the
wait the system would be 20% faster. This would require a delay line or an
asynchronous design. The cost of these alternatives is more than I was
willing to pay. Also, the design would be harder to duplicate because of the
more delicate timing.
The clock is a Motorola MC146818. It keeps track of the date and time
including daylight savings and leapyear. A nicad battery is charged by the
Amiga when it is powered up. This battery runs the clock when the Amiga is
off. As long as the Amiga is on 1% of the time, the clock will remain
accurate.

This memory board does not autoconfigure. This means that the Amiga doesn't
know about it until it is told. A program called AddMem is distributed on
the assembler or C disks. This program is needed to tell the Amiga that the
memory exists. I have not written a clone of this program. I have written a
memory test program to test the board. It is included in this release.

At this time, a number of programs, including Deluxe Paint, do not work
properly with external memory. I hope that as more Amigas get added memory
the suppliers of these programs will fix the problems. Mostly, graphics
objects cannot reside in external memory. If a graphics object is a program
constant, the program must be chip memory resident. There is no way to do
this within a language.  When a program allocates memory, it must specially
ask for chip memory if needed because the operating system will allocate
>from external memory if it can. If you want to use one of the programs that
does not work with external memory, simply do not use the AddMem command.
There is no need to remove the card. Amiga has released the ATOM program to
developers which is used to tell the loader that some hunks must be loaded
into chip memory. If you can get this program, it will fix the above
problems.

The hardware clock isn't used by the Amiga during normal operation since it
keeps its own internal clock. I have written a program to read the hardware
clock and set the system clock (this is more trouble than I wanted). This
program is also included in this release.

The easiest way to use these new resources is to modify your
s/startup-sequence file to include:

AddMem 400000 500000
Clock

 as added commands at the beginning. I also usually copy the entire system
disk to ram: and reassign all the logicals to the copy in ram:. The system
is very fast when running entirely out of ram.

I wirewrapped the memory since I expected to make changes. It took three
tries before the control circuit worked well. There were a number of pins
that were essentially undocumented and I had little choice but to try things
until they worked. Because this design has no support from Amiga, I cannot
guarantee that it works with your machine. On the other hand, I design
memories (and other things) for a living. I know what I'm doing. The design
is very forgiving of small timing changes (another reason to keep it slow)
and I do not expect anyone to have problems. I have no intention of
supplying a PC board. I don't mind if someone else takes on that project as
long as it is non-commercial. (If you are interested in a commercial design
let me know, I would do many things differently if it were a high quantity
commercial product. This design is bent in the direction of ease of
duplication with no special parts.)

There are four additional files I will mention here. The mechanical
description is in mem.mechanical. This includes the connector and board info
and the chip socket locations. Some comments on construction are also
included. The parts list is in mem.parts. The parts given will work.
Substitutions are possible, but at your own risk. The schematic is in
mem.schematic and clock.schematic (this section can be built at a later
time.) This is not the most beautiful method of drawing schematics,
but it allows this project to be electronically documented so it can reach a
lot of people without the 10th generation xerox problem. The schematic files
look best if printed at eight lines per inch.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

   GND [ 1][ 2][ 3][ 4][13][25][37][49][61][73][85]

   5V  [ 5][ 6]

       A20  1 +-------+ 15                       E  1 +-------+ 3
   [56]-------+       |O----                 [50]-----+>      +----
       A21  2 |       | 14                          2 |  1/2  | 4
   [58]-------+       |O----                 RFR -----+  74LS +----
       A22  3 |       | 13                            |  393  | 5
   [57]-------+       |O----         1/6              |       +---- RFD
              |       | 12          74LS04            |  [E2] | 6
              | 74LS  |O----                          |       +--+
              | 138   | 11          1 |\   2          +-------+  |
              |       |O---- ADR* ----| >O---- ADR     +---------+
            6 | [A1]  | 10            |/           +---+  +--------- 5V
       5V ----+       |O----                       |      O 4       
       A23  5 |       | 9            [B3]          |2 +-------+ 5
   [59]------O|       |O---- SEL*                  +--+ 1/2   +---- RFRQ
            4 |       | 7                             | 74LS  |
     GND ----O|       |O----                          | 74    |
              +-------+                         AS* 3 |       | 6
                                           [74]--+----+> [B4] |O----
         5                                       |    +-------+
  ADR------+                                     |        O 1
         4 +---                                  |  2/6   +-------- RFRAS*
  AS-------+    \  6                             |     74LS04
         2 |     |O---+                          |  5 |\  6
  RFC*-----+    /     |    1/3 74LS10            +----| >O---- AS
         1 +---       |                               |/
  PRCH*----+          | 3,4 +---
            74LS20    +-----+    \  6              13 |\  12
             [A2]         5 |     |O---- MRAS --------| >O---- MRAS*
        13            +-----+    /                    |/
  RFRQ-----+          |     +---
        12 +---       |                              [B3]
  ADR*-----+    \  8  |     [A4]
        10 |     |O---+                                     +---- 5V
  AS-------+    /                                           O 4
         9 +---                                       2 +-------+ 5
  RFC*-----+                                     MRAS---+ 1/2   +---- MUX
                                                        | 74LS  |
                                                        | 74    |
        11                                            3 |       | 6
  RFD------+---                                 CDAC*---+> [A3] |O---
        10 |    \  8    4 +-------+ 2                   +-------+
  MRAS*----+     |O-------+       +----- RFC*               O 1
         9 |    /         |       | 3                AS-----+
  HOLD*----+---           |       |O----
                        5 |       | 7                       +----5V
                 RFC* ----+ 74SL  +----- RFRAS*             O 10
                          | 175   | 6                12 +-------+ 10
                          |       |O---- RFRAS   MUX----+ 1/2   +---- CAST
                       12 | [A5]  | 10                  | 74LS  |
              RFRAS* -----+       +----- PRCH*          | 74    |
                          |       | 11           CDAC 11|       | 9
                          |       |O----         [15]+--+> [B4] |O---
                       13 |       | 15               |  +-------+
              CAST -------+       +----- HOLD        |      O 13
                        9 |       | 14               |      +----AS
              CDAC* ------+>      |O---- HOLD*       |
                          +-------+                  |  3 |\  4
                              O 1                    +----| >O----CDAC*
          1/4 74LS00          +----5V                     |/
        1 +---                                           [B3]
  ADR ----+    \  3
        2 |[B5] |O---- RCYC
  RFC* ---+    /
          +---

                  2/4 74125 [D4]
          2 |\ 3                              5 |\ 6
  HOLD* ----| >----[66] DTACK*      ADR*---+----| >------[18] XRDY
            |/O                            |    |/O
             1|                            |      | 4
              |                            +------+
              +--- ADR*
                           2/6 74LS04 [B3]
               11|\  10                          9 |\  8
  UDS* [72]------| >O------ UDS    LDS* [70]-------| >O------- LDS
                 |/                                |/
           3                                11
  CAST ------+---      2/3 74LS10   CAST ------+---
           4 |    \  6                      10 |    \ 
  UDS -------+[B1] |O----- UCAS*    LDS -------+[B1] |O----- LCAS*
           5 |    /                          9 |    /
  MCYC ------+---                   MCYC ------+---

                                            13           
           12,13 |\  11   10 +---        5V----+---
  A19 [54]---+---| >O--------+    \  8       2 |    \  12
             |   |/        9 |     |O----------+[A4] |O----- RAS1*
             |        RFR ---+    /          1 |    /
             |               +---      RAST ---+---
             |                                 
             |  3/4 74LS00 [B5]
             |                              13 
             |             4 +---        5V----+---
             +---------------+    \  6       2 |    \  12
                           5 |     |O----------+[B1] |O----- RAS0*
                      RFR----+    /          1 |    / 
                             +---      RAST ---+---   

         12,13|\  11                          10 +---
  MCYC*-------| >O-------- MCYC        MRAS* ----+    \  8
              |/                               9 |     |0---- RAST
                  4/4 74LS00 [B6]      RFRAS* ---+    /
                                                 +---
           1 +---
  RFRQ* -----+    \   3         4 +---
           2 |     |O-----+-------+    \  6
  RFRAS* ----+    /       |     5 |     |O------ RFR*
             +---         +-------+    /
                                  +---


          13  +-------+ 11
  RFR--------O|>      +-------- RA0
              | 1/2   | 10
              | 74LS  +-------- RA1
              | 393   | 9
              |       +-------- RA2
           12 | [B2]  | 8
       +------+       +---+---- RA3
       |      +-------+   |
      GND                 |
         +----------------+
         |
         | 1  +-------+ 3
         +---O|>      +-------- RA4
              | 1/2   | 4
              | 74LS  +-------- RA5
              | 393   | 5
              |       +-------- RA6
            2 | [C6]  | 6
       +------+       +---+---- RA7
       |      +-------+   |
      GND                 |
         +----------------+
         |
         |13  +-------+ 11
         +---O|>      +-------- RA8
              | 1/2   | 10
              | 74LS  +--------
              | 393   | 9
              |       +--------
           12 | [C6]  | 8
       +------+       +--------
       |      +-------+
      GND

   A10      6 +-------+ 7  
  [34]--------+       +------------- MA0
   A1       5 | 74LS  | 15
  [29]--------+ 153   |O----+
            4 |  or   | 1   |
  RA0 ---+----+ 74LS  |O----+
         |  3 | 253   |     |
         +----+       |    GND
   A11     10 | [C1]  | 9
  [36]--------+       +------------- MA1
   A2      11 |       |
  [27]--------+       |
           12 |       | 2
  RA1 ---+----+       +-------- RCYC
         | 13 |       | 14
         +----+       +-------- MUX*
              +-------+

   A12      6 +-------+ 7
  [38]--------+       +------------- MA2
   A3       5 | 74LS  | 15
  [26]--------+ 153   |O----+
            4 |  or   | 1   |
  RA2 ----+---+ 74LS  |O----+
          | 3 | 253   |     |
          +---+       |    GND
   A13     10 | [C2]  | 9
  [39]--------+       +------------- MA3
   A4      11 |       |
  [24]--------+       |
           12 |       | 2
  RA3 ---+----+       +-------- RCYC
         | 13 |       | 14
         +----+       +-------- MUX*
              +-------+

   A14      6 +-------+ 7
  [41]--------+       +------------- MA4
   A5       5 | 74LS  | 15
  [21]--------+ 153   |O----+
            4 |  or   | 1   |
  RA4 ---+----+ 74LS  |O----+
         |  3 | 253   |     |
         +----+       |    GND
   A15     10 | [C3]  | 9
  [43]--------+       +------------- MA5
   A6      11 |       |
  [23]--------+       |
           12 |       | 2
  RA5 ---+----+       +-------- RCYC
         | 13 |       | 14
         +----+       +-------- MUX*
              +-------+

   A16      6 +-------+ 7
  [45]--------+       +------------- MA6
   A7       5 | 74LS  | 15
  [28]--------+ 153   |O----+
            4 |  or   | 1   |
  RA6 ---+----+ 74LS  |O----+
         |  3 | 253   |     |
         +----+       |    GND
   A17     10 | [C4]  | 9
  [47]--------+       +------------- MA7
   A8      11 |       |
  [30]--------+       |
           12 |       | 2
  RA7 ---+----+       +-------- RCYC
         | 13 |       | 14
         +----+       +-------- MUX*
              +-------+

   A18      6 +-------+ 7
  [52]--------+       +------------- MA8
   A9       5 | 74LS  | 15
  [32]--------+ 153   |O----+
            4 |  or   | 1   |
  RA8 ---+----+ 74LS  |O----+
         |  3 | 253   |     |
         +----+       |    GND
           10 | [C5]  | 9
     +--------+       +------------- MA9
     |     11 |       |
     +--------+       |
     |     12 |       | 2
     +--------+       +-------- RCYC
     |     13 |       | 14
     +--------+       +-------- MUX*
     |        +-------+
    GND

            2 +-------+ 18
  MA0 --------+       +-------- p5 all memory chips
           17 | 74HC  | 3
  MA1 --------+ 244   +-------- p7
            4 |  or   | 16
  MA2 --------+ Am    +-------- p6
           15 | 2966  | 5
  MA3 --------+       +-------- p12
            6 |       | 14
  MA4 --------+       +-------- p11
           13 |       | 7
  MA5 --------+       +-------- p10
            8 | [D3]  | 12
  MA6 --------+       +-------- p13
           11 |       | 9
  MA7 --------+       +-------- p9
              |       | 1
              |       |O---+
              |       | 19 |
              |       |O---+
              +-------+    |
                          GND
            2 +-------+ 18
 MA8 ---------+       +-------- p1 of all memory chips
           17 | 74HC  | 3
 UCAS --------+ 244   +-------- p15 of rows 1-4
            4 |  or   | 16
 LCAS --------+ Am    +-------- p15 of rows 5-8
           15 | 2966  | 5
 RAS0 --------+       +-------- p4 of rows 1,3,5,7
            6 |       | 14
 RAS1 --------+       +-------- p4 of rows 2,4,6,8
 R/W       13 |       | 7
 [68]---------+       +-------- BRW and p3 of all memory chips
            8 | [D5]  | 12
         +----+       +---
         | 11 |       | 9
         +----+       +---
         |    |       | 1
        GND   |       |O----+
              |       | 19  |
              |       |O----+
              +-------+     |
                           GND

 D15       18 +-------+ 2
 [63]---------+       +-------- p2,p14 of E1,E2
 D14       17 | 74LS  | 3 
 [65]---------+ 245   +-------- p2,p14 of F1,F2
 D13       16 |       | 4
 [67]---------+       +-------- p2,p14 of G1,G2
 D12       15 |       | 5
 [69]---------+       +-------- p2,p14 of H1,H2
 D11       14 |       | 6
 [71]---------+       +-------- p2,p14 of E3,E4
 D10       13 |       | 7
 [76]---------+       +-------- p2,p14 of F3,F4
 D9        12 |       | 8
 [78]---------+       +-------- p2,p14 of G3,G4
 D8        11 |       | 9
 [80]---------+       +-------- p2,p14 of H3,H4
              | [D1]  |
          19  |       | 1
 ADR* -------O|       +-------- BRW
              +-------+

 D7        18 +-------+ 2
 [82]---------+       +-------- p2,p14 of E5,E6
 D6        17 |       | 3
 [84]---------+ 74LS  +-------- p2,p14 of F5,F6
 D5        16 | 245   | 4
 [86]---------+       +-------- p2,p14 of G5,G6
 D4        15 |       | 5
 [83]---------+       +-------- p2,p14 of H5,H6
 D3        14 |       | 6
 [81]---------+       +-------- p2,p14 of E7,E8
 D2        13 |       | 7
 [79]---------+       +-------- p2,p14 of F7,F8
 D1        12 | [D7]  | 8
 [77]---------+       +-------- p2,p14 of G7,G8 
 D0        11 |       | 9
 [75]---------+       +-------- p2,p14 of H7,H8
              |       |
          19  |       | 1
 ADR* -------O|       +-------- BRW
              +-------+


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

main(argc,argv)
    long argc;
    char *argv[];
{
    unsigned short *adr;
    int i,j,k,n;
    adr=0x0400000;
    for(i=0;i<0x010000;i++)
    {
        for(j=0x000000;j<0x080000;j++)
        {
            adr[j]=j+i+j>>12;
        }
        for(j=0x000000;j<0x080000;j++)
        {
           k=adr[j];
           n=(j+i+j>>12)&0x0ffff;
           if((n!=k)&&(argc>1))
         printf("wrote %4x read %4x diff %4x at addr %6x\n",n,k,n^k,&adr[j]);
        }
    }
}


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

louie@umd5.UUCP (Louis Mamakos) (06/11/86)

Parts list for one megabyte memory board with clock

Chips

2  74LS00    B5, B6
2  74LS04    A6, B3
2  74LS10    A4, B1
2  74LS20    A2, A7
2  74LS74    A3, B4
1  74HC74    A8
1  74125     D4
1  74LS138   A1
5  74LS153   C1, C2, C3, C4, C5   (May be 74LS253)
1  74LS175   A5
2  74LS393   B2, C6
2  74HC244   D3, D5               (May be Am2966, NOT 74LS244)
3  74LS245   B8, D1, D7
1  MC146818  C8
32 Rams      E1 thru H8           (May be any 256k by 1 dynamic ram at 200ns
                                   or faster access time.  I have tried
                                   several brands, both CMOS and NMOS, with
                                   no problems.)

Capacitors

48 0.1 uf ceramic cap 12v or higher (bypass caps at each chip, not on schem.
2  1.0 uf ceramic or tantalum, 12v or higher
1  10 pf NP0 ceramic or mica
1  4-20 pf variable (substitute any cap that covers 7-15 pf range)

Diodes

5  1N4148, 1N914 or equivalent

Resistors   all 1/4 watt 5% film

1  560 ohm
1  100k
1  390k
1  22M      if not available substitute 10M

Crystal

32768 Hz watch crystal

Battery

4 Nicad cells with holder.  Either A or C size is ok.

Sockets

14 14 pin wire wrap sockets. I substituted 16 pin for a price break.
39 16 pin wire wrap sockets.
5  20 pin wire wrap sockets.
1  24 pin .6 in spacing wire wrap socket.


-- 
Louis A. Mamakos WA3YMH   University of Maryland, Computer Science Center
 Internet: louie@trantor.umd.edu
 UUCP: {seismo!umcp-cs, ihnp4!rlgvax}!cvl!umd5!louie

kellym@shark.UUCP (Kelly McArthur) (06/13/86)

In article <1021@umd5.UUCP> louie@trantor.umd.edu (Louis Mamakos) writes:
>
>
>
>                  2/4 74125 [D4]
>          2 |\ 3                              5 |\ 6
>  HOLD* ----| >----[66] DTACK*      ADR*---+----| >------[18] XRDY
>            |/O                            |    |/O
>             1|                            |      | 4
>              |                            +------+
>              +--- ADR*

To quote from document "Designing Hardware for the Amiga 
Expansion Architecture":

   2.2.1  Read or Write Cycle with Amiga as Master

   Since the Amiga bus master is a 68000, the bus cycle is a 68000
   cycle. However, the responding slave does not pull DTACK*. Our
   internal circuitry will pull DTACK* unless the slave pulls XRDY
   low.

Elsewhere, in the document "INTERFACING TO THE 68K CONNECTOR 
ON THE AMIGA", it states:

   2.2 Bus Timing

   ...Two control inputs, VPA* and DTACK* are driven by logic on 
   the Amiga and should not be driven by your circuitry.

Since in the above schematic, DTACK* is shown as being driven
by a '125 under some condition it appears likely that this
could result in a tri-state contention over DTACK*. This is 
not good. A few changes to the XRDY* logic would eliminate
the need for that driver all together.

                                      Kelly McArthur
                                   ...tektronix!shark!kellym