Date: 1998-04-15 21:10:29

Hallo Andre,

I want to work out the idea to use a 74LS612 in combination with the 6510.
The TI-databook is not very clear so I want to put everything (I think) I
know about the 612 on paper so you (or anybody else) can correct it. Later
we can use the resulting script as extra info for people visiting our



The 612 is an IC that enables you to expand your system with 8 extra
addresslines. Notify the fact that I use the word "system" and NOT
processor. The processor won't be aware of those extra addresslines. In
case of the 6502/6510 the processor still only can address 64 KB.

How do these 8 extra addresslines fit in the system? 

If you own a C128 then this is  easy to understand. The C128 has 128 KB of
RAM, 4 KB of I/O and a lot more ROM. A part is accessed by means of the
PLA, another part is accessed by means of the MMU (Memory Management Unit).
The MMU can be manipulated by its own onboard registers by means of the
Basic-command "BANK". You can choose from 16 banks which is equivalent to
four addresslines. But these extra lines are not visible to the user and
lead straight away to some onboard multiplexers which on the end produce
the needed ChipSelect-signals.
The C64 has an MMU as well. But in the case of the C64 this MMU is the
combination of a part of the onboard I/O port of the 6510 and the PLA. In
this particular situation you can consider those I/O lines as extra

The 74LS612 is a kind of MMU but WITHOUT the multiplexers. These have to be
added by the user. Another difference is that the behaviour of the MMU is
preprogrammed in the factory and cannot be changed. But with the 612 the
user can program its behaviour any time. Speaking in MMU-terms this would
mean that we could program the MMU in such away that BANK 0 behaves like
BANK 3, BANK 3 and 1 as 1 and BANK 2 as 1 as well.
The 612 has 16 registers of 12 bits each. The normal procedure is to
address these registers by four addresslines. Four bits of the output are
used to replace the original four addresslines, the other eight bits to
form the extra eight addresslines. 
Reconfiguring the original addresslines gives you the possebility to re-
arange the internal configuration if the hardware. By example in a PET you
could swap the the range $7000/$7FFF and $F000/$FFFF to test a new Kernal-
The extra eight lines can be used to add extra memory (RAM, ROM) or I/O in
any way you want. A very nice example is to connect a complete 1541 to your
own system by means of a small interface which replaces the original 6502.
Now you can reconfigure your own system in such a way that it sees the
range $0000/$BFFF of the 1541 as its own and its former own area
$6000/$9FFF as area $C000/$FFFF. In this way you comfortably can test a new
Kernal for the 1541.


   RS2   -+  1               40 +-   +5V       
          |                     |
   MA3   -+  2               39 +-   MA2
          |                     |
   RS3   -+  3               38 +-   RS1
          |                     |
   CS    -+  4               37 +-   MA1
          |                     |
 STROBE  -+  5               36 +-   RS0
          |                     |
   R/W   -+  6               35 +-   MA0
          |                     |
   D0    -+  7               34 +-   D11
          |                     |
   D1    -+  8               33 +-   D10
          |                     |
   D2    -+  9               32 +-   D9
          |                     |
   D3    -+ 10               31 +-   D8
          |      74LS612        |
   D4    -+ 11               30 +-   D7
          |                     |
   D5    -+ 12               29 +-   D6
          |                     |
   MM    -+ 13               28 +-   NC
          |                     |
   MO0   -+ 14               27 +-   MO11
          |                     |
   MO1   -+ 15               26 +-   MO10
          |                     |
   MO2   -+ 16               25 +-   MO9
          |                     |
   MO3   -+ 17               24 +-   MO8
          |                     |
   MO4   -+ 18               23 +-   MO7
          |                     |
   MO5   -+ 19               22 +-   MO6
          |                     |
   GND   -+ 20               21 +-   ME
          |                     |

Pin functions:

D0 thru D11       Connection to the databus when programming the registers
RS0 thru RS3      Connection to the addressbus when programming the
                  registers, normally A0 thru A3
