Atom-in-PC Hardware

Contents:

  1. Hardware discription

  2. 6847 Video emulation

  3. Circuit diagram

  4. Printed Circuit Board

  5. GAL logics

pictures/atominpc.jpg


Hardware discription


The Atom-in-PC is a "simple" processor board with an R6502 or compatible microprocessor (e.g. R65C02 or 65802). There is 96 kB of RAM and 16 kB of ROM on board. 16 Kb of the RAM memory can be used as shadow ROM for the 16 KB Machine Operating System ROM, not for speed issues but you can write your own Machine Operating System. Furthermore, 40 KB of RAM is mapped in the address space #0000-#9FFF. For the utility ROM address space #A000-#AFFF are eight banks of 4 KB RAM each available. Together with appropriate software, the Atom runs with eigth utility ROMs simultaniously.

Talking about Machine Operating Systems: the original Atom MOSROM is modified for use with this R6502 board. But you can also run BBC Basic. The BBC Basic ROM is already modified but I'm still writing a good Machine Operating System ROM for the best BBC Basic compatibility. Be aware: this is not an BBC emulator! Read more about it in the software section.

As in the original Atom, the address space #B000-#BFFF is reserved for I/O purposes. I used the address space #B000-#B97F for on-board I/O such as the 6522 VIA, a latch for controlling NMI (see video emulation and utility RAM select and Video Write Address Latches.

All user I/O (keyboard, display, printer, disk drives, mouse, joystick etc) is handled by the PC. So the Atom has to communicate with that PC. You can read all about the Atom-in-PC Terminal program in the software section. On the hardware side, the Atom-in-PC communicates by the 6522 VIA on the Atom side and an 8255 PPI on the PC ISA bus. This 8255 PPI is the only component which is directly attached to the PC ISA bus. So, if your PC can access this device, your PC is Atom compatible. No interrupts and no DMA channels are used. Only straigt I/O ports on one of these addresses: 0x300, 0x304, 0x308, 0x30C, 0x310, 0x314, 0x318 or 0x31C. No plug-and-play shit, just put a jumper on the board and it works. (BTW: the decoding of these addresses are implemented in a GAL. So if you need another address range, no problem: just modify your addressing algorithm!)


6847 Video Emulation


