427 lines
24 KiB
Plaintext
427 lines
24 KiB
Plaintext
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
The Designing and Building of an 8-Bit Computer:
|
||
|
A Personal Story
|
||
|
|
||
|
Written by Mark Balch
|
||
|
|
||
|
|
||
|
Copyright 1990 by Mark Balch,
|
||
|
All Rights Reserved.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
You may freely copy and distribute this text file provided that:
|
||
|
it is not sold for profit nor used in a commercial environment; that it
|
||
|
is distributed in its absolutely original, unmodified form; and that it
|
||
|
bears the original copyright notice seen above.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
These past few weeks have been very exciting for me because I have
|
||
|
been working with and programming my first home-brew 8-bit computer.
|
||
|
This article is not, by far, the last word on building computers but is
|
||
|
intended to serve as an eye-opener for those interested in the inner
|
||
|
workings of computers. I am not going to explain every facet about 8-
|
||
|
bit computers because such a project could easily fill several
|
||
|
reference volumes and would require the authorship of a true
|
||
|
professional. I am simply going to describe my own little creation:
|
||
|
the preparation leading to its design and construction, the actual
|
||
|
processes of designing and building my computer, the long process of
|
||
|
finding and correcting my initial hardware problems ("bugs") and my
|
||
|
current, on-going exploration of the computer's capabilities from the
|
||
|
programming side of things.
|
||
|
|
||
|
I first started researching the low level intricacies of 8-bit
|
||
|
computers about three years ago by reading Steve Ciarcia's monthly
|
||
|
column in BYTE magazine called "The Circuit Cellar." (I had first seen
|
||
|
this column as early as 1985 when I glanced through old issues of Byte
|
||
|
out of curiosity. Unfortunately, Steve no longer writes for Byte
|
||
|
magazine due to what are, in my opinion, questionable attitudes of the
|
||
|
management. But, lucky for his readers, Steve founded an excellent
|
||
|
magazine along with fellow electrical engineers devoted to hardware
|
||
|
"hacking" called Circuit Cellar INK. In addition to this, beginners
|
||
|
like myself and industry pro's can communicate with each other by
|
||
|
calling the CCI BBS which will be mentioned later in more detail.) In
|
||
|
this monthly column, Steve would present working projects along with
|
||
|
schematics and thorough explanations (schematic diagrams are the
|
||
|
detailed plans or blue-prints for an electronic circuit). These
|
||
|
projects included 8-bit multi-purpose control computers called micro-
|
||
|
controllers, a "smart" printer spooler, a logic IC (Integrated Circuit)
|
||
|
tester and many other interesting topics. His last three articles even
|
||
|
detailed a multi-processing super computer! I never built any of these
|
||
|
projects, but each month they taught me more and more about computer
|
||
|
design and gave me ideas for my own projects.
|
||
|
|
||
|
At around the same time, I purchased a book dealing with the
|
||
|
Motorola 6800 microprocessor family which explained, in great detail,
|
||
|
the workings of 8-bit microprocessor systems. I also sent letters to
|
||
|
semiconductor companies such as Motorola, Rockwell and Texas
|
||
|
Instruments asking for information on their microprocessor, memory and
|
||
|
peripheral products. These companies were wonderful with the myriad of
|
||
|
free reference manuals that they sent me. Over a one year period of
|
||
|
time, I probably mailed more than 20 letters, mostly to Motorola and a
|
||
|
good deal to Texas Instruments, and in reply received at least 2
|
||
|
bookshelves worth of valuable information in the form of their product
|
||
|
fliers, reference manuals and application notes (application notes are
|
||
|
usually sample designs incorporating a certain product for a specific
|
||
|
task). These companies were so obliging because the more engineers
|
||
|
that use their semiconductor products, the more chips they sell and the
|
||
|
more money they make. Nevertheless, all of this free information
|
||
|
supplied me with weeks worth of reading material from which I learned a
|
||
|
great deal.
|
||
|
|
||
|
About a year later, I decided to design a robot based on an
|
||
|
article that I found in a 1986 issue of Byte. I carefully drew the
|
||
|
schematic diagrams for my simple circuit by hand on three sheets of
|
||
|
graph paper. The microprocessor that I chose for the robot was the
|
||
|
6808 which I had learned about from that book. Anyway, this was my
|
||
|
first attempt and to say "things got messed up" is an understatement.
|
||
|
I ordered parts, some expensive pieces of equipment to "burn" EPROM
|
||
|
chips (more on this later) and realized that I didn't know how to
|
||
|
begin. Worse yet, the science fair was about a month away. The
|
||
|
details are very cloudy in my head for some reason, probably because I
|
||
|
had no idea about what I was doing. The project was scrapped and I
|
||
|
think I continued to read more about electronics.
|
||
|
|
||
|
The year after (two years ago) I decided to go ahead and build a
|
||
|
normal computer board, no wheels and no robot. I was able to get my
|
||
|
parents to buy me an expensive schematic drawing program called Schema
|
||
|
for my IBM clone computer to enable me to draw better diagrams. I
|
||
|
designed the computer around the 6808 microprocessor (MPU) again and
|
||
|
ordered some parts. But wouldn't ya know it...my social life got in
|
||
|
the way when I joined my school's production of the musical Cabaret. I
|
||
|
didn't start building the project till February 1st and with the
|
||
|
science fair a month away things went hay wire. I cut corners to build
|
||
|
it quickly and made a mess for the second year in a row. Thinking back
|
||
|
on that project, the design was a pretty good one with only a few
|
||
|
flaws. Had I given myself enough time I might have gotten it to work,
|
||
|
but who knows.
|
||
|
|
||
|
Okay. I had enough. This was crazy. I made up my mind to build
|
||
|
a computer, and really build one this time. Summer vacation was over
|
||
|
and school had started. (We're back in September of 1989 in case you
|
||
|
lost track of my excellent time-keeping!) I went back to my computer
|
||
|
and spent some time with Schema. What a terrific program: expensive
|
||
|
but definitely worth ever penny to an electrical engineer. I came up
|
||
|
with a straight forward design for an 8-bit computer. It was again
|
||
|
built around the 1 MHz 6808 MPU and was to have an expansion bus
|
||
|
capable of addressing 32K of off-board input/output or memory, 2K or
|
||
|
RAM, 8K of EPROM, an LCD, a serial port capable of operation up to
|
||
|
19.2K baud, 8 LEDs, 4 push buttons and an 8 position DIP switch.
|
||
|
|
||
|
Now let me do some explaining in case some of the above terms
|
||
|
aren't too clear to you. The 6808 that I used has an operating or
|
||
|
clock frequency of 1 megahertz (MHz). All computers have a certain
|
||
|
clock frequency which dictates how fast instructions are fetched from
|
||
|
memory and executed. Everything that the MPU does is synchronized by a
|
||
|
constant pulse train called the clock. A 1 megahertz clock speed means
|
||
|
that the MPU receives 1 million clock cycles per second (mega meaning
|
||
|
million and hertz meaning a cycle of repetition. You have probably
|
||
|
seen clock speeds of 10, 12, 16, 20 MHz and higher in computer
|
||
|
catalogs. Yes, a 30 MHz 80386 MPU receives 30 million clock pulses per
|
||
|
second!). Each instruction that the MPU performs is broken down into
|
||
|
parts and each part is executed in one clock cycle. Different
|
||
|
instructions have different execution times. On the 6808, the average
|
||
|
instruction execution time is about 4 or 5 clock cycles, ranging from 2
|
||
|
cycles all the way up to 12 cycles. The faster the clock frequency,
|
||
|
the faster an MPU can execute instructions. Why didn't I use a 20 MHz
|
||
|
clock frequency? Well first of all, the highest possible operating
|
||
|
frequency of the 6800 family is 2 MHz. Second, the faster your MPU
|
||
|
operates, the more expensive and harder to build your computer gets.
|
||
|
At 20 MHz, you need very fast memory which ain't cheap, and you have to
|
||
|
be careful about other technical problems arising from radio
|
||
|
interference in the computer's signal lines.
|
||
|
|
||
|
The 2K of RAM means 2 kilobytes of Random Access Memory. Thinking
|
||
|
back on things, I should have designed 8K of RAM...oh well. Random
|
||
|
Access Memory is the term given to memory that can be written to and
|
||
|
read from. RAM is known as volatile memory because it cannot retain
|
||
|
its information when power is removed from the chip. Here's something
|
||
|
that most people don't realize about memory quantities: the 2 kilobyte
|
||
|
number is a round number. The RAM chip actually has 2,048 bytes of RAM
|
||
|
but 2,000 is selected because it is easier to keep track of. If you're
|
||
|
wondering why the RAM chip is made to hold 2,048 bytes (2,048 isn't
|
||
|
exactly a round number), it's because computers operate on the binary,
|
||
|
or base 2, number system at their lowest level. All numbers in
|
||
|
computers are powers of 2. This is because a signal wire can either be
|
||
|
ON or OFF. So you have two possible numbers: 1 and 0. 2,048 is 2
|
||
|
raised to the 11th power. This means that 11 address signal lines
|
||
|
(numbers) are needed to access all of the 2K of RAM.
|
||
|
|
||
|
The 8K of EPROM means 8 kilobytes of Erasable Programmable Read
|
||
|
Only Memory. This memory is non-volatile, meaning that it retains its
|
||
|
information even while the power is off. Under normal operation, this
|
||
|
memory cannot be written to, so it is called Read Only Memory. But as
|
||
|
the name implies, under certain conditions the chip can be programmed
|
||
|
and also erased. A special device known as an EPROM programmer is
|
||
|
needed to "burn" the information into the chip with high voltage
|
||
|
electrical pulses. Another device known as an EPROM eraser is needed
|
||
|
to erase the information in the chip before it can be re-programmed.
|
||
|
This erasure process is accomplished by a high powered ultra-violet
|
||
|
light source. Now here's the question: why use an EPROM if you have
|
||
|
RAM? Well, the MPU by itself is a dumb piece of silicon wafer.
|
||
|
Without a program it won't do a thing so you must always have some
|
||
|
program immediately available for it when the computer is powered on.
|
||
|
The EPROM retains its data almost indefinitely, so even after power has
|
||
|
been turned off, it can supply the MPU with instructions as soon as the
|
||
|
computer is turned on. Okay great, but why do you have to make it
|
||
|
erasable? Once you have a perfect program developed, you don't have to
|
||
|
make an erasable PROM chip, but during the initial stages of
|
||
|
development, you must be able to correct your mistakes. If the EPROM
|
||
|
was not erasable, an engineer would waste dozens or even hundreds of
|
||
|
PROM chips before he got his program or design correct. And believe
|
||
|
me, no matter how perfect you think your program is the first time,
|
||
|
it's bound to be buggy. As you gain experience, the number of bugs of
|
||
|
course decreases, but they are always popping up when you least expect
|
||
|
it.
|
||
|
|
||
|
The LCD is an acronym for Liquid Crystal Display. You've seen
|
||
|
them lots of times on calculators, watches and maybe some machines.
|
||
|
They can be used to display letters, numbers and graphics. The one
|
||
|
that I used is a 16 character display. They're not cheap though.
|
||
|
Buying them from retailers can set you back about $30 for the one I
|
||
|
used and up to $80 for a 40 character 2 line display. The best place
|
||
|
to buy them is from odd-lot clearing houses who buy over-stocked items
|
||
|
from manufacturers and sell them at great prices. I got three of them
|
||
|
for $30, a pretty good deal.
|
||
|
|
||
|
The serial port is actually composed of two chips, a connector and
|
||
|
some assorted electronic components. The first chip is known as either
|
||
|
a UART (Universal Asynchronus Receiver/Transmitter) or an ACIA
|
||
|
(Asynchronus Communications Interface Adapter). I prefer UART because
|
||
|
it has only two syllables! This chip is the heart of the serial port.
|
||
|
It receives data from the MPU and converts it into a serial format and
|
||
|
then sends it to the second chip. In reverse, it takes serial data
|
||
|
from the other chip and converts it into 8-bit bytes for use by the
|
||
|
MPU. I used the Rockwell 6551 which is a very easy to use but complete
|
||
|
chip. Many engineers had recommended it to me. Motorola makes the
|
||
|
6850 which is also a UART, but I don't like it. It requires an
|
||
|
external clock source and is not as flexible. Heck, they made a great
|
||
|
MPU, so who am I to complain!?! The second chip is known as a level
|
||
|
converter. Standard logic levels are from 0 to +5 volts. This is
|
||
|
known as TTL logic (TTL means Transistor-Transistor Logic. They are
|
||
|
the low level basic logic circuits from which all other circuits are
|
||
|
built). But the RS-232 serial communications standard uses -12 to +12
|
||
|
volt logic levels. Somehow, the computer industry got stuck with this
|
||
|
"great" idea, so we all have to design around it. The level converter
|
||
|
simply converts the RS-232 signals to TTL logic signals and vice-versa.
|
||
|
The chip I used is the MAX232 which is a great product from Maxim
|
||
|
Semiconductor. Unlike the standard chips used for signal conversion,
|
||
|
the 1488 and 1489 which require external +12 and -12 voltage sources,
|
||
|
the MAX232 converts +5V to +10V and -10V without any external hardware.
|
||
|
This minimizes circuit complexity, but increases the cost a little.
|
||
|
|
||
|
If you've forgotten by now, I am explaining all of the parts of my
|
||
|
computer design! Last but certainly not least is some input/output
|
||
|
(I/O) circuitry that I incorporated into my design to allow status
|
||
|
signaling to the user through 8 LEDs and user input through a keyboard
|
||
|
consisting of 4 buttons and 8 switches. By the way, LED is an acronym
|
||
|
for Light Emitting Diode. These guys are available in several colors
|
||
|
and they do what their name implies: light up! All of this
|
||
|
miscellaneous I/O hardware is tied together for easy communication with
|
||
|
the MPU by the 6821 PIA. This is another Motorola product designed to
|
||
|
complement its 6800 family of MPUs. PIA stands for Peripheral
|
||
|
Interface Adapter. It has 2 8 bit I/O ports and 4 controllable signal
|
||
|
lines. I connected the 8 LEDs to one port, the DIP switch to the other
|
||
|
and the four buttons to the signal lines. Once I figured out how to
|
||
|
work it, the PIA performed very nicely and allowed very flexible
|
||
|
control of my I/O devices.
|
||
|
|
||
|
I now take you back to the story of building the beast. We were
|
||
|
up to the point where I designed the computer with Schema. Okay.
|
||
|
During the design process, I communicated with engineers on the CCI BBS
|
||
|
and asked little questions here and there. They offered much help and
|
||
|
I soon had three nice looking pages of schematics printed out. I was
|
||
|
ready to build the computer, so I ordered all of the parts from mail-
|
||
|
order houses in silicon valley. The technique that I used is called
|
||
|
wire wrapping. There are two basic methods for prototyping circuits
|
||
|
(prototyping being the first time you are building the circuit) along
|
||
|
with some others: soldering and wire wrapping. Some people like
|
||
|
soldering. Steve Ciarcia solders all of his projects, but as someone
|
||
|
said on the CCI BBS, Steve was destined to be a brain surgeon. The
|
||
|
underside of his boards really look like art. Most of us are not so
|
||
|
talented and soldering can become a great mess. Melting through
|
||
|
insulation, twisting, turning, burning! Eech. For my previous project
|
||
|
(the one that I built, but didn't work) I had called the CCI BBS and
|
||
|
asked about prototyping methods. The general consensus was to wire
|
||
|
wrap. So, I bought some tools and went ahead with it. The wire
|
||
|
wrapping part of my previous project was certainly a success. The
|
||
|
process is very easy to learn.
|
||
|
|
||
|
This year, I ordered some more wire and assorted materials
|
||
|
necessary to build the project. It was a hefty bill, but I paid some
|
||
|
and my parents paid some. I started building it, I think, in October
|
||
|
or November. In any case, I finished in a few weeks and was ready for
|
||
|
the initial test by December. Everything looked great, but I was
|
||
|
scared as hell to try the thing out. I soon got up the nerve to
|
||
|
program an EPROM with a simple program and plugged it into its socket.
|
||
|
I turned the power on with a rapid heart beat and relaxed. The damn
|
||
|
thing didn't even cough! It just sat there with the power on. No
|
||
|
smoking, no explosions, no LEDs going on, no words on the LCD. I was
|
||
|
disappointed, but did I really expect it to work? No, I really looked
|
||
|
at it as something that I couldn't possibly get to work. I mean...me
|
||
|
build a computer? Come on, a computer is a computer, not some lego set
|
||
|
or something like that. I gave it a few more tries and still nothing
|
||
|
happened. I checked my design and everything seemed okay. I checked
|
||
|
the wiring and everything seemed okay.
|
||
|
|
||
|
Okay. I decided to check the power rails. I took out my multi-
|
||
|
meter which I bought at Radio Shack on sale for $9.95. A multi-meter
|
||
|
is an instrument that can measure several electrical characteristics of
|
||
|
wires. The most basic multi-meter (what I had) can measure voltage and
|
||
|
resistance. I selected voltage mode and put the probes to my power
|
||
|
rails. Hey! I found something. The voltage read almost 0 which meant
|
||
|
that either my power supply was not functioning or there was a short.
|
||
|
I checked the power supply and it was fine, so there must be a short...
|
||
|
but where? I called the CCI BBS once again and asked for some help.
|
||
|
About two weeks later, I found the short with a technique that an
|
||
|
engineer had explained to me. Okay. I'm ready. Again I plugged in
|
||
|
the EPROM and again nothing happened. After a few more desperate
|
||
|
tries, I gave up. It was now the beginning of January. I decided to
|
||
|
stop work until February.
|
||
|
|
||
|
About two weeks later, I logged onto the CCI BBS as I always did
|
||
|
weekly and found a message waiting for me. It was from an engineer in
|
||
|
silicon valley who had started working with 8-bit MPUs when he too was
|
||
|
a sophomore in high school. I was then a Junior, but that's beside the
|
||
|
point. He gave me encouragement and some hints on how to find my
|
||
|
short. I wrote back thanking him for the encouragement but telling him
|
||
|
that I found my short and that the computer still didn't work. I was
|
||
|
confident of my design because of those I had seen in Steve's column
|
||
|
and in the new magazine Circuit Cellar INK. He soon replied with some
|
||
|
trouble-shooting techniques. The first one was a simple test to
|
||
|
determine if the MPU was actually executing instructions. It consisted
|
||
|
of a single jump command that keep jumping back to itself. I tried it
|
||
|
and it worked. This was amazing. For the first time, I actually had
|
||
|
some assurance that my design had some life in it. Knowing this, I
|
||
|
decided to scrap the fancy demo program I wrote and go for a simple LED
|
||
|
flasher. I wrote the program and burned it into an EPROM. But it
|
||
|
didn't work. This was very disappointing, but I didn't give up this
|
||
|
time, because the first test had worked.
|
||
|
|
||
|
After a few hours of playing around, I found the problem! Three
|
||
|
address lines were wired backwards to the address decoder chip. Time
|
||
|
for some background: most 8 bit microprocessors can address 64
|
||
|
kilobytes. This actually equals 65,536 bytes because there are 16
|
||
|
address lines. Since the computer does not consist of one big 64K RAM
|
||
|
or EPROM chip but rather several smaller (smaller in terms of the
|
||
|
number of bytes they occupy in the address space) peripherals, this
|
||
|
large address space must be divided. A common denominator is 8 8K
|
||
|
chunks of memory. The top three address lines (A15 through A13) are
|
||
|
connected to an address decoder which determines which memory block is
|
||
|
currently active according to these three address lines. Because we're
|
||
|
working with the binary number system, three binary digits can
|
||
|
represent 8 combinations. The decoder chip, in this case a 74LS138
|
||
|
decoder chip, activates one of eight enable signals depending on the
|
||
|
content of the three address signals that it receives. Now, how does
|
||
|
this represent a problem to me if the three lines are wired backwards?
|
||
|
Well let's take the example that I had. My LED flasher program needed
|
||
|
to address the 6821 PIA so that it could turn the LEDs on and off.
|
||
|
This PIA is connected to the second 8K memory block enable line coming
|
||
|
from the 74LS138 decoder. To select this second memory block, the MPU
|
||
|
had to place the digits 001 on the lines A15-A13. But if the three
|
||
|
address lines were wired backwards, the decoder would see 100 instead
|
||
|
of 001 and would select the wrong memory chunk. I discovered this
|
||
|
problem by monitoring the decoder's memory enable lines with a logic
|
||
|
probe. The logic probe simply tells me whether the signal line is high
|
||
|
(1) or low (0). For some strange reason, the second memory block was
|
||
|
never being accessed, but the fourth was. After some thought, I
|
||
|
realized that the binary number representation for 4 was the exact
|
||
|
opposite for that of 2. I ran upstairs to get my reference book and
|
||
|
sure enough, the decoder was getting the signals in reverse order.
|
||
|
|
||
|
I went back upstairs and fixed the problem. One very big
|
||
|
advantage of wire wrapping is that mistakes can easily be fixed. All I
|
||
|
did was unwrap the wire from the three signal lines and I rewrapped
|
||
|
them. It took about 5 minutes to do. I plugged the EPROM back into
|
||
|
its socket and poof! My LEDs were flashing! True, my complicated
|
||
|
computer didn't look like much more than a christmas tree, but I knew
|
||
|
that it was working. The LEDs were not flashing on their own: the MPU
|
||
|
was telling them to flash. Now this was a victory!
|
||
|
|
||
|
Once I got to this point, things started falling into place.
|
||
|
Within a week and a half I got everything working perfectly. Sure,
|
||
|
there were troubles but I got them resolved. The only modification I
|
||
|
still have to make is an enable circuit for my expansion bus. I forgot
|
||
|
to design one in and because of that the bus cannot be used. But
|
||
|
that's okay for now because I am not yet building peripheral cards for
|
||
|
my computer. I am now working on a terminal program that will enable
|
||
|
me to download programs to the computer's RAM from my communications
|
||
|
program on my IBM clone. It should be working within a week.
|
||
|
|
||
|
Some miscellaneous problems that I encountered and fixed include:
|
||
|
two signals on the serial port were wired backwards, one wire on my LCD
|
||
|
was broken, the expansion bus mystery mentioned above, some pull-down
|
||
|
resistors that should have originally been pull-up resistors and
|
||
|
connecting the LEDs to the other I/O port instead of the one it was
|
||
|
originally connected to. It was like unravelling a mystery plot,
|
||
|
almost every day after I got the LEDs flashing, something new fell into
|
||
|
place and started working. From here on in, its just a matter of
|
||
|
software. The hardware is all done (whew!) and now I just have to deal
|
||
|
with it from the programmer's point of view.
|
||
|
|
||
|
The programming isn't bad, but now and then you get a little bug
|
||
|
that drives you crazy until its found and eliminated. The entire
|
||
|
project was and continues to be a great learning experience and usually
|
||
|
alot of fun. Maybe one day, you'll see my name on a super computer?!
|
||
|
Who knows. I got the baby purring and from here the sky's the limit.
|
||
|
My next project is going to be a faster computer with a monitor, full
|
||
|
keyboard and disk drives. I probably won't get it right on the first
|
||
|
power up, but now that I know my computer works, every other problem
|
||
|
will be a minor inconvenience!
|
||
|
|
||
|
X-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-X
|
||
|
|
||
|
Another file downloaded from: NIRVANAnet(tm)
|
||
|
|
||
|
& the Temple of the Screaming Electron Jeff Hunter 510-935-5845
|
||
|
Rat Head Ratsnatcher 510-524-3649
|
||
|
Burn This Flag Zardoz 408-363-9766
|
||
|
realitycheck Poindexter Fortran 415-567-7043
|
||
|
Lies Unlimited Mick Freen 415-583-4102
|
||
|
|
||
|
Specializing in conversations, obscure information, high explosives,
|
||
|
arcane knowledge, political extremism, diversive sexuality,
|
||
|
insane speculation, and wild rumours. ALL-TEXT BBS SYSTEMS.
|
||
|
|
||
|
Full access for first-time callers. We don't want to know who you are,
|
||
|
where you live, or what your phone number is. We are not Big Brother.
|
||
|
|
||
|
"Raw Data for Raw Nerves"
|
||
|
|
||
|
X-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-X
|