OldComp.cz

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

Zde me bt odkaz na vai retro prty

Právě je 17.01.2021, 15:00

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: MEMSET - nastaví block paměti
PříspěvekNapsal: 07.01.2021, 14:36 
Offline
Kecálek
Uživatelský avatar

Registrován: 11.10.2020, 21:29
Příspěvky: 79
Has thanked: 0 time
Been thanked: 7 times
Zdarec,

Začínám se strojákem na C64, pro začátek v monitoru FCIII.
Překvapení je, jediný registr s 16bity je PC[IR].

Jak vlastně naplnit nějaký blok paměti určitou hodnotou.
Lze bez přepisování operandu instrukce STA?
Citace:
STA $aaaa ; [aaaa] adresa se přepisuje jinou instrukcí STA


Díky
Tom

_________________
TK


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 07.01.2021, 17:28 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 2948
Bydliště: Bratislava
Has thanked: 302 times
Been thanked: 552 times
tcat píše:
Začínám se strojákem na C64, pro začátek v monitoru FCIII.
Překvapení je, jediný registr s 16bity je PC[IR].
Je to proste OSEMBITOVY klop... ehm, procesor. Divim sa, ze vobec nejaky register je 16-bitovy :poke: :lol:
tcat píše:
Jak vlastně naplnit nějaký blok paměti určitou hodnotou.
Lze bez přepisování operandu instrukce STA?
Samozrejme, da sa to.

V zero-page si vyhradis dva bajty na 16-bitovu adresu, a do pameti pomocou tejto adresy mozes ist napriklad instrukciami
lda (indirect),Y
sta (indirect),Y

Pokial potrebujes ist len v ramci najblizsich 256 bajtov, mozes to zmenou registra Y, pokial potrebujes vecsi rozsah, tak potom zmenou tej 16-bitovej adresy co mas ulozenu v zeropage.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 09.01.2021, 17:41 
Offline
Kecálek
Uživatelský avatar

Registrován: 11.10.2020, 21:29
Příspěvky: 79
Has thanked: 0 time
Been thanked: 7 times
Tak jsem nakódoval `MEMSET'.
Využil jsem adresy $FB,..,$FE, 4 byty Zero Page
Nastaví 8000 bytů od adresy $2000 na nulu, tedy vymaže tento blok paměti.

Kreslím něco v jemné grafice a FOR ... POKE ..., 0 trvá dlouho.
Asi to jde nějak lépe, protože tohle je celkem dost instrukcí.


Přílohy:
memset.jpg
memset.jpg [ 110.48 KiB | Zobrazeno 244 krát ]

_________________
TK
Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 10.01.2021, 12:00 
Offline
Kecálek
Uživatelský avatar

Registrován: 11.10.2020, 21:29
Příspěvky: 79
Has thanked: 0 time
Been thanked: 7 times
Parametry:
$FB,FC ... adresa počátku bloku
$FD,FE ... délka bloku - 1

Začátek kódu plní tyhle adresy. Vlastní smyčka začíná na $1010.
Pro 8000 bytů [$1F40], hodnota druhého parametru má správně být $1F3F

Nedají se nějak využít časovače CIA pro manipulaci s pamětí?
Nebo jaké je jejich typické využití?

Našel jsem hodně knih o kódování C64, tak se vrhnu asi na toto.

_________________
TK


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 10.01.2021, 16:47 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 2948
Bydliště: Bratislava
Has thanked: 302 times
Been thanked: 552 times
tcat píše:
Nedají se nějak využít časovače CIA pro manipulaci s pamětí?
Nebo jaké je jejich typické využití?
Taka zakerna otazka - co maju casovace s pametou ? Podla sa pouzivaju na meranie casu. Ale ani ja o nich nic neviem, takze akekolvek informacie ma potesia :)

Btw. tu je moj memset ktory zvyknem pouzivat vo svojich 1k intrach pre C64:

Vstup:
X = vyssi bajt dlzky bloku (nizsi je 0)
Y = vyssi bajt adresy bloku (nizsi je 0)
A = bajt ktory sa ulozi do bloku
Kód:
memset  sty memadd+1
        ldy #$00
        sty memadd+0
memlop  sta (memadd),Y
        iny
        bne memlop
        inc memadd+1
        dex
        bne memlop
        rts
memadd su dva bajty v zero page ktore pouzivam pre adresaciu pameti v instrukcii STA (memadd),Y.

Vzdy ked pisem nejaky program , demo ci intro tak si vzdy organizujem pamet tak, aby vsetky vecsie tabulky a buffery zacinali na okruhlych adresach, t.j. adresach ktore maju aspon osem najnizsich bitov nulovych. Tym padom mi staci memset kde ma adresa a dlzka spodny bajt vzdy nulovy.
A to aj v pripade ze napr. mazem 1000 bajtovu obrazovku - proste zmazem celych 1024 bajtov a je to :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 10.01.2021, 17:19 
Offline
Kecálek

Registrován: 16.05.2013, 13:18
Příspěvky: 232
Has thanked: 6 times
Been thanked: 37 times
tcat píše:
Nedají se nějak využít časovače CIA pro manipulaci s pamětí?
Nebo jaké je jejich typické využití?

Jako že by se přesun paměti zadal CIA a nezatěžoval by procesor? Tohle neumí... Časovače se můžou použít pro IRQ, před časem o tom psal článek: http://c64.cz/index.php?recenze=code_preruseni_c64


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ů: 6 ] 

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 1 návštěvní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