Reiz ar MaiklsBlack sarunājām samainīt vienu sakaru rīku pret vecu ICL ražotu skaitļotāja termināli it kā pilnā komplektā, bet nezināmā, potenciāli bēdīgā stāvoklī. Terminālis pēc demontāžas no kādas universitātes ir stāvējis mitrā šķūnī, ne vienkārši mitrā, bet kā vēlāk izrādījās, tajā iekšā pat ir tecējis ūdens.
ICL ME-29 skaitļotāja sistēma, kurā redzams ICL-3575 terminālis. Bilde ņemta no: http://flickrhivemind.net/Tags/icl,me29/Interesting
Korpusu nav super ērti izjaukt, bet kad tas dabūts vaļā, pārējais pieejams ērti un pārdomāti. Kamēr korpuss no netīrumiem mazgājās trauku mazgājamajā mašīnā, sāku skatīties korpusa apakšdaļā esošo barošanas bloku. Lai gan tas bija ejošs, tomēr bojāts izrādījās viens uz tās pašas plates esošs seriālā porta draiveris. Iztīrot šasijas apakšu no ūdens atstātiem nosēdumiem un nomainot draiveri, apakšdaļu varēju vērt ciet. Ar augšdaļu jau bija sarežģītāk. Pirmkārt, nācās skatīt kineskopa plati. Uz tās acīmredzami bija tecējis ūdens. Uz plates esošie regulatori visi bija pilnīgi sarūsējuši, tos nācās nomainīt. Profilaksei pārejot pāri aizdomīgiem lodējumiem es jau varēju mēģināt arī kineskopa plati ieslēgt. Un bija vēl viens progress - uz maksimālā gaišuma ekrāns izgaismojās zaļš. Saregulēju ko šādā stāvoklī pēc instrukcijas varēju saregulēt un gāju tālāk.
Tā kā terminālis nodarbojas ar datu apmaiņu ar centrālo skaitļotāju, tad tajā ir arī vadības plate. Uz vadības plates ir izplatīts 8085 procesors ar tam laikam tipisku Intel radītu "čipsetu" - diviem seriālajiem portiem, vienu priekš datu apmaiņas, otru priekš saziņas ar klaviatūru. 8253 taimeris, teksta režīma video kontrolieris 8275, DMA 8257, paralēlais ports 8255, kā arī divas pastāvīgās atmiņas, viena programmai, otra attēlojamo simbolu grafiskajiem datiem. Man bija divas šādas vadības plates, viena neslēdzās iekšā, otrai trūka vairākas mikroshēmas un takts ģenerators. Pārliku no pilnās plates detaļas uz tukšāko un pirmā plate aizgāja. Spaidot pogas uz ekrāna rādījās simboli un terminālis šķita jau visai ejošs. Turpināju ar otras plates remontu. Pasūtīju ebajā vajadzīgās mikroshēmas, saliku pa vietām un pēc plates sīkākas izpētes atklājās, ka šai platei bojāts arī 8255 paralēlais ports. Nomainīju uz krievu К580ВВ55, aizgāja arī otra plate un kad dabuju oriģinālo 8255, saliku visu kā nākas.
Lai gan vēsturiskais aparāts bija palaists pilnīgi ejošs, tomēr likās, ka kaut kas pietrūkst. Ikdienā strādājot ar tīkla iekārtām, tās un ne tikai tās tiek konfigurētas pa seriālo portu.Gribējās lai tas strādātu nevis kā rakstāmmašīna, kura rāda burtus, bet lai to varētu prieka pēc arī izmantot kā īstu Linukša termināli vai kā seriālo termināli pie tīkla iekārtas. Bet neiedziļinoties nekā nesanāca palaist seriālo datu apmaiņu pa RS232 portu. Nu, neko, principā vienīgais, kas var ar to palīdzēt ir ... disassemblēšana un koda modificēšana. Kaut kad tehnikumu beidzot biju kaut kādu pavisam vienkāršu programmu disassemblējis un izpētījis, biju skatījis uz ko sarežģītāku, bet tā arī līdz galam neko neizdarīju. Tomēr nolēmu noriskēt - aparāts šķita pārāk stilīgs. Nopirku oshonsoft.com programmu paku, kurā ir arī 8085 rīki priekš disassemblēšanas, simulēšanas un programmas kompilēšanas. Protams, pēc disassemblēšanas ieguvu vien divus tūkstošus komandu bez jebkādiem paskaidrojumiem.
Tālāk nācās pētīt perifērijas adresāciju. Izgāju cauri visu lielāko mikroshēmu CS izvadiem un tā atradu adre;su dekoderi 74LS138. Pēc tā jau varēju pateikt kādām IO adresēm atbilst kādas mikroshēmas:
0x00 - 0x0F: DMA
0x10 - 0x1F: VIDEO
0x20 - 0x2F: KBD serial
0x30 - 0x3F: jumper
0x40 - 0x4F: DATA serial
0x50 - 0x5F: ???
0x60 - 0x6F: PIO 8255
0x70 - 0x7F: TIMER
Meklējot no procesora INT izvadiem arī atradu kuram pārtraukumam atbilst kāds "notikums".
Ar šo informāciju pietika lai varētu komentēt man vajadzīgās programmas funkcijas. Izpētīju programmas startēšanos līdz nonācu līdz normālas darbības mūžīgajam ciklam, izpētīju pārtraukumu procesus un datu apmaiņu. Nu un tad varēju ķerties pie modificēšanas. Pa datu seriālo adresi saņemtos datus nosūtīju pa taisno uz video atmiņas apgabalu un jau varēju redzēt saņemtos simbolus uz ekrāna. Apstrādāju vienkāršākās vadības komandas (jauna rindiņa, TAB), klaviatūras pogu nospiedienus sūtīju ārā pa seriālo portu un nu jau biju ieguvis ko tuvāku tādam terminālim kā to biju iztēlojies. Lai gan varēju to jau pievienot pie Raspberry-Pi sistēmas konsoles porta, tomēr tas pildīja tikai vienkāršas funkcijas.
Problēma bija tāda, ka tas dīvainās vietās rādīja neloģiskus burtus. Tas tā bija tā dēļ, ka Linux (un daudz kas cits) izmanto dažādas "Escape funkcijas", kuras tiek lietotas kursora pārvietošanai, ekrāna dzēšanai, skrollēšanai, Unicode simbolu sūtīšanai un citām lietām. Nācās diezgan daudzus vakarus nosēdēt kamēr asemblerā uzrakstīju visām vajadzīgām funkcijām to korektu izpildīšanu. Beigās Linuksis strādāja visai pilnvērtīgi, bet MikroTik rūtera konsole pierādīja, ka tomēr būs jāpaprogrammē vēl. Simbolu atmiņā nācās pielabot dažus simbolus, kuri neatbilda ASCII tabulai. Bet arī ar to tiku galā un nu man ir īsts, pilnvērtīgs seriālais terminālis ar zaļo ekrānu, tieši tāds, kā sen esmu gribējis. Un ja vajadzēs termināli atgriezt oriģinālajā stāvoklī, atliks vien pāršūt divas programmējamās atmiņas.
Savas bakstīšanās laikā izmantoju divus ērtus instrumentus. Lai programmas atmiņu nebūtu jāliek tieši iekšā platē esošā panelītī, tā riskējot tai saliek izvadus, uztaisīju "pagarinātāju" ar ZIF soketu galā, kurā mikroshēmu ielikt un izņemt varu ērti un bez riska to sabojāt. Otra lieta, kad iesprūdu modificējot programmu, vajadzēja saprast kādus datus tad īsti procesor sūta vienai mikroshēmai. Tam palīdzēja platīte ar FT245 mikroshēmu, kuras datu izvadus pieslēdzu pie sistēmas datu šinas un WR izvadu pieslēdzu pie konkrētās mikroshēmas CS izvada. Tad uz kompja pseido-seriālā terminālī varēju skatīt datu apmaiņu.
Es, protams, saprotu, ka šis projekts ir milzīga laika bedre bez kādas īpaši dziļākas jēgas, tomēr nav bezjēdzīgi - gan apguvu 8085 procesoru, gan labāk kā iepriekš izprotu Escape funkcijas, un labāk izprotu 8bit kompīšu arhitektūru. Katrs savu dzīvi pazaudē kā māk.