R/W               Read, active (H) and Write, active (L)
STROBE            input to enter data into choosen register, active (L)
CS                ChipSelect, active (L)
MA0 thru MA3      connection to the addressbus during normal operation
MO0 thru MO11     The generated addresslines
MM                Map Mode input. When (H), MO0/MO3 reflect MA0/MA3,
                  MO4/MO11 are (L). When (L), MO0/MO11 reflect the 12 bits
                  of the choosen register.
ME                When (H), MO0/MO11 are tristate else active.
NC                Not connected.

74LS610, 74LS611 and 74LS613.

The 610 is an 612 plus an extra 12 bits latch. With the 612 MO0/MO11 always
react on the behaviour of MA0/MA3 and MM. With the 610 you can freeze the
output as long as you want. This is archieved with an extra inputline at
pin 28, C (= Clock). A (H) on this input will the 610 behave like a 612, a
(L) freezes the configuration.
The 611 and 613 are the Open Collector versions of the 610 and 613.

The 12 bits registers of the 74LS612.

The intention is to use the 612 in combination with a 6502 based Commodore
and as you know these are all 8-bitters. This means we either have to
disregard 4 bits or use a trick to be able to use all 12 bits. In the first
case we are still able to address up to 1 MB of memory or I/O. If you still
want have those extra 4 bits then a simple 74LS373 will do. Of course
you'll need a decoder for this 373 but as you need one for the 612 as well,
it won't be that much difficult to combine them into one decoder. 

Connecting the 612 to a 6502.

Connecting a 612 to a 6502 can be split up in two parts anyway: the memory-
part and the I/O-part. 


If you only want to reconfigure your system within its own 64 KB, then you
only have to "cut" the addresslines A12 thru A15 and to place the 612 in
the created gap. Practically this probably means you replace the processor
by a small circuitboard with onboard the original processor, the 612 and
some logic to perform I/O-operations with the 612.
If you want to use the extra addresslines as well, you have to take care of
the fact that the original hardware does not respond to addresses above
$0FFFF. The original does not know the extra addresslines so to any decoder
the address $0C000 is equal to $1C000, $2C000 and so on. IMHO the solution
for this problem is to disable Clock2 towards the original system. As far
as I know all decoders and/or I/O-ICs in any Commodore use this signal to
decide to become active or not.


The decision to be made is where to place the decoder for the 612 itself:
behind or before the 612. If you place it before the 612 it always will be
accessible but the disadvantage is that it can get it the way when there is
a need to remap certain areas to the area the 612 occupies. If you place it
behind the 612 and you make a mistake with programming the 612, it is
possible you cannot acces the 612 at all anymore meaning you are stuck with
the momentary configuration unless you reset your system. 

Practical use.

Andre Fachat built a 4 MHz 65C02 based computer, <A HREF=''>the CS/A65</A>,
using the 74LS610. Some of the above info and ideas are based on his work.



1)    Why do you use a 610 as you don't have any specific use for the
      onboard latch? (Answer: because I just happened to have one ???)

2)    Why do you use IC16 to disconnect the 610 from the bus instead of
      using the 610s own capability to do so?

3)    You placed the decoder for the 612 before the 612 meaning you always
      can access the 612 on the same address, $E800, whatever the
      configuration is. On the other hand you say you use your CS/A65 to
      test new ROMs for the 1541, meaning you need the whole range from
      $C000 thru $FFFF. This is an conflicting situation. 
      I noticed you have a inputline to disable IOSEL. Activating this line
      when you address the area $C000/$FFFF when testing the 1541 ROM means
      you are stuck to this configuration until a reset. 
      How do you handle this particular situation?

4)    Why do you use 245s instead of the more power friendly 541?

At the moment I'm working out an idea of combining a 65816 and a 74LS610. 

Groetjes, Ruud

Archive generated by hypermail 2.1.1.