Sida 1 av 2

Interface mot ISA bussen med Teensy++ (AT90USB1286)

Postat: 22 januari 2015, 10:41:21
av Oskar
Idén slog rot när jag såg en gammal "Viktor" monitor med grön fosfor i min garderob, det vore kul att koppla den till en modern dator på något vis. Eller göra en fristående "meddelandecentral", som tar emot meddelanden via radiomodul och visar dem på grönskärmen. Jo, jag är nog lite knäpp, men jag gillar de gamla monokroma monitorerna :D
2015-01-22 10.31.03.jpg
Det finns en del exempel på folk som genererat videosignal till datormonitorer, främst VGA då, direkt med mikrokontrollers, H-synk, V-synk och data, men det är tidskritiskt, lite bökigt och svårt att hinna med att göra något annat med processorn när man fått det att fungera. Jag tänkte i stället att ett gammal ISA "grafikkort" borde gå att prata med om man har lite I/O pinnar att tillgå.

Via en vänlig forummedlem fick jag tag på ett ISA bakplan, så då var det bara att sätta sig ner och rita på ett kort med Atmegan som pluggas in i ISA bussen. Jag valde Atmega32u4 för att jag jobbat med den förut i formen av "teensy" kort, och tycker det är mycket smidigt med ett litet kort man direkt kan komma igång och labba med, samt har en USB bootloader. Jag nöjer mig med att designa kortet att fungera med 8 bitars ISA kort, eftersom det förenklar hårdvaran en hel del, och jag har några gamla 8 bitars "grafikkort" liggande.

En annan möjlighet vore att designa ett kort med en ISA slot i, men då måste jag ju få tag på lösa ISA socket kontakter, samt att det blir lite mindre flexibelt.

Kommentera gärna mitt schema, jag är lite osäker på vad som behöver pull-up och inte. Jag har aldrig tidigare designat prylar med adress och databuss, latchar och sådant. Jag tänkte från början bara ha latchade A0 till A15, och de högre adressbitarna (ISA har 20 adressledningar) skulle jag ställa in med muspiano. Fast med en extra latch får jag full flexibilitet att prata med olika adresser, så det blev en fyra bits latch för de högsta adressbitarna på bussen.

Förutom att prata med ett "grafikkort", skulle det vara intressant att snacka med ett nätverkskort också. Så kunde man ha en nätverksansluten "meddelandecentral", eller till och med någon sorts chatmojäng.

I övrigt har jag tänkt ha en Attiny84 på kortet som kan avkoda ett PS2/AT kompatibelt tangentbord, finns även anslutning för RS232 och TTL UART.

Nu när jag kommit så pass långt att jag vet ungefär hur jag skulle vilja ha det och hur det skall fungera i stora drag, är det inte säkert att det händer så mycket på ett bra tag :)
Jag uppskattar dock om det kommer synpunkter på designen.
isa_card_schematic.pdf
isa_card_board.pdf
Några användbara länkar jag kollat mycket på:
http://www.techfest.com/hardware/bus/isa.htm
http://tinyvga.com/avr-isa-vga

Re: Interface mot ISA bussen med Atmega32u4

Postat: 24 januari 2015, 00:39:02
av MiaM
Ett tips kan kanske vara att börja med att provköra med "enklare" kort. Det första parallellportkortet från IBM hade t.ex. bara vanlig 74-logik (och schemat finns på nätet).

Det verkar vara rätt olika vilka av de "obligatoriska" signalerna som verkligen behövs för att olika kort ska fungera. Givetvis måste ju adress+databuss och några fler signaler alltid finnas, men sånt som diverse klocksignaler och sånt verkar bara användas av vissa kort.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 24 januari 2015, 08:48:19
av Oskar
Precis, det är ganska olika vilka av de mer exotiska signalerna som används. "OSC", som är på 14,31818MHz till exempel, används bara av vissa grafikkort, tror jag. För att få det så flexibelt som möjligt har jag försökt att lägga sådant i hårdvaran när jag ända börjat rita på ett kort. Det är ju ganska enkelt att lägga till.

Jag har spanat lite om det finns något "debug ISA kort", som visar vad som ligger på adress och databuss med LEDs, och det finns det, men de är sällsynta. Ett sådant hade varit användbart till att börja med. Jag tror dock att det är så pass enkelt att avlusa att jag kommer att fixa det med oscilloskopet och min bus pirate, som kan fungera som enkel logikanalysator för att fåtal kanaler.

Ett monokromt grafikkort är hyfsat enkelt att snacka med ändå. En bra beskrivning finns här:
http://www.seasip.info/VintagePC/mda.html
Det är eftersom jag måste skriva till det 4kB stora teckenminnet när något skall visas på skärmen som jag måste använda de högre adressledningarna på ISA bussen (A15 - A19). Det skiljer sig när man skall skriva till minne, då använder man "MEMR" och "MEMW" i stället för "IOR" och "IOW", så sådant måste jag tänka på.
I IBM tekniska manualer finns också de värden man måste initialisera 6845 displaykontrollern med för att fungera mot en gammal PC monitor:
http://www.minuszerodegrees.net/oa/OA%2 ... dapter.pdf

