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.
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.
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.
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.