OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 16.04.2024, 18:39

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 9 ] 
Autor Zpráva
 Předmět příspěvku: Softwarová podpora DMA u SAM Coupé
PříspěvekNapsal: 22.08.2015, 18:44 
Offline
Pan Štábní

Registrován: 29.06.2013, 16:52
Příspěvky: 1614
Has thanked: 31 times
Been thanked: 357 times
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...

_________________
http://velesoft.speccy.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 00:35 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
Citace:
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.

A čo takto: v mode 3 a 4 sa dá vypnuť zobrazovanie bitmapy a máme border na celú obrazovku. Teraz stači meniť farbu, ktorú
máme nastavenú ako border a dostaneme 128 farebný mód so šírkou pixelu 8? ,kedže prístup do pamete není brzdený ASICom.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 00:47 
Offline
Pan Štábní

Registrován: 29.06.2013, 16:52
Příspěvky: 1614
Has thanked: 31 times
Been thanked: 357 times
Antony/DTA píše:
A čo takto: v mode 3 a 4 sa dá vypnuť zobrazovanie bitmapy a máme border na celú obrazovku. Teraz stači meniť farbu, ktorú máme nastavenú ako border a dostaneme 128 farebný mód so šírkou pixelu 8? ,kedže prístup do pamete není brzdený ASICom.


Tak to ale nefunguje. V rezimech 3 a 4 plati, ze nastavenim bitu 7 na portu 254 dojde k vypnuti generovani obrazu. ASIC jen vypne RGB vystup a na obrazovce bude uz jen cerna barva a barva borderu nema na to vliv. Pri vypnutem obraze pak ASIC stale bude procesor brzdit, ale jen castecne, stejne jako v dobe, kdy se vykresluje border.

_________________
http://velesoft.speccy.cz/


Naposledy upravil VELESOFT dne 23.08.2015, 01:17, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 01:16 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 377
Has thanked: 28 times
Been thanked: 120 times
To je škoda, na Amige to bez bitplanov ide.
No tak už zostáva len ExtMem.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 01:29 
Offline
Pan Štábní

Registrován: 29.06.2013, 16:52
Příspěvky: 1614
Has thanked: 31 times
Been thanked: 357 times
Dost casu by se dalo usetrit tim, ze by se v oblasti, kde je v obraze cerna plocha, vypnul obraz. Kdyby pritom byl border cerny, vypnuti obrazu by nebylo znatelne. V dobe vypnuteho obrazu by pak CPU bezel rychle jako v borderu a tedy i DMA by melo 2x vetsi rychlost nez pri zapnutem obraze :-) V demu by se to dalo slusne vyuzit.

_________________
http://velesoft.speccy.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 02:11 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3051
Has thanked: 2200 times
Been thanked: 901 times
VELESOFT píše:
Original romka v sam coupe

Vedle kanonického zdrojáku ROMky je přehlednější zde: https://github.com/simonowen/samrom

Jak jsme brainstormingovali :joint:, tak zkusím příkaz SCROLL.
"If you try to SCROLL the screen away by doing 255 x ROLL 3 then you may be disappointed at the speed - although it is rather inevitable. Instead you must use bigger rolls; something like FOR n=1 TO 8: SCROLL 3,32: NEXT n could be acceptable.... In machine code, ROLL and SCROLL are dealt with by a routine at &14B. "A" register = 0 for SCROLL or 255 for ROLL. C = direction, B = no. of pixels to move. L & H = x and y co-ords of top left corner E = length in bytes, D = height in pixels. (0 at top of the screen)"

A dále INSTR?
"PRINT INSTR(MEM$(65536 TO 80000),CHR$ 255) would search for the first 255 byte in the area of memory from 65536 to 80000.
MASTERBASIC has a LOCN function which does the same thing, faster."

_________________
// na co myslím, když sedím u oldkompů: režim


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 14:09 
Offline
Pan Štábní

Registrován: 29.06.2013, 16:52
Příspěvky: 1614
Has thanked: 31 times
Been thanked: 357 times
SCjoe píše:
Jak jsme brainstormingovali :joint:, tak zkusím příkaz SCROLL.
"If you try to SCROLL the screen away by doing 255 x ROLL 3 then you may be disappointed at the speed - although it is rather inevitable. Instead you must use bigger rolls; something like FOR n=1 TO 8: SCROLL 3,32: NEXT n could be acceptable.... In machine code, ROLL and SCROLL are dealt with by a routine at &14B. "A" register = 0 for SCROLL or 255 for ROLL. C = direction, B = no. of pixels to move. L & H = x and y co-ords of top left corner E = length in bytes, D = height in pixels. (0 at top of the screen)"

A dále INSTR?
"PRINT INSTR(MEM$(65536 TO 80000),CHR$ 255) would search for the first 255 byte in the area of memory from 65536 to 80000.
MASTERBASIC has a LOCN function which does the same thing, faster."


