Konference: SAPI-1 a československé mikropočítače

Od: Jiri Biba
Datum: 20.12.2012 17:11
Předmět: DGD-1 v CPM


Na Bytaku me Melsoft obdaroval DGD-1 (deska grafiky  320x240 bodu). Puvodne byla urcena k zobrazovani grafiky z BASIC-G. Deska, na ktery snad kdysi bastlil sam Velky Eda, byla sice dost sesla vekem, nekolik spatnych svabu ale rozchodil jsem ji. Napadlo me zkusit ji naprogramovat jako klasicky displej v CPM. Melsoft me upozornil, ze na dropu jiz nejaky ovladac je a tak jsem ho pouzil a zjistil, ze je strasne pomaly a neumi nektere veci, co CPM pozaduje. Tak jsem ho zacal louskat a prisel na to, „co tim chtel autor rici“ . Takze z rastru mi vyslo, ze pokud bych chtel klasickych CPMkovych 80x24 znaku, vychazi ze jeden znak muze mit rastr 4x10 bodu, coz je na sirku opravdu hodne malo.  Znak ma na vysku jen 8 bodu, 2 linky jsou mezera mezi radky. Ale kupodivu, znaky jsou celkem dobre citelny hlavne na PMD60.1, ktery ma asi lepsi obrazovku a rozklady.

Takze se mi to podarilo pod CPM zprovoznit bez mapovani, ale takovym svindlem, ze videoram je od 4000h do 7fffh. Tuhle cast pouzivaji jen rozsahle programy na code a nebo na datovy buffery, takze na testy se to pouzit da.  Displej pise do radku trochu vetsi rychlosti jako terminal pri rychlosti 9600Bd, coz je jeste prijatelny. Ale rolovani obrazovky byla naprosto katastrofa, minimalne 2-3 sekundy cely obraz.  Premejslel jsem co s tim. Nejdrive to vypadalo ze s tim nepujde nic delat, protoze kazdy zapis do videopameti vyvolava jeden i vice wait procesoru  (synchronizace vycitani videoram na displej a zaroven zapis do ni). Rolovani se delalo puvodne tak, ze se byty 1. linky  2. radku  prepisovaly do 1.linky 1. radku a po kazdym prepisu se kontrolovalo, zda uz neni konec videoram. A tak stale dokola az do posledniho  radku. No a posledni radek se pak zaplnil mezerama. To bylo celkem 250 000!!! Instrukci.  No silenost.

Pak me ale osvitila nejaka genialita a vse vyresila jedna jedina !! Z80- kova instrukce LDIR. -:)) Proste se zada  stejne jako puvodne  1. linka  2. radku a  1.linka 1. Radku a do BC se zada kolikrat, pak LDIR a je hotovo. Dokonce jsem prisel na to, jak vymazat posledni radek po rolovani aby se nemusely do nej zdlouhave zapisovat mezery.  Videoramka je vyuzita jen do adresy 7BA7h. Za ni je jeste vic nez jeden radek, co se nezobrazuje. No a ten staci pri pocatecni inicializaci vynulovat a pak rolovat ne 24 radku ale 25.  No abych uz prestal tlachat. Vysledek vseho je, ze DGD-1 roluje jen o malinko pomaleji nez  AND-1Z !!! -:) Takze by mohla byt pouzitelna.

Je v ni ale blbe sestavenej generator znaku, maly znaky se pisou o 1 linku niz nez velky. Je to jen nepatrna muskila, to by nemel byt problem upravit.

Takze zbyva udelat mapovani videoram aby neblokovala pamet pro CPM,  mozna taky do generatoru znaku namontovat cestinu. (zatim umi jen znaky 0-7Fh)

Uff, to jsem se rozepsal....

Neco pro Petra... Jsem linej hledat jak je to s wait u Z80 pokud se da LDIR. Neni mozny, ze se po celou dobu co probiha tahle jedinna  instrukce udela jen jeden a proto se to tak zazracne zrychlilo? Podle pickolapky behem rolovani prijde tech waitu jen par. U puvodniho reseni jich bylo tisice. Ono totiz kdyz zapisujes debugerem do videopameti, tak to jde taky dost pomalu. A  LDIR je to jak blesk. Kupodivu, na displeji neni nic videt, naky pobihaci carky jako to dela i AND-1Z.

Jirka

 

 
[2012/1 (114)] [2012/2 (102)] [2012/3 (30)] [2012/4 (9)] [2012/5 (18)] [2012/6 (32)] [2012/7 (143)] [2012/8 (197)] [2012/9 (161)] [2012/10 (43)] [2012/11 (90)] [2012/12 (37)]


[2010 (676)] [2011 (586)] [2012 (976)] [2013 (538)]