Zde bych se chtel venovat moznosti implementace DMA do romky SAM COUPE a jeho halsimu vyuziti treba u her.
Zacneme tedy romkou:
Original romka v sam coupe jede nebrzdene na 6.0MHz, narozdil od instrukci umistenych v ramce sama. Nektery software tak zamerne vyuziva ruzne rutiny z romky kvuli zrychleni. I tak ale neni zrychleni nijak zavratne, protoze jedine co se rychle provadi, je cteni kodu instrukci v rom a veskera prace s ramkou je opet pomala. V romce se nachazi kratce za NMI rutinou tento kod:
Kód:
LDIR
RET
LDDR
RET
CPIR
RET
CPDR
RET
OTIR
RET
OTDR
RET
Zde se primo nabizi moznost presmerovani na DMA prenos. Kazda dvojice instrukci zabira presne 3 bajty, takze neni problem je prepsat na JP xxxx kde odskocime na DMA rutinu, ktera bude emulovat puvodni blokove instrukce. Pruser by nastal pokud by se casto prenasel kratsi blok bajtu, pak by jen samotne nastaveni DMA cipu zbytecne brzdilo. Holt se to vyplati az pri delsim bloku dat.
Zrychlit by se dal take reset ramky po zapnuti (to je ale asi zbytecne).
Pak take nahrada nekterych LDIR instrukci, ktere se staraji o prenos dat klidne o velikosti nekolik set kB. Romka si vse prepocita, rozseka na bloky do velikosti az 16kB, realizuje prenos (na nekolikrat)... A zde by DMA uz zabodovalo.
Co se srolovani obrazovky tyce, SAM tusim podporuje i scrolovani v oknech s nastavitelnou velikosti a to asi neni pripad zrovna pro DMA. Ale za urcitych podminek by se i zde dalo DMA vyuzit. Napriklad pokud je sirka okna dotatecne velka, protoze jinak by samotne nastaveni DMA cipu brzdilo tak, ze by prenos byl bud pomalejsi, nebo podobne rychly jako bez DMA podpory.
Prace s promennyma by se dala zrychlit opet diky rezimu DMA vyhledavani bloku dat v pameti.
Veskere tyto patche v romce ale zaberou nejake misto navic a take se tim narusi casovani rutin romky, ale to je snad jasne...
Jen tak v rychlosti ve volne chvilce (maluju byt) jsem mrknul na disass romky a zda se, ze prave v rutine STRMOV jsou prave ony dulezite instrukce LDIR a LDDR, ktere se staraji o prenosy bloku dat v ramce.
DMA by slo vyuzit napriklad i pri praci s ramdiskem (pokud to DOS podporuje) nebo pro praci s ATOM LITE (IDE interface s CF kartou). Stary ATOM bohuzel na DMA pouzit bez uprav nelze. Koho by napadla treba moznost vyuzit DMA pro prenos dat z ramky na D/A prevodnik, tak je to zbytecne, protoze DMA je az moc rychle a behem okamziku by preneslo do D/A prevodniku tuny kB dat. To je pak mrhani mistem. DMA je v DATA-GEARu zapojene tak, ze muze podporovat pouze blokovy rezim prenosu a neumi rezim, kdy by externi zarizeni samo davalo pozadavek naprenos dalsiho bajtu (idealni prave pro D/A).
Pro zacatek bych mohl napsat rutinku, ktera zajisti jednoduchy prenos bloku pameti a dale odvozene rutiny zajistujici presnou nahradu instrukce LDIR. Pak me napada rychla uprava Busyho DMA demicek, aby to behalo i na SAM COUPE. Dale me napada jednoducha DMA rutinka, ktera by zajistovala vykreslovani obrazce do oblasti borderu. Vlastne by DMA prenaselo jakousi "BYTEMAPU" (ano, jedna se o mapu celych bajtu, nikoli o bitmapu) na port borderu (#FE). Uff jestli dobre pocitam, tak 8 taktu by trval prenos kazdeho bajtu = vznikl by v borderu rastr 8 pixelu siroky. Dma by po "vykresleni" zvladlo i scrolovani pameti, takze by pri 50Hz mohlo krasne scrolovat ci animovat obrazce v borderu. Obrazcem muze byt cokoli co se da nakreslit z barevnych bloku sirky 8 pixelu a vysky 1 pixel. Podobne to dela i BUSYho DMA demo level 3 na ZX Spectru.
Prozatim jsem se zameroval pouze na rozsirene graficke rezimy 3 a 4, ktere nemaji zadne atributove omezeni, ale pouzivaji barevne pixely. SAM ale umi i ZX rezim a nebo multicolor. Diky temer 4x mensi velikosti videoram v ZX modu muze DMA zvladat i fullscreen operace levou zadni pri plnych 50Hz a jeste bude nejaky cas pro CPU. DMA scroll v ZX modu pujde s presnosti na 1 bajt = 8 pixelu krok horizontalne a vertikalne to bude slozitejsi diky nelinearite rozlozeni dat ve videoram. V multicolorovem rezimu uz je to lepsi. Sice videoram zabira dvojnasobek nez ZX rezim, ale furt je to polovina nez zabiraji graficke mody 3 a 4. Multicolor rezim ma linearni usporadani dat, narozdil o multicolor modu u TIMEXu 2048 ci ruskych klonu. Takze i zde by mel jit realizovat jednoduchy DMA scroll vertikalne. Sice by se DMA muselo poustet na 2x, protoze 6144 bajtu je pixelova cast a dalsich 6144 bajtu s pixelama lezi o 2048 bajtu dale. Na veskere graficke operace by i v pripade pouziti DMA mela byt pouzita metoda prace se dvema videoram. Jinak to nepusobi moc pekne...