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.
JInak assembler by měl být v pohodě, ale Pascal budu muset asi znovu zkusit převést z kazet – při delším programu (několik řádek) se mi hroutí při použití příkazů editoru L a C. Buď jsme do něj při převodu zavlekl nějakou chybu, která vede k permanentnímu zhasnutí obrazovky, a v tom případě nový převod pomůže, nebo v něm je prostě chyba a v tom případě ale nebude k vážně míněné tvorbě Pascal použitelný.
Tady na blogu jsem popsal porty a VRAM v módu odpovídajícím MIKOSu (ROM '87 používá větší počet mikrořádků, jinak je rozdíl minimální) tedy hardware, a v jiném článku (Ondra, služby, síť) zase služby a rutiny ROM verze 87.
Je to sice mišuňk, ale k programování by to mohlo stačit.
Když by bylo něco nejasného nebo v článcích něco chybělo, můžu to upřesnit nebo doplnit na konkrétní požádání.
Popis microsoftího aseembleru je v článku Ondra EDTASM '87.
Souhrnný seznam článků o Ondrovi lze nalézt zde:
http://sites.google.com…a-spo-186
Až budu mít možnopst, tak komentovaný výpis ROM Ondry nascanuju, zatím to na to ale nevypadá.
Popis hardware je poněkud nečekaně k nalezení v závěru Teslácké příručky TOOL (žlutá knížka pro Ondru).
Kdyby náhodou nějaký bloud chtěl psát program pod MIKOSem (já ale doporučuju na Ondrovi standardně používat raději ROM '87), tak služby MIKOSu jsou zmíněny v článku Programy pro MIKOS na Ondrovi.
da se nekde sehnat programatorska dokumentace k ondrovi ? demo na ondru mi totiz prijde jako dobrej napad 😉
SSM ROM:
Pilotní tón se zdá složen z jedničkových bitů, následuje synchronizace nulovým bitem.
Pak bajt s typem bloku ("H" hlavička, "D" data) a vlastní obsah hlavičky/bloku dat. Na konci kontrolní součet počítaný pomocí ADD (jen data bez bajtu označujícího typ bloku), zapsaný dvakrát za sebou – zřejmě jen proto, aby za jeho první inkarnací byla aspoň ještě jedna hrana.
Při zápisu bajtu provede nejdříve nějaké "dorovnání" (krátká čekací smyčka s nekonstatntní délkou odvozenou z R registru), zapíše nulu a za krátkou chvilku jedničku (xor předchozího stavu), pak stejným způsobem "dorovná" a zapíše nejdříve jedničku a za krátkou chvilku nulu, pak zapisuje jednotlivé bity bajtu (nejdříve "dorovná", pak zapíše hodnotu bitu, po nepatrné prodlevě její xorovanou hodnotu).
Kromě "dorovnání" neobsahuje časovací smyčku s proměnlivou délkou.
"Dorovnání" vypadá takto (B obsahuje časovací konstantu, C starý stav R registru nebo při prvním volání úplně nedefinovanou hodnotu):
DOROVNEJ: LD A,R
SUB C
AND 7FH
SRL A
SUB B
DOR01: INC A
JR NZ,DOR01
RET
Ano, a SAPI formát používá fyzicky tento záznam: start bit vždy v nule, 8 bitů data, dva sop bity vždy v jedničce, po nich může následovat start bit dalšího znaku (opět v nule). Počáteční klidový stav je jednička, a na magnetofon se podle způsobu uvedeného o příspěvek výše zaznamenávají jen změny fáze.Základní frekvence je 2400 Hz. prázdný pásek )bez dat) interpretuje SAPI jako znaky AA nebo 55, v přítomnostii signálu jde buď o krátké intervaly (tedy trvalá jednička) nebo data při střídání krátkých (není změna fáze) a dlouhých (fázová změna) intervalů.
to Blackhead: podívej se do AR B6/85. Tam je popis desky DSM-1 a je tam podrobně popsáno jak se tvoří "řízeným invertorem" (= hradlem EX-OR ze sériových dat a hodin) a dekóduje signál pro magnetofon. Cituji:"Fázově zaznamenávaná informace na magnetofon je vlastně převedena na sled krátkých impulsů a rozhodující je časová vzdálenost mezi těmito impulsy. Přicházejí-li impulsy v intervalu 208 us, nebyla na pásek zaznamenána žádná fázová změna. Naopak interval 416 us indikuje, že na pásek byla zaznamenána fázová změna." konec citace….
Toto samozřejmě platí pro verzi ROM jejíž záznam je kompatibilní se SAPI.
Hi Logout! Se ví, že i takovou důležitou informaci, jako je konektor na kazeťák, jsem nascanoval.
Kompletní nascanování dokumentace chybí jen u sítě, disku a obsluhy programů.
Konektor najdeš v sešitě "Technický popis", "Příručka rpo údržbu a opravy" (má červenou obálku), kresbička je na straně označené na papíře jako 16, konektor je popsán jako "Seriový interface", popis jednotlivých pinů je na stránce označené na papíře jako 21, opět je popsán jako Seriový interface.
při standardním číslování sedmidutinky/kolíku je připojení signálů následující:
1 MGF – zapisovaná data do magnetofonu
3 MGČ – čtená data z magnetofonu
2 0V – společná zem
4, 6 D1, D2 – diferenciální datová linka (V24)
5, 7 H1, H2 – diferenciální linka hodinového kmitočtu (V24)
Kazeťák je tedy na konektoru společně se sítí, oba jsou honěny přes 8251, proto možná to zmatení pojmů – že není označen jako konektor pro kazeťák.
Zdar Dexi.
Nemel bys nahodou popis konektoru pro pripojeni kazetaku k Zbrojovackovi? Pristi vikend jedu domu, neb valna cast zenskeho pribuzenstva slavi svatek a tak jsem si rikal, ze bych zkusil pod vlivem clanku o Ondrovi, Sapi a spol. zapnout po peti letech Zbrojovaka a konecne k nemu pripojit kazetak. Nicmene v zadnem z 32MB PDF scanu manualu co mam neni popsane jak pripojit kazetak. Nerad bych ho oddelal, nebot je v krasnem stavu a byla by to skoda…