God måndagkväll,
tänkte det var dags att diskutera lite praktikaliteter igen och höra om
nån har några bra tips :-)
Först och främst de grundläggande byggstenarna jag bygger med:
http://www.ludd.ltu.se/~ragge/vtc/drawings/basic-blocks.html
Borde vara hyfsat korrekta värden för att snurra i 200kHz på de flesta
komponenter.
Sen så har jag hållit på och ritat blockscheman över Nova-CPUn och nu
tror jag att det börjar vara nåt som kan fungera. Inte helt olikt DGs
från den tiden:
http://www.ludd.ltu.se/~ragge/vtc/drawings/Blockschema-150314.jpg
Jag har också ritat alla ingående delar förutom carry-logiken och
statemaskinen för exekveringen, det väntar bara på att bli renskrivet i
elektronisk form.
Vad som görs för varje instruktion är dock klart. En add kommer till
exempel att ta upp 6 klockpulser.
Den har 8 register: 4 vanliga + PC + AR (arithmetic) + IR (instruktion)
+ MB (memory buffer). Alla utom PC är 16 bitar breda.
Det finns 3 MUXar: SX (6 input), D (5 input) och MA (2 input + CF driver).
ALUn kan i stort sett bara utföra en ADD, men man kan invertera
SX-ingången och får därigenom också SUB med vänner. AND får man på köpet.
Men: nu kommer det jag stör mej mest på: Det går en oherrans massa
rör. De saker jag beskrev ovan är 742 stycken, fördelade på:
- 231 ECC91
- 463 EH90 (!)
- 32 ECC88
- 16 EAA91
Värst är åtgången av heptoder. Det är främst MUXarna som slukar såna
(jag har open-anode i MUXen), så har man 6 ingångar * 16 bit blir det 96
stycken.
Här skulle jag behöva tips på hur man kan göra för att få till MUXar som
inte behöver såna mängder för att fungera... :-)
-- Ragge
Hejhopp,
jag har ritat färdigt stabbade nätagg för 150V, 75V och -100V nu.
Dessutom simulerat dom för att veta att det blev bra :-)
Ritningar:
http://www.ludd.ltu.se/~ragge/vtc/drawings/VTC1-power-stab-150V.jpghttp://www.ludd.ltu.se/~ragge/vtc/drawings/VTC1-power-stab-minus-100V.jpghttp://www.ludd.ltu.se/~ragge/vtc/drawings/VTC1-power-stab-75V.jpg
Jag tänkte använda isolertrafosar, går att får tag på utan problem till
mycket lågt pris, därav låga inspänningen.
Det som är zenerdioder är egentligen spänningsstabbar, 150C2 och 85A2
som jag har ett gäng av.
150V-delen har serieregulatorer typ 6080, jag hittade ett par såna när
jag grävde i förrådet. Dom har väldigt låg inre resistans vilket är bra.
Den delen består då av 4*UY1N + 3*6080 + EF80 + 85A2.
-100V använder en PL519 som shuntregulator. Det var enklare än
serieregulator när man har plus-sidan kopplad till jord och dessutom
behövs att det går en del ström den vägen för att undvika att trafosarna
blir likströmsmagnetiserade.
Den delen består då av 3*AZ4 + PL519 + 150C2.
75V kommer att användas rätt lite, det är för skärmgallret till
gate-rören. Där har jag ett till PL519 som serieregulator den här
gången, dessutom så behövs -100V som referens så där tänkte jag ta
spänningen från -100-delen. Blir det inte tillräckligt bra får man
använda en 108C1 eller liknande istället.
Den delen består då av 3*AZ4 + PL519 + EF80 + 85A2.
Man kan dessutom seriekoppla EF80 och PL519 och mata dom direkt med
nätspänning, så slipper man nån trafo för den glödspänningen. UY1N likaså.
6080 och AZ4 måste man dock fixa spänningsmatningen för.
Jag tänkte göra dom här som var sin modul, så att man kan bygga ut det
efter hand, typ 19-tums 2U höga saker. Det är nästa steg, rita och
tillverka :-)
-- Ragge
Ja det är alldeles för sällan det skrivs nåt här, så här kommer lite
bilder på ett annat datorprojekt jag hittade på som omväxling från den
stora datorn. Jag ville få nånting byggt som fungerade, så jag svängde
ihop en liten mikrodator med en 6502-processor, lite RAM och EEPROM, och
ett par serieinterface:
http://www.update.uu.se/~bjarni/temp/6502-dator/
Brum heter den. Den har 32K RAM, 8K EEPROM, två RS-232-interface, och en
behändig kontrollpanel som jag använde för att bootstrappa
programmerandet. Som det är nu har kontrollpanelen bara funktionalitet
för att läsa och skriva i minnet, men det finns lite förberett för
instruktionsstegning och lite andra mindre funktioner. EEPROMet kan
skrivskyddas med en jumper och skyddet kan även slås på och av med en
särskild signal på bussen som jag tänkte koppla till en knapp på panelen.
Serieinterfacet använder sig av två stycken 6402-UARTar, vilka jag valde
för att de har alla kontroll- och statussignaler utdragna till egna
pinnar istället för register man måste pilla med för att konfigurera
gränssnittet, vilket gör att jag har kunnat designa det så att portarna
kommer upp automatiskt förkonfigurerade för 9600 8N1 efter
strömtillslag, vilket är en angenäm bekvämlighet.
Varje port har fyra skrivregister [data, handskakning, baudrate,
kontroll] och fyra läsregister [data, handskakning, status, reset].
Reset görs alltså med en läsning, för att det var bekvämt att
implementera i hårdvaran och det fanns ett ledigt läsregister.
Handskakningen är bara två utgående och två ingående GPIO-signaler, som
man egentligen kan göra vad man vill med men som kan användas till
RS-232-handskakning om man behöver. I och med att de är helt
mjukvarustyrda kan man göra både gammaldags assymmetrisk handskakning
och modern symmetrisk handskakning. Nivåkonverterarna är inte
installerade än, så just nu är det bara dataledningarna som funkar, men
det är tillräckligt för att prata med både en terminal och en
terminalväxel, så jag kan programmera datorn över nät från en
Linuxmaskin. :)
Kontrollregistret styr antal data- och stoppbittar samt paritet på/av,
udda/jämn. Statusregistret meddelar data mottagna, overrun, paritetsfel,
framingfel, samt utgående databuffert tom och utgående överföring
färdig. Framingfelsbitten på den ena porten har jag också kopplat till
NMI-ledningen på bussen, så man kan ovillkorligt interrupta processorn
genom att skicka ett break från terminalen. I NMI-hanteraren har jag ett
filöverföringsprogram för att uppdatera firmwaret.
Andra interrupts är planerade men inte implementerade än. Jag var för
sugen på att börja skriva mjukvara. :)
Chassit är nån botten med ram för framsidan som låg i min skothög hemma,
och sidoplåten är utklippt ur sidan av ett gammalt trasig
Tektronix-oscilloskop. Nätagget som sitter i på bilden gick sönder
nästan direkt, så nu är det en liten väggvårta istället. Den får jag nog
byta ut när det kommer lite mer saker i lådan.
Det tomma kortet i botten är alltså en systembuss utan kontakter
monterade. Det enda kortet hittills är device 0, som är serieinterfejset
(inte med i bilderna, som jag tog innan jag byggt det, utom sista bilden
som var mitt första test av seriekortet). Längst in, i plan med
bussmoderkortet, sitter själva datorkortet, som är kanske 10x10cm och
rätt fullproppat, med processor, RAM, ROM, adressavkodning, samt en
massa logik som har att göra med kontrollpanelen.
Mina såna där roadrunner-remsor tog slut när jag hade byggt
processorkortet, så för serieportskortet ritade jag en modell och lät en
kompis skriva ut lite nya på 3D-skrivare. De funkar hyfsat, men går
sönder lite för lätt. Ska prata med honom om ifall det går att göra nåt
åt det för nästa omgång remsor.
Nu funderar jag på vad som ska bli nästa instickskort att bygga. Nån
sorts lagring kanske, eller grafikkort, eller ljudkort, eller en massa
GPIO, vilket jag skulle ha nytta av hemma. Ethernet är lockande också.
Angående ditt nätagg Ragge så har jag inga kommentarer. Det är lite
utanför mitt kunskapsområde. Men jag bidrar med hurrarop och hoppas att
du får nånting byggt snart! Och 200kHz tycker jag är helt tillräckligt!
Jag har förresten designat en hyfsad instruktionsuppsättning för min
rördator, men inte testat den. Får ta och skriva en emulator och en
assembler och prova att skriva lite program och se hur användbar den är,
och hur kompakt koden blir. Kompakt kod är nog den viktigaste egenskapen
jag vill ha, med den minnesstorlek jag har tänkt.
Har sugnat igen på att bygga på rördatorn, så det kanske kommer ett brev
om det om inte alltför länge. :)
Bjarni