No, prikaz scroll a roll mohou posouvat horizontalne s presnosti na 1 pixel, coz je dost pomale. Pokud je posun o nasobek dvou pixelu, tak se pouze presouvaji cele bajty, coz by DMA melo zvladnout. Pri posunu o lichy pocet pixelu je to pruser, protoze se musi presouvat 4 bity z kazdeho bajtu a casove to je daleko narocnejsi. DMA umi prenaset jen cele bajty, takze bude pouzitelne jen v ramci posunu o sudy pocet pixelu. Ted jsem mluvil i modu 4 s rozlisenim 256x192, ale v hi-res modu 3 s rozlisenim 512x192 to bude jeste vice omezene. Zde romka posouva grafiku nikoli po jednom pixelu, ale po dvou. Rutina pro rotaci pixelu je v romce pro rezimy 3 a 4 spolecna a protoze se v modu 4 posouva po 4 bitech, v modu 3 to odpovida dvema pixelum, protoze 1 pixel v hi-res zabere jen 2 bity. DMA posun by byl pro oba rezimy opet spolecny, ale v modu 3(hi-res) pak bude posun o 4 pixely, nebo nasobek ctyrech. Vertikalne muze byt posun ve vsech rezimech s presnosti na 1 pixel(mikroradek). Graficke mody 1 a 2 ani nezminuju, protoze u nich sam romka nedovoluje pouziti SCROLL ci ROLL prikazu.

Ohledne volneho mista v rom:
Casti puvodnich rutin se mohou smazat a nahradit primo novyma rutinama pro DMA. Rutina pro reset ramky by se dala zjednodusit na pouhe smazani bez testu. Nektere chybove hlasky by slo zkratit. Jinak asi neni sance. Leda napatchovat romku, ktera neni upravena pro ATOM/ATOM LITE. Mozna by bylo jednodussi nejak upravit rom tak, aby umela za urcitych podminek presmerovat vlastni rutiny na nase vlastni, umistene v ramce, treba ve strance pred dosem. V romce by mela byt tabulka adres rutin pro jednotlive prikazy. Stacilo by mozna jen aby romka testovala pritomnost nejake systemove promenne a mela moznost pouzit jinou tabulku adres umistenou nekde v ram. Nikdy jsem to nezkoumal, ale mozna ze neco podobneho romka sama uz umi...

_________________
http://velesoft.speccy.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 23.08.2015, 17:36 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3051
Has thanked: 2200 times
Been thanked: 901 times
VELESOFT píše:
Mozna by bylo jednodussi nejak upravit rom tak, aby umela za urcitych podminek presmerovat vlastni rutiny na nase vlastn

Vrtám se v tomhle:

1. Přidat příkazy
adding new commads
- Match the keyword.
- Print the keyword.
- Syntax check the command.
- Execute the command.

2. Simulovat basicový příkaz/řádek
to provide somewhere in memory, the tokenised version of a BASIC line. We adjust some system pointers to fool the ROM into thinking this is the normal line, and then we run it

3. Ošetřit neznámé a chybné příkazy:
MTOKV Called if the ROM does not recognise a potential spelled-out keyword. On entry, DE points to the word. On exit, the zero flag should indicate whether or not the keyword is valid...

4. Využít tabulku vektorů pro vybrané příkazy:
částečně pracovat by šlo s JROLL, JPUT a JGRAB

_________________
// na co myslím, když sedím u oldkompů: režim


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Softwarova podpora DMA u SAM COUPE
PříspěvekNapsal: 24.08.2015, 11:50 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3660
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
VELESOFT píše:
Antony/DTA píše:
A čo takto: v mode 3 a 4 sa dá vypnuť zobrazovanie bitmapy a máme border na celú obrazovku. Teraz stači meniť farbu, ktorú máme nastavenú ako border a dostaneme 128 farebný mód so šírkou pixelu 8? ,kedže prístup do pamete není brzdený ASICom.
Tak to ale nefunguje. V rezimech 3 a 4 plati, ze nastavenim bitu 7 na portu 254 dojde k vypnuti generovani obrazu. ASIC jen vypne RGB vystup a na obrazovce bude uz jen cerna barva a barva borderu nema na to vliv.
Tak to je skoda ze to nejde po celom obraze. Tak aspon v oblasti borderu by to mohlo ist. Inak presne tento efekt vyuzivam na ZX Spektre v mojom DMA Level 3 deme - v hornej casti borderu som si DMAckom spravil graficky rezim s velkostou pixelu 8x1 bod a robim v nom 10 roznych efektov. Pricom posledne dva efekty su specialne - vdaka scrollu a 25 Hz preblikavaniu je zdanliva velkost pixela iba 4x1 bod :)


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 9 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz