Ondra, síť, porty, VRAM

Dort pejska a kočičky pokračuje.
Zdá se, že SSM ROM existuje v několika verzích. Přesněji řečeno, existuje od ní několik komentovaných výpisů.
Ten, který jsem měl v ruce nedávno, udává, že síť pro Ondru je:
asynchronní
bez parity
9600 bd, 2 stop bity
(lze přenastavit na 1200-25000 Bd)
TSIN1=19, TSIN2=12, TSOUT=11 (při 2 MHz Z80)
Použité piny konektoru X1:
Pin 2 – vstup (“rezerva IN”)
Pin 5 – GND
Pin 20 – výstup (“rezerva OUT”)
Pin 5 – GND
Poznamenal jsem si počáteční adresy I/O rutin:
vstup 21DE
výstup 2210

Ten, který mám teď v ruce (je datován duben až květen 1986), udává občas něco jinak:
asynchronní
bez parity
9600 Bd, stop bity neomezeny
(ani zmínka o možnosti přenastavit)
TSER2=13, TSER1=TSER2+9 (s významem 104 usec a 104+52 usec)
všimněte si, že se liší i názvy časovacích konstant!
Použité piny konektoru X1:
Pin 2 – vstup (“rezerva IN”)
Pin 5 – GND
Adresy I/O rutin:
vstup 221F
výstup – tato rutina ve výpisu vůbec není (!)

Co z toho vyplývá?
Že existovala verze Ondry, která uměla ze sítě číst, ale neuměla do ní nic posílat.
Můžeme si o tom myslet dvě věci:
Buď, že to starší verze Ondry prostě neuměla a četla síťová data poslaná nějakým serverem (a můžeme se dohadovat, jaký počítač s jakým programem jako server sloužil), a později vznikla novější, která data uměla číst i posílat.
Nebo, že existovala učitelská a žákovská verze ROM, kde učitelská uměla do sítě data i posílat, zatímco žákovská pouze číst.
Obě teorie mají své nedostatky – ale fakt, že existuje oficiálně Centrem pro mládež, vědu a techniku ÚV SSM vydaný komentovaný výpis ROM Ondry, který se liší od jiného komentovaného výpisu vydaného touto institucí, a to i co se týče výskytu a zpracování rutin pro obsluhu sítě, má jistý nedostatek taky.
Teď budu chodit od Ondry k Ondrovi a zkoušet, jestli nenarazím na nějakého, který neumí posílat data do sítě!
Dá se to poznat snadno – při obsluze kazeťáku svítí jedna LED (tuším, že spodní zelená), a při obsluze sítě bliká druhá LED (horní žlutá).
K uložení dat do sítě lze použít program CopyFile, viz můj minulý příspěvek na toto téma.

Podívejme se teď aspoň,jak vypadá ta rutina pro čtení ze sítě (rutinu pro zápis si neukážeme, protože zrovna TEN správný komentovaný výpis v ruce nemám):

TSER equ 13 ;104 usec
SER1 equ TSER2+9 ;104+52 usec
SERIN: di
 push bc
 ld a,100b ;I/O, 0 video
 out (3),a
 ld h,-1 ;adresa I/O portu
SERI0: bit 6,(hl) ;čekej na "1"
 jr Z, SERI0
SERI1: bit 6,(hl) ;REZERVA IN
 jr nz,SERI1 ;čekej na "0"
 ld bc,TSER1*256+80H
SERI2: djnz $
 ld b,tser2
 ld a,(hl)
 rlca
 rlca
 rr c
 jr nc,SERI2
 ld a,(PORT3)
 out (3),a
 xor a
 ld c,a
 pop bc
 pop hl  ;úprava SP nesouvisející s touto rutinou
 ret

Rutina je součástí celku zvaného “READ BAJT” (čtení znaku z magnetofonu).
Co se týče adresy PORT3, ukládá se na ni záloha stavu ostatních bitů portu. Má hodnotu 0016H.
Kdybych měl i výstupní rutinu, zkusil bych je obě přečasovat na ZX Spectrum a udělat z něho pro Ondru server, na kterém by se daly ukládat soubory pro Ondru.
Ona by se dala napsat i čistě podle té vstupní, ale dělám teď jiné věci, tak s tím počkám.

Když už jsem nakousl Ondrácké téma, co všechno je na napsání takového dema potřeba?
Nestačí jen nahrát si microsofťácký assembler (o kterém jsem psal minule) a koukat, jak bliká na obrazovce kurzor.
Nejprve připojení periferií:
Napájecí konektor je DIN pětikolík se šroubovací objímkou (jde ale použít i protikus bez objímky).
Ze zdroje pro Ondru leze 9V= a 0.8A.
Připojení je následující:
1 – zem
4 – zem
2 – nic
5 – +9V
3 – +9V

Magnetofon se připojuje do sedmidutinky DIN.
Je to proto, že kromě vystupu a výstupu je vyvedeno ještě relé k ovládání pohonu magnetofonu (po nahrání programu počítač sám magnetofon zastaví, a při nahrávání nebo ukládání pouští signál povolující běh magnetofonu).
Vyvedený je jak spínací, tak rozpínací kontakt relé, vám postačí připojit 2.5 m jack (na magnetofonu se zasouvá do zdířky REM) na přepínací a spínací kontakt, a rozpíncího si vůbec nevšímat.
6 – nic
1 – výstup z magnetofonu
4 – rozpínací kontakt relé (normálně netřeba zapojovat)
2 – zem
5 – přepínací kontakt relé (připojit na dálkové ovládání)
3 – vstup do magnetofonu
7 – spínací kontakt relé (přopojit na dálkové ovládání)

Pětidutinka DIN slouží k připojení monitoru.
Najdete na něm, krom kompozitního videosignálu, i +9V k napájení externího modulátoru (vyráběl se pod názvem TVK-1, televizní konvertor, používal se i u SAPI). Proto dávejte pozor, ať si do televize nepustíte proud, který tam nepatří!
1 – video
4 – nic
2 – zem
5 – zem
3 – +9V

Konektor X1 je dvacetipinový FRB konektor (dnes jen obtížně sehnatelný – pár by se mi jich taky hodilo, takže pokud o nějakých víte, a nepotřebujete je, dejte vědět!).
Připojuje se na něj tiskárna, joystick a síť.
Je na něj vyvedeno i +5V.
1 – BUSY
2 – síť IN
3 – nahoru
4 – společný vývod joysticku
5 – zem
6 – tlačítko joysticku
7 – dolů
8 – doleva
9 – doprava
10 – DATA 5
11 – +5V
12 – DATA 6
13 – DATA 2
14 – DATA 7
15 – DATA 0
16 – DATA 1
17 – DATA 3
18 – DATA 4
19 – /STROBE
20 – síť OUT

K připojení sítě se použijí vývody:
2 – IN
20 – OUT
5 – zem
K připojení joysticku se použijí vývody:
4 – společný vývod (proti němu se spínají jednotlivé spínače směrů a tlačítko)
3 – nahoru
7 – dolů
8 – doleva
9 – doprava
6 – tlačítko
(komunistům bude stačit připojit pouze vývod 8).
Na konektoru canon 9 jsou vývody uspořádány takto:
1 – nahoru
2 – dolů
3 – vlevo
4 – vpravo
5 – nic
6 – tlačítko
7 – (obvykle +5V)
8 – (obvykle GND)
9 – nic
K připojení tiskárny budete kromě dat (0-7) potřebovat ještě BUSY a /STROBE (signál je negovaný). Zapojení na konektoru Canon 25 je toto:
1 – /STROBE
2 – DATA 0
3 – DATA 1
4 – DATA 2
5 – DATA 3
6 – DATA 4
7 – DATA 5
8 – DATA 6
9 – DATA 7
10 – nic
11 – BUSY
12 – nic
18 až 25 – zem

Ondra používá pro výstup tři porty:
03H – řídící port
09H – port tiskárny
0AH – výstupní port

Instrukce IN se na Ondrovi nepoužívá, přesněji používá se k nastavení časovačů pro zobrazování.
Pro čtení jsou tedy vstupy mapovány do paměti.
Protože Ondra má 64 kB RAM, jsou vstupy a ROM připojeny do stránkovaných bloků, ROM se stránkuje spolu
s RAM ve spodních 16 kB (0000-3FFF), vstupy v horních 16 kB se stránkují s RAM (E000-FFFF).

Port 03H:
bit 0 – VEN – video enable, v jedničce povoluje vykreslování obrazu. Zobrazovací obvod tvořený časovači přistupuje do paměti v DMA režimu.
bit 1 – MP1 – v nule (aby byla k dispozici po zapnutí) přistránkuje ROM, pro připojení RAM busí být držen v 1
bit 2 – MP0 – v jedničce přistránkuje porty do horních 16 kB
bit 3 – K0 – výstup dat na magnetofon (už se nevešel na výstupní port)
bit 4 – SA0 – adresový vstup obvodů 8253 A0
bit 5 – SA1 – adresový vstup obvodů 8253 A1
bit 6 – nic
bit 7 – nic

Port 09H:
Port tiskárny není třeba popisovat, na něj se posílají data.
Strobe ale není automatické, posílá se přes výstupní port.