In order to emulate the Motorola 6847 Video Graphic chip I use two latches which catch the address on the address bus when a program writes to the video address space (#8000-#9FFF). The Chip Select signal for the video RAM chip is also used for generating an NMI. You can disable this NMI by writing a "0" bit to a latch. This latch controls write protect, Operating RAM/ROM select, NMI enable and bank select for the utility RAM on #Axxx. Read more about it in the Dutch manual.
So, if a program writes to the video memory, a NMI is generated. The NMI service routine reads the address from two latches (high and low order byte) and sends it to the terminal program which runs on the PC. Because the NMI service routine knows the address, it reads the data written from the video memory and sends it to the terminal program. The address and data are the only input needed to display it on a CGA screen. It's not the fastest way of emulating the Atom graphics but it works for all modes and it's fast enough to play Snapper.


Circuit Diagram


These are the schematic diagrams for the Atom-in-PC board. They are build as four seperate sheets. Each sheet is about 200 kB in size.


Printed Circuit Board


This is the most critical part if you start building your own Atom-in-PC board. You have to download the design, make a good hardcopy of it and make a printed circuit board. Let's take a look on the design: (click on it for a more detailed picture)
pictures/silk_s.gif

pictures/sold_s.gif

pictures/comp_s.gif

You can download the PCB design in AutoCAD 2.0 DXF format or Epson 132 column PRN format. In the latter, just put a new ribbon in your printer and type copy .prn lpt1 where is one of the files in the zipfile.

The original design was made with smArtwork. If you're having problems with printing the PCB design, please contact me. If I'm in a good mood I'll send you the original files and maybe a program to draw the design. But it's an copyrighted program so I won't publish it here. It seems you can import the smArtwork files in the Layo PCB design program. But I have no experience with Layo, so I can't help you with that.


GAL Logics


On the Atom-in-PC board there are three Gate Array Logic devices:


The PC Address decoder GAL is used for selecting the 8255 PPI on the Atom-in-PC board. In this design it decodes eight address spaces of 4 bytes each in the address range 0x300-0x31F. Of cource, you are free to change the algorithm if you need to use another address. You can start the terminal program with an address parameter, so the software is ready for your change!

PC ADRES DECODER-DESIGN GAL16V8A
DATE 08/03/93
BY: R.LEURS
CHIP DECODERP GAL16V8A
NC A2 A3 A4 A5 A6 A7 A8 A9 GND 
AEN CS300 CS304 CS308 CS30C CS310 CS314 CS318 CS31C VCC
EQUATIONS
/CS300 = /AEN*A9*A8*/A7*/A6*/A5*/A4*/A3*/A2
/CS304 = /AEN*A9*A8*/A7*/A6*/A5*/A4*/A3*A2
/CS308 = /AEN*A9*A8*/A7*/A6*/A5*/A4*A3*/A2
/CS30C = /AEN*A9*A8*/A7*/A6*/A5*/A4*A3*A2
/CS310 = /AEN*A9*A8*/A7*/A6*/A5*A4*/A3*/A2
/CS314 = /AEN*A9*A8*/A7*/A6*/A5*A4*/A3*A2
/CS318 = /AEN*A9*A8*/A7*/A6*/A5*A4*A3*/A2
/CS31C = /AEN*A9*A8*/A7*/A6*/A5*A4*A3*A2

The second GAL takes care of most of the address decoding within the R6502 memory space. Nice feature (not a bug!): if you pull down pin 9 to 0 volt all on-board memory and I/O devices are disabled. So you can replace all memory and I/O by external circuits without modification of the Atom-in-PC board.

ATOM ADRES DECODER - DESIGN 16V8A
DATE 09/03/93
BY: R.LEURS
CHIP DECODERA_V2 GAL16V8A
A15 A14 A13 A12 RW FI2 WP OSRAM ENABLE GND NC1 CS_IO FI2OUT RWOUT
NWDS CS_PROG CS_UTIL CS_VIDEO CS_ROM VCC
@UES RL09034a
EQUATIONS
 FI2OUT = FI2
/RWOUT = /RW
/NWDS = FI2*/RW
/CS_IO = A15*/A14*A13*A12*ENABLE
/CS_UTIL = A15*/A14*A13*/A12*RW*ENABLE
 + A15*/A14*A13*/A12*/RW*/WP*ENABLE
 CS_PROG = A15+/A15*/A14*/A13*A12*WP*/RW+/ENABLE
/CS_VIDEO = A15*/A14*/A13*ENABLE
 + A15*A14*OSRAM*RW*ENABLE
 + A15*A14*/WP*/RW*ENABLE
/CS_ROM = A15*A14*/OSRAM*RW*ENABLE

The last GAL device takes care of selecting an internal I/O device and generating a NMI signal to the processor if there is a video memory write-cycle going on.

ATOM VIDEOKAART-DESIGN GAL16V8A
DATE 14/1/1995
BY: R.LEURS
CHIP VIDEO GAL16V8A
CS NMI_EN RW O2 A0 A1 A13 A14 A15 GND
IOSEL VIASEL LATSEL DIR NC NRDS LATCH CS_ADL CS_ADH VCC
; IOSEL = SELECTIE I/O GEBIED (DECODER GAL PIN 12)
; VIASEL = SELECTIE VIA (74HCT138 PIN 15)
; LATSEL = SELECTIE LATCH (74HCT138 PIN 14)
; CS = SELECTIE VIDEOGAL (74HCT138 PIN 13)
; DIR = RICHTING DATATRANSPORT (74HCT245 PIN 1)
EQUATIONS
/LATCH = A15 * /A14 * /A13 * /RW * O2 * NMI_EN * IOSEL *
 VIASEL * LATSEL
/CS_ADL = RW * /A1 * /A0 * /CS
/CS_ADH = RW * /A1 * A0 * /CS
/NRDS = RW * O2
 DIR = /RW

If you have your own GAL assembler software you can modify these designs as you like. There is no need to modify the Atom address decoder GAL and the Video & I/O controller GAL. A long time ago, I downloaded PALASM from the AMD website. Maybe it's still available there. In the download section of the Atom-in-PC Resource Site there is a file named gals.zip with the sources en binary files available.


As I write this page I realize there is much more to say about the hardware but the most important things are mentioned. Take a look at the Dutch manual if you have any questions.


Last update: december 12, 1999