OldComp.cz

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


Právě je 16.04.2024, 11:34

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 11 ] 
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: 93
Has thanked: 0 time
Been thanked: 10 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
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3659
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 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: 93
Has thanked: 0 time
Been thanked: 10 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 9929 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: 93
Has thanked: 0 time
Been thanked: 10 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
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3659
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 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: 230
Has thanked: 6 times
Been thanked: 43 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  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 19.01.2021, 11:23 
Offline
Kecálek
Uživatelský avatar

Registrován: 11.10.2020, 21:29
Příspěvky: 93
Has thanked: 0 time
Been thanked: 10 times
Aha, asi blbost tedy ta moje otázka, ale díky.

Ještě se zeptám, jaký [makro] asembler monitor tady používáte.
Našel jsem tohle,
https://commodore.software/downloads/ca ... assemblers

Jám mám zatím jen FCIII monitor,
je to slušnej tool do začátku na krátký prográmky co se volají z BASICu.

Dík

_________________
TK


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

Registrován: 16.05.2013, 13:18
Příspěvky: 230
Has thanked: 6 times
Been thanked: 43 times
Celkem populární klasika je Turboassembler.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 19.01.2021, 14:07 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3659
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
tcat píše:
jaký [makro] asembler monitor tady používáte.
Zo zaciatku som pouzival CBM prg studio 2.9.0, ale tam mi viac veci nevyhovovalo, tak som presiel na 64tass http://sourceforge.net/projects/tass64/
A debugger/monitor ten co je zabudovany v emulatore WinVice.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: MEMSET - nastaví block paměti
PříspěvekNapsal: 19.01.2021, 18:10 
Offline
Radil
Uživatelský avatar

Registrován: 23.05.2013, 20:30
Příspěvky: 322
Bydliště: Východní Čechy
Has thanked: 2 times
Been thanked: 48 times
tcat píše:
Ještě se zeptám, jaký [makro] asembler monitor tady používáte.


Na C64 asm - TurboMacroPro, IDE64 monitor
Na PC - 64tass, Vice jen pro debug

_________________
JMP $FCE2

C64, C128DCR, IDE64, SuperCPU64, 1541 Ultimate-II, MMC Replay, FC3, REU 2MB, Geroram512, NeoRAM 2MB, RR-Net, SilverSurfer, Wiznet64 , 1541-II,1571,1581,Oceanic


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

Registrován: 11.10.2020, 21:29
Příspěvky: 93
Has thanked: 0 time
Been thanked: 10 times
Tak ke čtění,

CJ
strojovy_jazyk_c64.pdf
Commodore_od_A_do_Z.pdf

AJ
Advanced_Machine_Code_Programming.pdf [mon FCIII]
Assembly_Language_Programming_with_the_Commodore_64.pdf [develop-64]
Inside_the_Commodore_64.pdf [develop-64]
Machine_Code_Master.pdf [jak naprogramovat vlastní ass/mon/editor]

První věc k pochopení, dekrement "1" dvou bytové hodnoty, musí jít přes Carry [sbc], Zero nestačí [dec],
MEMSET jsem opravil.

Kód:
! $FB,FC ... adresa počátku bloku
! $FD,FE ... délka bloku
! A ... hodnota

memset  tax
        ldy #$00
memloop txa
        sta ($fb),y
        inc $fb
        bne @1
        inc $fc
@1      sec
        lda $fd
        sbc #$01
        sta $fd
        bcs @2
        dec $fe
@2      ora $fe
        bne memloop
        rts

_________________
TK


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

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