Min lösning blir lite långsam, eftersom jag måste lägga ut adressen på bussen i tre steg (tre latchar). Men i praktiken spelar det nog ingen roll.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 24 januari 2015, 23:56:44
av MiaM
CGA-grafikkorten använde OSC. På orginal-IBM-PC/XT-moderkorten satt det en trimkonding vid oscillatorn för att kunna få exakt rätt frekvens, eftersom den delades ned för att få NTSC färgbärvågsfrekvens. :mrgreen:

Det går ju ofta att se rent fysiskt på ISA-korten vilka signaler som är anslutna. Har man otur är det ett kort med fler än två lager och alla signaler är dragna till en radda med hål (typ som plats för en 62-pol IDC-stiftlist) så man inte kan gissa så lätt.

P.S. du behöver ju bara lägga ut adressen i tre steg i det verkligen sker ändring på alla de tre stegen, annars räcker det ju att ändra en eller två av de tre delarna.

P.S.2 eftersom du verkar bygga en PS/2-port för tangentbord så kan du ju lika gärna ansluta alla sex pinnarna så kan en såndär "använda både mus och tangentbord på en port på en laptop"-adapter användas :wink: Tyvärr finns kanske två varianter på hur man ska ansluta klocka v.s. data för "den andra" PS/2-kanalen så att säga. (En sån funktion finns förresten inbyggd i ett Fujitsu-tangentbord jag har, det tangentbordet kom från början ihop med nån P90-dator och med den datorn kunde man ansluta musen under tangentbordet istället för i datorn om man ville. Jag minns inte om jag provat det tangentbordet med nån laptop eller inte, det är ju inte direkt aktuellt idag...).

Re: Interface mot ISA bussen med Atmega32u4

Postat: 25 januari 2015, 00:09:25
av Oskar
Genom att studera länkarna jag postade tidigare, samt läsa 6845:ans datablad har jag kommit fram till följande initieringsprocedur:

Kod: Markera allt

Ställ in ISA adress 0x3B8 (6845 control register)
Skriv 0x01 på ISA databuss (set high-res mode bit). 
Detta måste göras allra först i initieringsprocessen enligt IBM manualen.

Nästa steg är en upprepning av en fyra stegs operation 16 gånger.
1. Ställ in ISA adress 0x3B4 (index register)
2. Skriv på ISA databuss "register nr" enligt tabell nedan 
3. Ställ in ISA adress 0x3B5 (6845 data register vald via adress 0x3B4)
4. Skriv på ISA buss initieringsvärde till valt 6845 register enligt tabell nedan.

Register nr:					Värde:
00 - Horiz. total characters                 	61  
01 - Horiz. displayed characters per line    	50  
02 - Horiz. synch position                   	52   
03 - Horiz. synch width in characters        	0F   
04 - Vert. total lines                       	19   
05 - Vert. total adjust (scan lines)         	06   
06 - Vert. displayed rows                    	19   
07 - Vert. synch position (character rows)   	19   
08 - Interlace mode                          	02   
09 - Maximum scan line address               	0D   
0A - Cursor start (scan line)                	0B   
0B - Cursor end (scan line)                  	0C   
0C - Start address (MSB)                     	00   
0D - Start address (LSB)                     	00   
0E - Cursor address (MSB) (read/write)       	00   
0F - Cursor address (LSB) (read/write)       	00  

Ställ in ISA adress 0x3B4 (6845 control register)
Skriv 0x09 på ISA databuss (sätt "enable video" och "high-res" bitarna)
Efter initieringen borde skärmen synka och en blinkande markör dyka upp. Sedan skall det som jag förstår det bara vara att skriva till teckenminnet som börjar på 0xB00. Det blir nog att implementera en enkel tolk av några av de viktigaste VT100 kommandona för att enkelt kunna skriva på skärmen. Enkla modifieringar av koden skall göra att man kan använda ett VGA kort i textläge också. Handlar mest om vilka adresser man skriver till, samt att teckenminnet är annorlunda med fler attribut per tecken. Hmm .. kanske skulle ha en jumper på kortet för detta.

Kortet kommer jag nog fila på länge. Hade tänkt routa i fyra lager och beställa från itead.

Miam:
Aha, se där. Kul detalj det där med trimkondingen! Tyvärr har jag inget "orginal" CGA kort. Bara några tråkiga, moderna, mindre än halvlängdskort som klarar MDA, Hercules, CGA och EGA.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 25 januari 2015, 01:29:37
av MiaM
Nu har jag redigerat det jag skrev tidigare, hade missat att du skrivit mer i tråden innan jag klickade på redigera...

Se upp för "vga-kort" som egentligen har några mer funktioner - de behöver kanske köra koden i sin bios (eller motsvarande) för att fungera. Det kan kanske också gälla för "multi"-kort. Från och med EGA så har ju korten egen BIOS och ett kort som även kan emulera t.ex. Hercules kan kanske ha kod i bios som måste köras för att välja rätt läge eller nåt liknande.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 25 januari 2015, 08:46:14
av Oskar
Smart det med adresserna, det hade jag inte tänkt på. Den högsta latchen (A16 - A19) ändras i alla fall enbart när man växlar mellan I/O adressrymd och minnesadressrymd. Alltså, skrivning till ISA kort register vs skrivning till teckenminne. Det är ju bara att känna av vad som behöver ändras som du säger. Förhoppningsvis hade jag insett när jag skulle börja skriva kod :)

