Projektując swojego dino-85 bardzo szybko spotkało mnie zagadnienie zbudowania dekodera adresowego,
który po pierwsze podzielił by dostępną przestrzeń adresową na ROM i RAM, tak po połowie najlepiej,
po drugie zapewniłby podział przestrzeniu I/O procesora 8085 na kilka jakby segmentów, na różnego rodzaju peryferia.
Jakie sygnały są aktywne podczas dostępu do pamięci, a jakie do I/O - to wynika bezpośrednio ze specyfikacji procesora, trzeba tylko to wszystko ubrać w jakąś logikę i dekoder gotowy.
Do wyboru miałam wykorzystanie garści układów cyfrowych typu 74138, 74139 etc z ewentualnym dodatkiem bramek luzem albo układ programowalny. Zależało mi jednak na tym, aby płytka była niezbyt skomplikowana, zestaw przenikających się magistral adresowych i danych już i tak gwarantował mi sporo atrakcji. Stanęło zatem na układzie GAL.
Przygotowanie pliku źródłowego dla kompilatora eqn2jed to dwa zagadnienia, trzeba:
* `wyobrazić sobie dekoder` na płytce i to, jakie sygnały wyboru mają być na poszczególnych pinach
* pracowicie napisać równania logiczne warunkujące aktywność kolejnych wyjść dekodera
Aby łatwiej się dalej opowiadało, posłużę się schematem dino-85, dekoder mieszka w prawym, górnym rogu
http://bienata.waw.pl/dino85/cpu-board-sch.jpg (jako link, bo forum nie chce takich dużych grafik)
Specyfika procesora 8085 jest taka, że chęć wykonania operacji na pamięci lub porcie I/O sygnalizuje on wyjściem IO/M, które w stanie H oznacza dostęp do portów a w L dostęp do pamięci. Druga przydatna cecha procesora jest taka, że adresując porty I/O procesor powiela stan młodszych linii adresowych A7..A0 na starszych A15..A8. To jest mega ułatwienie, bo chcąc dostać się ścieżką do przykładowo bitu A1 równie dobrze możemy zapiąć się na bit A9.
Podział dostępnej pamięci na pół linią adresową A15 nie wymaga jakiegoś wielkiego komentarza poza stwierdzeniem, że ROM jest w zakresie 0000-7FFF, a RAM pokrywa 8000-FFFF
Z portami I/O, no wtedy to ja miała rozmach (i planów co do dino-85 całą masę) zatem
przestrzeń z portami została podzielona na sześć banków, zgodnie z tabelką poniżej:
Kod: Zaznacz cały
bity adresu baza nazwa zastosowanie
101xxxxx A0h /CS2 uniwersalne iocsA0
100xxxxx 80h /CS2 uniwersalne iocs80
011xxxxx 60h /CS2 uniwersalne iocs60
010xxxxx 40h /CS2 uniwersalne iocs40
001xxxxx 20h /CS2 pio np. 8255
000xxxxx 00h /CS1 komunikacja
Dodatkowo do dekodera wprowadzone są tak na wszelki wypadek sygnały /RD i /WR procesora, bo a nuż widelec. Na podobnej zasadzie dwa wolne piny wejściowe opatrzyłam zworkami (jumperami) i są one dostępne dla równań logicznych jako sygnały J1 oraz J2. Takie rozwiązanie, o ile zajdzie potrzeba umożliwi mi dodatkowe oddziaływanie na pracę dekodera adresowego przy pomocy zworkowej konfiguracji na płytce.
Plik z równaniami oraz słownomuzycznym komentarzem poniżej.
Kod: Zaznacz cały
chip dino85 gal16v8
{
sygna│ IO_/M
stan H - dostŕp do IO, na A8...A15 jest to samo co na A0...A7
stan L - dostŕp do MEM, adresy A0...A14, A15 wybiera ROM lub RAM
dla IO mamy 6 zestawˇw portˇw
101xxxxx A0h - iocsA0
100xxxxx 80h - iocs80
011xxxxx 60h - iocs60
010xxxxx 40h - iocs40
001xxxxx 20h - pio
000xxxxx 00h - komunikacja
}
{ przypisania sygna│ˇw do pinˇw uk│adu GAL }
J1 = 2 { na przysz│e pomys│y }
J2 = 3 { na przysz│e pomys│y }
A15 = 4 { RAM lub ROM }
A13 = 5 { to┐same z A5 }
A14 = 6 { to┐same z A6 }
RD = 7 { na przysz│e pomys│y}
WR = 8 { na przysz│e pomys│y}
IOM = 9 { MEM lub IO }
CS3 = 12 { wybˇr zestawu IO }
CS2 = 13
CS1 = 14
CS4 = 15
CS5 = 16
CS6 = 17
ROM = 19 { selekcja pamiŕci }
RAM = 18
equations
{
dla IOM = L wybieramy pamiŕc
dla A15 = L bŕdzie ROM 0000...7FFF
dla A15 = H bŕdzie RAM 8000...FFFF
}
/RAM = A15 & /IOM
/ROM = /A15 & /IOM
{
dla IOM = H wybieramy IO, na szynie addr. A15...A8 = A7..A0,
zatem korzystamy z bitˇw A12...A15, bo tak jest │atwiej ťcie┐ki poprowadziŠ
}
/CS1 = /A15 & /A14 & /A13 & IOM { 00h }
/CS2 = /A15 & /A14 & A13 & IOM { 20h }
/CS3 = /A15 & A14 & /A13 & IOM { 40h }
/CS4 = /A15 & A14 & A13 & IOM { 60h }
/CS5 = A15 & /A14 & /A13 & IOM { 80h }
/CS6 = A15 & /A14 & A13 & IOM { A0h }
{ koniec }
Po przepuszczeniu przez kompilator eqn2jed otrzymujemy plik *.jed, taki zbiorek podajemy programatorowi układów logicznych celem zaprogramowania kostki.
Plik *.log zawiera 'pinout' naszego własnego układu scalonego oraz informacje o tym ile zasobów układu skonsumowało nasze rozwiązanie.
Kod: Zaznacz cały
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Document file for dino85.eqn
Device: 16V8
$LABELS 20 nc J1 J2 A15 A13 A14 RD WR IOM GND nc CS3 CS2 CS1 CS4 CS5 CS6 RAM
ROM VCC
Pin Label Type
--- ----- ----
2 J1 unused
3 J2 unused
4 A15 com input
5 A13 com input
6 A14 com input
7 RD unused
8 WR unused
9 IOM com input
12 CS3 neg,com output
13 CS2 neg,com output
14 CS1 neg,com output
15 CS4 neg,com output
16 CS5 neg,com output
17 CS6 neg,com output
18 RAM neg,com output
19 ROM neg,com output
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Device Utilization:
No of dedicated inputs used : 4/10 (40.0%)
No of dedicated outputs used : 2/2 (100.0%)
No of feedbacks used as dedicated outputs : 6/6 (100.0%)
------------------------------------------
Pin Label Terms Usage
------------------------------------------
19 ROM 1/8 (12.5%)
18 RAM 1/8 (12.5%)
17 CS6 1/8 (12.5%)
16 CS5 1/8 (12.5%)
15 CS4 1/8 (12.5%)
14 CS1 1/8 (12.5%)
13 CS2 1/8 (12.5%)
12 CS3 1/8 (12.5%)
------------------------------------------
Total 8/64 (12.5%)
------------------------------------------
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Chip diagram (DIP)
._____ _____.
| \__/ |
| 1 20 | VCC
J1 | 2 19 | ROM
J2 | 3 18 | RAM
A15 | 4 17 | CS6
A13 | 5 16 | CS5
A14 | 6 15 | CS4
RD | 7 14 | CS1
WR | 8 13 | CS2
IOM | 9 12 | CS3
GND | 10 11 |
|______________|
Na podobnej zasadzie zbudowałam lokalny dekoder adresowy pracujący w module komunikacyjnym dino-85.
Tam dla odmiany wykorzystane są do obliczeń sygnały sterujące /WR i /RD ponieważ oprócz UART modułek zawierał też proste ośmiobitowe wejście i wyjście zrealizowane na buforze szyny 74LS541 i ośmiokrotnym rejestrze D typu 74LS574. Równania wspomnianego dekodera są takie:
Kod: Zaznacz cały
chip dinocom gal16v8
{ wejťcia }
A3 = 2
A2 = 3
A1 = 4
A0 = 5
RD = 6
WR = 7
CS = 8 { g│ˇwny /CS modu│u czyli /CS1 z dino, dekodowane tylko I/O }
{ wyjťcia }
UART = 12
POUT = 13
PIN = 14
equations
/UART = /CS & /A3 & /A2 & /A1 { uart pod adresem xxxx0000 i xxxx0001 }
POUT = /CS & /A3 & /A2 & A1 & /A0 & /WR { zatrzask wyj xxxx0010 do zapisu }
/PIN = /CS & /A3 & /A2 & A1 & /A0 & /RD { bufor wej xxxx0010 do odczytu }
A tak wygląda pinout układu:
Kod: Zaznacz cały
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Document file for dinocom.eqn
Device: 16V8
$LABELS 20 nc A3 A2 A1 A0 RD WR CS nc GND nc UART POUT PIN nc nc nc nc nc VCC
Pin Label Type
--- ----- ----
2 A3 com input
3 A2 com input
4 A1 com input
5 A0 com input
6 RD com input
7 WR com input
8 CS com input
12 UART neg,com output
13 POUT pos,com output
14 PIN neg,com output
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Device Utilization:
No of dedicated inputs used : 7/10 (70.0%)
No of dedicated outputs used : 2/2 (100.0%)
No of feedbacks used as dedicated outputs : 1/6 (16.7%)
------------------------------------------
Pin Label Terms Usage
------------------------------------------
14 PIN 1/8 (12.5%)
13 POUT 1/8 (12.5%)
12 UART 1/8 (12.5%)
------------------------------------------
Total 3/64 (4.7%)
------------------------------------------
EQN2JED - Boolean Equations to JEDEC file assembler (Version V003)
Copyright (R) National Semiconductor Corporation 1990,1991
Chip diagram (DIP)
._____ _____.
| \__/ |
| 1 20 | VCC
A3 | 2 19 |
A2 | 3 18 |
A1 | 4 17 |
A0 | 5 16 |
RD | 6 15 |
WR | 7 14 | PIN
CS | 8 13 | POUT
| 9 12 | UART
GND | 10 11 |
|______________|
W podsumowaniu - wprawdzie komputerek stracił odrobinę na klimatyczności, ale konstrukcja sporo się uprościła a co najważniejsze jest ona modyfikowalna, wystarczy przeprogramować układy innymi równaniami. No i cenowo odpowiadają one garści adekwatnej drobnicy w TTL.
Trochę do poczytania o programiku eqn2jed jest w załączonych pdf i w sumie to jedyne co mam pod ręką.
Rozpracowywałam to na zasadzie rozpoznania bojem i rozkminiania przykładowych źródełek z sieci, no i jakoś poszło.