Sháním obvody na konstrukce periferií pro osmibity (II)
Moderátor: Moderátoři
K tomu RTG3105iEH - při přednáškové debatě v Holicích na mě hledělo mnoho párů očí,
Experimentální připojení adaptéru VGA (původně určeného do ISA slotu v PC) jsem provedl nejjednodušším způsobem, jak to šlo. VGA používá množství I/O portů na řadě rozsahů, určených jednotlivými bloky adaptéru, viz stránky Jiřího Koska (Programování grafických karet EGA/VGA).
V teoretických výkladech padají pojmy jako externí registry, registry sequenceru, CRTC, GDC, atributové registry, registry DAC... a zaznívá řada hodnot adres ve dvanáctibitovém I/O adresování ISA (3C0h+3C1h, 3C2h, 3C3h, 3D4h+3D5h atd.).
Sharp má I/O interfejsing osmibitový, nepočítám do toho instrukce OUT (C),A apod., ve kterých je adresa defacto šestnáctibitová. Zápis do I/O portů jsem řešil inverzí AD7 a "zdánlivým ignorováním bitů AD8..AD11". Ve výsledku se můj pokusný konverzní adaptér chová tak, že pokud je žádoucí zápis např. do registrů CRTC, stačí k tomu jeden zápis na port 54h (55h), vykonávaný Sharpem. Hardware uvede AD7 do HIGH a na AD8..11 pošle 0011B, čímž se docílí adresy 3D4h "na straně karty". Obdobné je to při zápisech do dalších bloků registrů VGA.
Pokud jde o zápisy instrukcemi pro práci s pamětí (tedy v tomto případě do "framebufferu"), využil jsem vlastnosti počítače MZ-800, který po instrukci OUT (E5h),A prohlásí úsek své paměti E000h..FFFFh za "disabled". Následné zápisy od E000h potom představují zápisy do "videopaměti" karty VGA, pokud je nastavený její textový režim a jsou nadefinované zobrazované znaky. Malá úprava na experimentálním adaptéru (MZ ->VGA) spočívala v připojení adresních vodičů AD8..AD19 na takové hodnoty, aby si při zápisu strobovaném signálem /MEMWR karta myslela, že jde o legitimní zápisy od B8000h (což jest framebuffer IBM MDA, 4000 bajtůch; v pořadí znak, atribut, znak, atribut... [počínaje levým horním rohem obrazovky]). Při tomto experimentu jsem nebyl ničím omezen, anžto úsek paměti Sharpa E000h..FFFFh je velký 8192 bajtů a framebuffer MDA je přibližně 2x menší.
Já vůl si při tehdejších pokusech vedl jen bídnou dokumentaci a tak v tom sám po letech plavu.RayeR píše:...ktere vsechny registry se musi jako minimum naprogramovat...?
Ale našel bych onen plnící prográmek (v Basicu MZ-1Z016), z čehož se to dá vydedukovat. Když nepočítám zápis definice znaků a popsání framebufferu periodickým řetězcem "MZ-800 ", šlo o pár desítek zápisů strobovaných /IOW.
Vzorové obrazy znakových sad bývají vždy v externí (E)EPROM, avšak tento Realtek má "VGA add ROM BIOS" v sobě (v případě Sharpa je mi nanic). Ve framebufferu (pracovní "DRAM", minimálně 2ks 44256) po zapnutí samozřejmě nejsou, musí se naplnit při inicializaci PeCe. Postupoval jsem tak, že jsem podle Vrátilových tabulek (z tematických skript o PC z raných 90. let) naplnil registrové minimum, pak definice znaků "mezera", M, Z, "pomlčka", 8, 0 a nakonec došlo na nápis MZ-800 (ve vláčku přes celou obrazovku). A abych si ulehčil práci, nejsou znaky dle ASCII.
Na GAL tenkrát nedošlo (to počká), prostě jsem to nadrátoval tak, aby karta sama od sebe nic nedělala, po zápisech do I/O portů jsem na vrabčím hnízdě MZ adaptéru přepnul dva "turboswiče" ze staré bedny AT, program pokračoval zápisem definice znaků a obsahem framebufferu, "swiče" jsem přepnul zpět a zapsal poslední I/O dávku (hlavně paletové registry apod.), a pak jsem jednou za iks sekund na efekt měnil obsah paletového registru, který představoval barvu písma znaků (pokud se pamatuju).
Kód: Vybrat vše
1 INIT"CRT:M1"
2 PRINT"Vychozi stav - zapnuty monitor vypsal:"
3 PRINT CHR$(34);"No signal";CHR$(34);" a usnul":PRINT
4 BEEP:WAIT3000
5 PRINT"Inicializace standardnich registru, LCD"
6 PRINT "vypisuje: ";CHR$(34);"Input not supported";CHR$(34);" apod."
7 PRINT"(H:63kHz, V:140Hz)":PRINT
9 ' miscellaneous output register (MZ 42h => PC 3C2h)
10 OUT@$42,$67
20 ' parameter control register (MZ 5Ah => PC 3DAh)
30 OUT@$5A,1
40 ' VGA enable (MZ 43h => PC 3C3h)
50 OUT@$43,1
60 ' pallete mask (MZ 46h => PC 3C6h)
70 OUT@$46,$FF
95 ' timing sequencer (MZ 44h/45h => PC 3C4h/3C5h)
100 RESTORE 1000:FOR N=0 TO 4
110 READ BT:OUT@$44,N:OUT@$45,BT
120 NEXT N
130 ' graphic data controller (MZ 4Eh/4Fh => PC 3CEh/3CFh)
140 RESTORE 1100:FOR N=0 TO 8
150 READ BT:OUT@$4E,N:OUT@$4F,BT
160 NEXT N
170 ' CRT controller (MZ 54h/55h => PC 3D4h/3D5h)
180 RESTORE 1200:FOR N=0 TO $18
190 READ BT:OUT@$54,N:OUT@$55,BT
200 NEXT N
210 ' attribute controller (MZ 40h/41h => PC 3C0h/3C1h)
220 INP@$5A,A
230 RESTORE 1300:FOR N=0 TO $17
240 READ BT:OUT@$40,N:OUT@$40,BT
250 NEXT N
260 BEEP:WAIT 5000
270 PRINT"Korekce, TSEQ(01)=08, obrazovka bila."
280 PRINT"(H:32kHz, V:70Hz)":PRINT
290 ' TSEQ(01)=08
300 OUT@$44,1:OUT@$45,8
310 BEEP:WAIT 5000
320 PRINT"Paletovy registr No.(0)=RGB(0,0,0)":PRINT
330 OUT@$48,0:OUT@$49,0:OUT@$49,0:OUT@$49,0
340 BEEP:WAIT 5000
350 PRINT"Zakaz paletovych registru EGA, obraz"
360 PRINT"lita (chybny pixel clock).":PRINT
370 ' zapis ATC(00), jen adresa
380 INP@$5A,A:OUT@$40,$20
390 BEEP:WAIT 5000
400 PRINT"Plneni nedokumentovanych registru CRTC"
410 PRINT" a GDC, obraz - vychozi stav PwrON."
415 PRINT"[ CRTC(1A)=50, GDC(15)=7B ]":PRINT
420 ' zapis CRTC(1A)=50, GDC(15)=7B
430 OUT@$54,$1A:OUT@$55,$50
440 OUT@$4E,$15:OUT@$4F,$7B
450 BEEP:WAIT 5000
460 PRINT"PREPNI NA MemWR (zluty, bily) A STISKNI"
465 PRINT"D PRO POKRACOVANI!":PRINT
470 GET A$:IF A$="" THEN 470
480 ' popsani obrazovky textem "MZ-800 "
490 FOR N=$E000 TO $EF9F STEP 14:POKE N,0,$17,1,$17,2,$17,3,$17,4,$17,4,$17,5,$17:NEXT N
500 PRINT"Popsano jednotne? pokud ano, prepni"
510 PRINT"na I/O a stiskni D, jinak O - opakovani.":PRINT
520 GET A$:IF A$="" THEN 520
530 IF A$="O" THEN 490
540 IF A$<>"D" THEN 520
550 PRINT"Prenastaveni registru na zapis do CGRAM.TSEQ(02)=04"
560 PRINT"TSEQ(04)=04"
570 PRINT" GDC(05)=00"
580 PRINT" GDC(06)=0C":PRINT
600 OUT@$44,2:OUT@$45,4
610 OUT@$44,4:OUT@$45,4
620 OUT@$4E,5:OUT@$4F,0
630 OUT@$4E,6:OUT@$4F,$C
640 BEEP:WAIT 5000
650 PRINT"Zapis hodnot do CGRAM"
660 PRINT"PREPNI NA MemWR (zluty, bily) A STISKNI"
665 PRINT"D PRO POKRACOVANI!":PRINT
670 GET A$:IF A$="" THEN 670
680 ' definice znaku do GCRAM VGA
690 RESTORE 2000:FOR N=$E000 TO $E0A0 STEP 32:FOR M=0 TO 15:READ BT:POKE N+M,BT:NEXT M:NEXT N
700 PRINT"Popsano vse? Pokud ano, prepni na I/O"
710 PRINT"a stiskni D, jinak O - opakovani.":PRINT
720 GET A$:IF A$="" THEN 720
730 IF A$="O" THEN 690
740 IF A$<>"D" THEN 720
750 PRINT"Prenastaveni registru na zapis do VRAM. TSEQ(02)=03"
760 PRINT"TSEQ(04)=02"
770 PRINT" GDC(05)=10"
780 PRINT" GDC(06)=0E":PRINT
800 OUT@$44,2:OUT@$45,3
810 OUT@$44,4:OUT@$45,2
820 OUT@$4E,5:OUT@$4F,$10
830 OUT@$4E,6:OUT@$4F,$E
840 BEEP:WAIT 5000
850 PRINT"Paletovy registr No.(1)=RGB(0,0,32d)":PRINT
860 OUT@$48,1:OUT@$49,0:OUT@$49,0:OUT@$49,32
870 BEEP:WAIT 5000
880 PRINT"Paletovy registr No.(7)=RGB(32d,32d,32d)":PRINT
890 OUT@$48,7:OUT@$49,32:OUT@$49,32:OUT@$49,32
900 BEEP:WAIT 5000
910 PRINT"Zakaz kurzoru - CRTC(0A)=2D":PRINT
920 OUT@$54,$A:OUT@$55,$2D
930 BEEP:WAIT 5000
940 OUT@$48,1:OUT@$49,0:OUT@$49,0:OUT@$49,32
950 PRINT"Pozadi - modra":PRINT:WAIT 3000
960 OUT@$48,1:OUT@$49,63:OUT@$49,0:OUT@$49,0
970 PRINT"Pozadi - syta cervena":PRINT:WAIT 3000
980 GOTO 940
1000 DATA 3,0,3,0,2
1100 DATA 0,0,0,0,0,$10,$0E,0,$FF
1200 DATA $5F,$4F,$50,$82,$55,$81,$BF,$1F,0,$4F,$0D,$0E,0,0,0,0,$9C,$8E,$8F,$28,$1F,$96,$B9,$A3,$FF
1300 DATA 0,1,2,3,4,5,$14,7,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$0C,0,$0F,8,0,0,$0F,8
2000 ' fonty textu "MZ-800"
2010 DATA 0,0,$C3,$E7,$FF,$FF,$DB,$C3,$C3,$C3,$C3,$C3,0,0,0,0
2020 DATA 0,0,$FE,$C6,$86,$0C,$18,$30,$60,$C2,$C6,$FE,0,0,0,0
2030 DATA 0,0,$00,$00,$00,$00,$00,$FE,$00,$00,$00,$00,0,0,0,0
2040 DATA 0,0,$7C,$C6,$C6,$C6,$7C,$C6,$C6,$C6,$C6,$7C,0,0,0,0
2050 DATA 0,0,$38,$6C,$C6,$C6,$D6,$D6,$C6,$C6,$6C,$38,0,0,0,0
2060 DATA 0,0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,0,0,0,0Karta s RTG3105iEH je z mnou poptávaných věcí ta nejhůř dostupná.
Vyjmuté desky vkládám do kartónu, doma hned pod sprchu, následně řeším, co vypájet přednostně, případně zda má smysl celek přidávat do beden ve skladu.
No aspon ze sem si odnesl zpatky jeste pytlicek se 3 LGA procakama 2 pametma z NTB, takze ani ja nejdu s prazdnou
Vlevo:
• primární filtrační C
• zdrojový tranzistor
• řádkový tranzistor
• zdrojový filtr (L+2ks krabicový C)
• pojistka s držákem
• BY228 (pokud je pod řádkovým transf.)
• krystaly kromě 4,43 a 8,86MHz
• přední LED
• tranzistor (resp. 78xx) vpravo vpředu
• EEPROM v DIP8
• je-li Japan, brávám i vypínač
Vpravo:
• primární filtrační C
• zdrojový tranzistor
• řádkový tranzistor (nějak ho tam nevidím, nad pahýlem zeleného vodiče?)
• zdrojový filtr (L+2ks krabicový C)
• pojistka s držákem
• zdrojový TDA16846
• krystaly kromě 4,43 a 8,86MHz
• přední LED
• zelené a oranžové polštářky (je jich jen pár)
• EEPROM v DIP8
• přijímač IR, pokud lze vyčíst, že je "36kHz"
• hřebínek pod MCU
• trimry, pokud se mi subjektivně líbí
• někdy vytahuju i odjistitelné stahovací pásky
A to jsem popsal dvě méně využitelné televize.