Hm, just det ja, "VGA BIOS". Frågan är om det behövs när man bara skall använda ett kort i textläge? Nåja, jag tror jag struntar i att beakta det, tanken var ändå inte att använda ett VGA kort.
PS/2 porten då, nja .. tangentbord+mus i ett, vet inte varför jag skulle behöva det.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 9 februari 2015, 14:07:20
av Oskar
Det blir lite sporadiskt routande nu och då på detta galenpanneprojekt. Har inte gjort speciellt många kort, speciellt inte med många dataledningar. Kom gärna med förslag om ni ser något helt galet :)
isa_pcb-2.png
Power ledaren som går runt kortet skall få sig några extra avkopplingskondensatorer.

Schemat har jag fått revidera när jag skulle börja routa. Bland annat har jag använt datapinnarna på latcharna i omvänd ordning, för att inte få en massa korsade ledare. Vet inte om man "får göra så"? :)
isa_card_schematic2.pdf

Re: Interface mot ISA bussen med Atmega32u4

Postat: 11 februari 2015, 19:55:24
av Tekko
Gör för all del ett jordplan is6t för en ledare som ormar sej runt kortet.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 11 februari 2015, 20:14:01
av Oskar
Jodå, jordplan kommer. Det är 5V som slingrar sig.

I övrigt lade jag ner att routa i 4 lager då jag såg att det blir svindyrt med så stort kort i 4 lager. Det var inte mera komponenter och ledare heller än att det gick bra med två lager.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 11 februari 2015, 20:16:16
av Micke_s
Annars kör 5v med en kabel istället, två vior och du har bättre jordplan.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 11 februari 2015, 21:07:52
av Oskar
Ytterligare några kvällar senare ser kortet ut så här:
isa_pcb-4.png
5V slingan som åker runt kortet går ner i ISA bussen på två ställen, så jag tänker som så att EMC mässigt är den bara hälften så lång. Har satt in några plastfilmskondingar och två elektrolyter på slingan också. Jordplan finnes numera på både löd och komponentsida, Jag skall sätta några extra vior som förbinder jordplanen, men i övrigt blev jordplanen bra tycker jag- Routningen i allmänhet kan säkert förbättras, det är inte min starka sida.

Jag gillar inte idén med vior och kabel till 5V. Skulle det verkligen bli så mycket bättre?

Vad tror ni?

Re: Interface mot ISA bussen med Atmega32u4

Postat: 12 februari 2015, 12:14:49
av lond
Oskar skrev: Jag gillar inte idén med vior och kabel till 5V. Skulle det verkligen bli så mycket bättre?

Vad tror ni?
Man kan använda sig av kortare "jumpers" om dom 2 planen inte räcker till.

Hittar tyvärr inte CGA-grafikkorten som jag hade, åkte nog till återvinningen tillsammans med monitorn :(

När jag caddar kort brukar jag ha "orphans" avstängd på jordplanet, så att jag vet var jag behöver extra jordvior någonstans och att jordplanet är sammanhängande, sedan är det bara att strössla ut dom :)

/// Marcus

Re: Interface mot ISA bussen med Atmega32u4

Postat: 12 februari 2015, 13:13:49
av Oskar
Det var ju synd att CGA korten åkte iväg.

Ja det blir att strössla lite med jordvior senare, men jag tycker som sagt att jordplanen blev rätt bra ändå. Jag kör också med orphans avstängt.

Ett sidospår i projektet är hur jag skall strömförsörja mitt bakplan. Jag har ingen AT nätdel som inte sitter i någon dator. Att använda ett AT nätaggregat blir dessutom klumpigt. Jag funderar på att använda DC/DC omvandlare i stället. Strömmarna lär inte bli så speciellt höga. Jag har DC/DC omvandlare för 5V och för +-12V, de två omvandlarna och saken är biff. -5V skulle man kunna linjärreglera från -12V, för jag tror att den spänningen inte ens används av de flesta kort. Jag skulle kunna göra ett kort med DC/DC omvandlare på veroboard och sätta under bakplanet bara.

Vad jag då behöver för att få ihop ett eget strömförsörjningskort är de där kabeldonen "P8" och "P9" som satt på gamla AT nätdelar. Någon som vet artikelnummer på kontakterna? Alternativt kunde man ta och knipsa lös en uppsättning kontakter från en kass AT nätdel.

Re: Interface mot ISA bussen med Atmega32u4

Postat: 13 februari 2015, 10:21:09
av Oskar
Tror att jag hittade kontakterna.
43-850-43 - Kontakthus hona, rak 6P, 640250-6
43-851-00 - Crimphylsa 0,2-0,9 mm²P, 3-640706-1

Min ELFA shoppinglista är nu uppe i 700kr :(
Den måste jag banta, går ju inte kasta sådana pengar på dessa tokigheter ..