ten interlacing, i kdyz trosku jinak podanej, ma i ZX Spectrum. A je to fakt dost na hlavu. Na ZX Spectru to jde omluvit tim, ze musi sahat do atributove pameti a tak to jeste trosku dava smysl. Na CGA moc ne :)
Takze si v IBM rekli, ze na EGA to opravi, jenze se zasekli na svem predchozim rozhodnuti, ze na bitmapovou grafiku je jen jeden segment. Takze pro zmenu vymysleli planarni grafiku. Clovek by rekl "ok, ma to i Amiga, takze az se u IBM rozhodnou pro 256 nebo 4096 barev, bude to jen rozsireni toho vybiraciho registru"*. Ale ne, tam to zase prehodili na chunked grafiku. Skoro by vyvojar v te dobe brecel - musel si delat graficky knihovny minimalne ve trech verzich ;{
* ted to nedam z hlavy, ale stejne v tom registru nechali jen 4 bity na vyber pixel plane, takze zase malo. Moc planovani do budoucna tady IBM tedy nepredvedla.
Díváš se na to úplně špatnou optikou.
PCčko bylo až do začátku devadesátek profesionální pracovní a vědecký stroj. Šlo o grafy, jednoduchou komerční grafiku, křivky a maximálně mapy.
Na to všechno CGA/EGA/VGA stačila.
Hrálo se na domácích osmibitech, Amigách 500 a výš, Atari bylo spíš na práci. Na PC sice byly nějaké hry, ale to byl jen vedlejší efekt.
tak CGA s 200 radky tedy nestacila :) Ti lidi, co mastili dokumenty, delali ve spreadsheetu (Visicalc atd.), tak meli MDA.
A ta zase byla dost problematicka v CR (nabodenicka, nutno menit EPROM), ale to se vyresilo - vetsina lidi ani firem na takove PC stejne nemela valuty :)
EGA/VGA, to jo, to na obchodni grafiku stacilo, i AutoCAD se na tom uzivil (286 idealni s FPU).
ano, pro profi pouziti se okolo 1984/1985 pocitalo se 400 nebo 480 radky. CGA je ovsem starsi, vydana spolecne s prvnim PC uz v roce 1981.
Ovsem CGA byla skutecne hodne spatna i na dobu vzniku. I proto byla tak popularni karta Hercules (1982). To je zajimave - karta, kterou IBM nikdy neuznala, nikdy vlastne nebyla soucasti standardniho BIOSu, a pritom hodne popularni (bezela na MDA monitorech a pritom mela na svou dobu hodne jemnou grafiku).
Chunky grafika ve VGA byla správná volba, umožnila Doom a celkově 3D revoluci. Bitplany jsou pro softwarové renderování opruz.
Vtipné je, že Amiga měla ASIC, který konvertoval chunkovou grafiku na bitplanovou, ale jen pro herní konzoli CD32 (ASIC byl dohromady s ovládáním CD). Kdyby to nabídli jako rozšiřovací kartu do normální Amigy...
Kdyby to nabídli jako kartu do Amigy tak by to nebylo k ničemu. Hry na těhle počítačích byly zásadně vyvíjené podle "nejmenšího možného jmenovatele" a už z principu v podstatě nikdy nevyužívaly žádná rozšíření. Na Atari ST pro jistotu až na pár světlých výjimek nevyužívaly ani blitter a stereo PCM zvuk, ačkoli pozdější série (tuším STE nebo STF, už si nepamatuju) už měly obojí v základní konfiguraci...
Navíc pokud se pamatuju Amiga 1200 měla jenom jeden slot pro rozšíření, takže uživalelé by museli neustále měnit karty podle aplikace, kterou zrovna chtějí používat.
Měli nabídnout 8bpp chunky režim v rámci základních fičur chipsetu AGA.
Diky za clanek, to je hodne prace nez clovek nakresli jeden obrazek...
Ja jsem mel SAM coupe (vlastne porad mam, v krabici), nasledovnik ZX. Preruseni pro vertikalni zatemneni se tam taky dalo chytat a pak se kreslilo na obrazovku, treba takovy ten posuvny text dole kde jste psali koho vseho zdravite. Programatori se predhaneli kdo zvladne za tu 1/50s (snimek v PAL) nakreslit vetsi pismenka...
A taky jsem prenasel na SAMa snimky z Amigy, uplne neco podobnyho. SAM mel teda lepsi grafiku, ale zas je to rok 1990...
BTW - není vhodnější ten přenos realizovat pomocí DMA?
Až do prvních 486 by to mělo být rychlejší + CPU může dělat něco užitečnějšího...
to by melo byt rychlejsi, co si pamatuju. V podstate prenos jednoho bajtu/2takty (protoze to je osmibitova sbernice), ciste teoreticky.
PCcko mivalo 3 DMA kanaly, ale jen jeden SW upotrbitelny (zase AFAIK, uz je to davno).
Pokud budu mluvit o všech 286 a prvních 386 (což je třeba efektivně 8let dlouhá doba), pak je DMA rychlejší a programátoři tu techniku stejně museli zvládnout, protože jak jste chtěli utilizovat zvukovou kartu, bez DMA to nešlo. Navíc to umožňovalo některé zajímavé efekty.
8237 DMA má 4 kanály 0 až 3 (tedy i na XT), PC-AT už mělo v kaskádě tyhle čipy dva, kdy první pracoval se šířkou 8bit a druhý 16bit, 386ka už byla dál.
Tak houby, houby, moje vidění světa je pokřivené realitou.
1978 .... Intel 8088/8086
1982 .... Intel 80286
1985 .... Intel 80386
1989 .... Intel 80486
1993 .... Intel Pentium (a rozpad ČSFR)
1995 .... Intel Pentium II
Na konci roku 1993 vyšel DOOM1, který v principu pro chod potřeboval 486ku, protože na 386ce nejede moc plynule...
Kdyby nebyla 486 běžně dostupný procesor, vydání by pozdrželi nebo hru lépe optimalizovali.
Máš tam chybu, W95 začínaly na Pentiu I, takže Pentium II přišlo později - 1997. A zapomněl jsi na MMX.
Danny: Ano, osobně jsem to jednou viděl u kamaráda a byl to opravdu zajímavý zážitek :-). 386, jaká přesně, to už nevím, a snad 4 (nebo spíš 8) MB RAM. Běželo to opravdu "závratnou" rychlostí.
jj DMA #1 je volny pro tyto ucely (i na puvodnim PC, jeste ne XT). #2 a #3 je pro diskety/disk, coz taky znamena "skoro volny", ale chce to vic pozornosti
BTW - fakt by mě zajímalo porovnání rychlosti s DMA, ale na 8086 by se asi žádné CYCLESTEALING neprojevilo...a obecně dost pochybuji, že by procesor něco mohl dělat, zatímco se děje DMA. ...i když...kdo ví...
HW nemam, ale DMA bude rychlejsi. Pokud REP MOVSB trva 9+17n, tak proste i kdyby DMA bylo rekneme X+4n, tak proste pro 16000 bajtu to je rychlejsi.
Našel jsem porovnání přímo s MOVSB a DMA/8237 má být ~"tak nějak" 2x rychlejší.
Na 286/386 bude CPU moct dělat užitečnější práci, zatímco se DMA tuží :-)
Možná spustit DMA přenos, zatímco se řeší sběr stisků z klávesnice.
Jo jeste dodam dulezitou vec. Radic DMA mel adresove registry jen 16bitove, takze do IBM PC dodelali 4 bitove latche (zachytne registry) pro horni 4 bity 20 bitove adresy (pro kazdy kanal 1 latch). Takze je teoreticky mozne pracovat s bloky 64 kB (to je fajn), ale musi byt zarovnane prave na 64 kB. U Video RAM to nevadi, u naseho zdrojoveho obrazku uz jo a chce to lepsi pripravu dat.
Tak jsem si to myslel špatně, 8237 umí přenášet data pamět-pamět (po 64KB blokách). Co se týká práce CPU tak jsem se dočetl, že existuje režim DMA kdy se o sběrnici střídá řadič DMA s CPU (jestli jsem to správně pochopil).
Tak těch možností práce je víc, můžeš přenášet slova a nemusí to být hned blok paměti. Nebo blok, ale rozdělíš ho na několik menších přenosů. Podle mě to je o tom, co zrovna tvůj program bude dělat a jak chytře si na pozadí přeneseš data - a jestli to dává smysl.
S tím DMA si nejsem tak jistý jestli to jde. V PC je použit obvod 8257 v pozdějších pak dva zapojené kaskádovitě. Podle mne DMA umužnuje pouze přenos mezi periferií (signály IOR, IOW) a pamětí (signály MEMR, MEMW). A jestli se nepletu tak Videoram v grafické kartě je zapojena jako klasiká pamět.
Procesor po dobu přenosu DMA nemůže dělat nic užitečnějšího, protože nemá sběrnici a jen čeká až DMA skončí. Přenos je rychlejší už jen z toho principu, že po sběrnici jdou jen data. Pokud by to dělal procesor pomocí smyčky, tak musí načítat neustále dokola instrukce. Odhaduju to na poměr instrukce : data - 5 : 1.
V případě použití "rep movsw" mi odpadne načítání instrukce, a tak by to mohlo být srovnatelné s DMA
Jestli mám v myšlenkách někde chybu, opravte mne, rád se nechám poučit
DMA řadič na PC měl čtyři kanály 8bitové a čtyři 16bitové na 4.77MHz a 1.5MB/s max.
Pro kopírování bloku dat byly potřeba dva DMA kanály, ale na XT a 286 byl jeden kanál vyhrazený pro refresh DRAM. Jeho přeprogramování vedlo na chybu parity paměti.
386 už uměla 32bitové přenosy, kopírování RAM bylo mnohem rychlejší přes CPU než přes pomalé DMA.
16bit DMA na ISA sběrnici se používalo na sekvenční přenos dat do/ze zvukové karty.
PCI sběrnice už uměla "bus master" přímý přístup do paměti kamkoliv, bez asistence DMA řadiče.
Četl jste dokumentaci, ale nejsem si jistý, jestli jste jí správně pochopil.
9. 7. 2024, 23:11 editováno autorem komentáře
zkusim to naprogramovat (to by mela byt trivka, par registru), ale testy budou jen na DOSBoxu, protoze 286 mi odesla do vecnych lovist a nejstarsi PCdlo, co mam, je 486DX2
Na 486ce už je rychlejší memcopy(), jak se objevila cache přímo v procesoru, přestalo DMA paměť->paměť dávat smysl.
Samozřejmě že DMA->zařízení a zařízení<-DMA fungovalo dál.
Nicméně kdyby byl kousek kódu na vyzkoušení, bylo by to určitě moc fajn.
Někoho bych poprosil o vyzkoušení.
Môžem testnúť na Amstrade PPC 640, tiež je tam CGA kompatibilná grafika so 6845 a čo som zbežne skúšal svoje historické dosácke počiny, chodia na tom (dokonca vcelku svižne a zároveň úsporne oproti originálnemu XT, je tam soňácky CMOS V30 taktovaný na 8 MHz).
Na 286 přeprogramování kanálu 0 vedlo na chybu parity paměti, protože se tím zastavil refresh DRAM. Osobně vyzkoušeno někdy v roce 93-94.
Na 386 byl asi refresh řešený jinak (a nebo se jen nepouživaly paritní paměti).
Na 386 bylo REP MOVSD, šlo kopírovat i delší bloky než 64KB.
Na 486 už se zneužívalo FPU pro memcpy po 64bitech.
S DMA pro zvukovku problém nebyl.
DMA měl umět i paralelní port, ale nepodařilo se mi to rozchodit.
Nevím do jaké míry DOSBox emuluje low level hardware, který se přímo nepoužíval v gameskách.
ISA-DMA paměť->paměť bylo důležité i pro využití UMB, hlavně před hromadným využíváním chytrostí jako Dos4GW.
"As I said ISA-DMA is critical in the created UMBs, so SMARTDRV's floppy cache may not work if it is loaded high."
https://www.uwe-sieber.de/umbpci_e.html
Mluvíme o době, kdy bylo 1 MB fakticky maximum, kdy někdo měl jen 512 kB a ti majetní 1MB. Dokonce první 386ky se často expedovaly jen s jedním MB RAM.
Děkuji za daší článek. Ani jsem do ted nevěděl, že 8086 má instrukce pro blokové přenosy. Přiznávám, že zas tak pečlivě jsem jí nestudoval a v poslední době jsem učil základy JSA na střední škole a tam jsem instrukční sadu 8086 úmyslně hodně zkrouhl na "základní" instrukce (nebylo mým cílem vychovávat programátory 8086 ale na příkladu 8086 - PC bylo dostupné - ukázat základy programování v assembleru. Od příštího roku už to budu uřit jen na AVR).
Napadlo mne, co kdyby byl výchozí obrázek uložen ve formátu liché řádky a za ním pak sudé? Potom by vykrelení mohlo být realizováno jednou (možná dvěma) instrukcema blokového přenosu.
Jojo, přesně tohle jsem před lety řešíval. Problém se sněžením se ale týkal jen prvních sérií CGA karet. U pozdějších už to nebylo a u klonů také většinou ne. Já měl počítač PP-06, což je československý klon PX/XT se sovětským ekvivalentem i8088. Zajímavé je, že tenhle počítač má hardwarovou úpravu CGA karty, kdy je originální znaková sada nahrazena českou sadou, ovšem nikoliv Latin2, ale kód bratří Kamenických.
Variantou čekání na paprsek by také bylo přenastavit systémový časovač a sesynchornizovat ho s obnovovací frekvencí CGA. Pak by bylo přerušené generované s IRQ 0.
Ale na druhou stranu, ve chvíli, kdy je k dispozici jen jedna stránka videopaměti (týká se grafických režimů, ne textových), tak podobná sofistikovaná řešení stejně ztrácí smysl.