Port 0AH:
Ondra nemá klasický jednobitový beeper, jako třeba ZX Spectrum. Má zvukový obvod, který umí generovat sedm různých frekvencí od 200 Hz do 1 kHz (osmá je ticho).
Softwarově by ale asi bylo možné beeper emulovat.
Použití zvukového obvodu znamená, že Ondra může vydávat zvuk o zadané frekvenci, zatímco procesor dělá něco jiného a není (obvykle časově náročnou) tvorbou zvuku zatěžován.
bit 0 – LED1 – ovládá LED diodu 1: 0 svítí, 1 nesvítí (!)
bit 1 – LED2 – ovládá LED diodu 2
bit 2 – síť OUT
bit 3 – /STB – ovládání /STROBE pro tisk
bit 4 – relé pro ovládání magnetofonu. 0 rozepnuto,1 sepnuto
bit 5 – M1
bit 6 – M2
bit 7 – M3 – tříbitová hodnota pro frekvenci zvuku, 0 ticho, od 001 do 111 od nejnižší po nejvyšší v rozsahu 200Hz do 1kHz

Paměťové vstupy jsou při nastránkování dostupné na adresách E000 až E009.
Význam bitů je tento:
bit 0 – pět
bit 1 – bitů
bit 2 – řady
bit 3 – kláves
bit 4 – nebo joysticku
Tlačítka jsou sepnutá v nule, rozepnutá v jedničce.
Joystick se čte na adrese E009, bity jsou: dolů, tlačítko, nahoru, vlevo, vpravo
Klávesy na adresách:
E000 – QTWER
E001 – AGSDF
E002 – symbol shift, VZXC
E003 – nic nic nic nic SPACE
E004 – caps shift, nic, ČS shift, 0-9 shift, nic
E005 – enter, HLKJ
E006 – PYOIU
E007 – CTRL, B, nahoru, MN
E008 – vpravo, nic, dolů. vlevo
(Hodně her od Víta Libovického se na klávesnici ovládá šipkami. Pokud chcete, aby vaše hra používala jak šipky na klávesnici, tak joystick, nezapomeňte, že jsou mapovány jinam, a tak musíte číst a vyhodnocovat oba vstupy – jak klávesnici, tak joystick).
bit 5 – BUSY – vstup připravenosti z tiskárny
bit 6 – síť IN
bit 8 – KZI – vstup dat z magnetofonu

VideoRAM
Obrazová paměť sídlí od adresy D700 až do FFFF.
Je tu rozdíl mezi původní ROM v.5 z Tesly, která používá 320×240 bodů (pro 24×40 znaků 10×8 bodů), a ROM SSM, která používá rozlišení 400×252 bodů (pro 50×21 znaků 8×12 bodů).
Vše je uloženo jako jednobitová (černobílá) bitmapa, jeden bajt nese informaci o osmi vedle sebe horizontálně ležících bodech.
Protože ale není VRAM adresovaná tak, aby bajty ležely hezky vedle sebe, ale tak, aby se snadno vyčítaly časovačům 8253, které se o zobrazování starají, je trochu problém se v tom vyznat.

Lépe popsaná je adresace v módu, který použila Tesla:
Vedle sebe ležící (na jednom řádku) bajty mají v adrese společný nižší bajt, takže aspoň to.
Čili bajty FF80 a FE80 a FD80 leží vedle sebe.
Nad sebou ležící (v jednom sloupci) bajty zase mají v adrese společný vyšší bajt.
Čili bajty FF01, FF81, FF02, FF82, FF03, FF83 leží takhle hezky nad sebou.
Pokud máme vypočítat adresu ze souřadnic X, Y, počítaných v kartézském systému souřadnic (1,1 je vlevo dole, 40,240 pak vpravo nahoře), pak:
horní byte:= (-x)+1
dolní byte:= Y >1 (rotace vpravo o jeden bit)

Adresování v módu,který použilo Zenitcentrum, je v podstatě stejné, liší se jen rozsah obrazovky (nahoře přibyly řádky, vpravo přibyly sloupce).
Vzhledem ke způsobu adresování není VRAM použita bezezbytku (podobně, jako u PMD-85 nebo SAPI-1).

Vzhledem k tomu, že Ondra s ROM MIKOS v.5 je se SAPI kompatibilní pouze fyzickým formátem zápisu dat na magnetofon a příkazy MIKOSu, nikoliv ale už přenositelností programů, a není tudíž důvod používat ho jako menší náhradu SAPI, doporučuji všem osadit si Ondru ViLi ROMkou verze 87.
A pokud budete psát dema nebo hry, tak zase – doporučuji psát je pro systém s touto ROM.
Co se týče rutin a systémových služeb ROMky, to si necháme zase na jindy.
Ing. Libovický ale Ondru vybavil velmi dobře, podporou proudových souborů, podporou obrazovkových oken, celoobrazovkovým editorem, je na co se těšit.
Protože ROM v současné době zabírá pouze 4 kB z dostupných 16, budu zkoušet do ROM dostat ještě slušný monitor (možná DevastAce) nebo případně interpret basicu.
To je ale zatím hudba hodně vzdálené budoucnosti a obsah současných 4 kB se měnit nijak významně určitě nebude.