OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů
Právě je 22 říj 2017, 11:15

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 13 ] 
Autor Zpráva
PříspěvekNapsal: 09 črc 2017, 13:21 
Offline
Radil

Registrován: 23 čer 2013, 22:49
Příspěvky: 486
Has thanked: 25 times
Been thanked: 86 times
Potřeboval bych vynulovat část paměti pro pole a přes POKE mi to přijde pomale.
Kód:
10 LET z=32768
20 FOR a=z TO z+100: POKE z,0: NEXT a


Zkouším co uděla CLEAR 32767 a bez výsledku...


Nahoru
 Profil  
 
PříspěvekNapsal: 09 črc 2017, 14:21 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 11 čer 2013, 14:27
Příspěvky: 1279
Has thanked: 779 times
Been thanked: 209 times
Počítám, že nepoužíváš toolkity ani Betabasic.

Paměť jde nejrychleji mazat, kopírovat, přesunovat a všelijak měnit krátkým prográmkem ve strojovém kódu, umístěném do prvního řádku basicového programu, za REM.
Kam přesně jej dát, resp. struktura basic. programu je pěkně popsána na str. 12 knihy 40 nej-rutin....


Nahoru
 Profil  
 
PříspěvekNapsal: 09 črc 2017, 14:41 
Offline
Radil

Registrován: 23 čer 2013, 22:49
Příspěvky: 486
Has thanked: 25 times
Been thanked: 86 times
Díky, takže není nějaký snazší způsob jako nastaveni toho RAMTOP a že se to po zavolání RUN vymaže samo.


Nahoru
 Profil  
 
PříspěvekNapsal: 09 črc 2017, 14:58 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 11 čer 2013, 14:27
Příspěvky: 1279
Has thanked: 779 times
Been thanked: 209 times
No, na obyč. basic expert nejsem, to nevím.
Ještě koukám do poznámek, že jsem kdysi pro ukládání proměnných používal printer buffer od 23296 do 23327.
A ten pak smazal voláním romky RANDOMIZE USR 3807.


Nahoru
 Profil  
 
PříspěvekNapsal: 10 črc 2017, 07:04 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1678
Bydliště: Bratislava
Has thanked: 170 times
Been thanked: 300 times
Zasadna otazka: Naco potrebujes kvoli polu v basicu mazat pamet ?

CLEAR 32767 iba zmaze premenne v basicu a nastavi ramtop na tuto hodnotu. Samotnu pamet nenuluje - skor naopak, pri rozsiahlejsom mazani premennych v neobsadenej pameti nechava riadny bordel.

Ako uz vyssie napisal SCjoe, toto je typicka uloha pre strojak, takze najrychlejsi sposob bude pouzit kratucku strojakovu rutinku. Nemusis ju mat len v 0 REM ale mozes ju naPOKEovat prakticky kamkolvek, hoci aj do obrazovky (aby nikde nezavadzala).

Inak strojakove rutinky v basicovom riadku za REM prilis nedoporucujem, jednak basic nemusi byt na konstantnej adrese - rozne systemy ako IF1 alebo TRDOS ho posuvaju a dvak 128 editor z toho obvykle zblbne a zosype sa. Kvoli 128 basicu nedoporucujem pouzivat ani printer buffer na #5B00 pretoze 128 basic tam ma prepinacie rutinky a svoje systemove premenne a zmazanie buffera je isty crash systemu.

Ale aj napriek tomu, existuje sposob ako v cistom basicu prist k vynulovanej pameti aj inak ako prikazom NEW. Ked dimenzujes ciselne pole, tak sa jeho prvky inicializuje na nulove hodnoty, co v praxi znamena, ze po prikaze DIM a(x) ziskas 5*x bajtov vynulovanej pameti (kedze kazda ciselna hodnota zabera 5 bajtov). Jedinu nevyhodu to ma ze tato pamet je pod ramtopom.


Nahoru
 Profil  
 
PříspěvekNapsal: 10 črc 2017, 10:33 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 28 led 2016, 22:57
Příspěvky: 1557
Has thanked: 67 times
Been thanked: 103 times
Jinak, co si vzpominam, tak nejrychlejsi mazani bylo nejak pomoci zasobniku - predpokladam, ze nejaka smycka s push, vychazelo to o par taktu rychlejc nez bezne mazani pomoci registru. Detaily si nepamatuju.

_________________
ZX-81, ZX Spectrum, ZX Spectrum+, ZX Spectrum+2, Sinclair QL, Timex 1000 / 1500, CPC464, CPC6128, GX4000, Atari 2600 / 2600Jr, 600XL / 800XL / 130XE, Atari 260ST / 520ST / 1040ST / 1040STE / Mega / MegaSTE, C16, C64, C128, C128D, Amiga A500, Macintosh IIcx / IIvx / SE / LC II / 630 / 7300 / PowerMac G3 / G4 / G5, Laser210-8k / VZ200, Philips VG8010/8020, Canon V-20, Sony HitBit, Sanyo MPC-100, TI 99/4A, Didaktik Gama / M, IQ 151, PMD-85, MZ-700, PCW8256, Acorn Electron, CoCo, CoCo2, Oric Atmos, SGI Indy / Octane 2 / O2 / Indigo 2, HP-9000 715/80 a 715/100, IBM RS6000, Thomson MO5 / MO5E / MO6 / TO8, Dragon 32, Matra Alice, IBM PS/2 Model 30


Nahoru
 Profil  
 
PříspěvekNapsal: 10 črc 2017, 11:44 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1678
Bydliště: Bratislava
Has thanked: 170 times
Been thanked: 300 times
Kubik píše:
Jinak, co si vzpominam, tak nejrychlejsi mazani bylo nejak pomoci zasobniku - predpokladam, ze nejaka smycka s push, vychazelo to o par taktu rychlejc nez bezne mazani pomoci registru. Detaily si nepamatuju.
Tak je pravda ze 10 GOSUB 10 maze pamet rychlejsie ako FOR ... POKE ... NEXT ale zase tu ani tak nejde o co narychlejsie mazanie v strojaku, ale aby to v basicu netrvalo neumerne dlho.


Nahoru
 Profil  
 
PříspěvekNapsal: 10 črc 2017, 11:56 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 11 čer 2013, 14:27
Příspěvky: 1279
Has thanked: 779 times
Been thanked: 209 times
Kubik píše:
Jinak, co si vzpominam, tak nejrychlejsi mazani bylo nejak pomoci zasobniku...

Jo, ulozit stavajici SP, nahodit novy na konec mazane pameti - poradne jsem to ocenil az u 24 KB screenu samika, tech PUSHu jsem tam mel treba i 1024 :-). A tusim to pouzivali taky u mazani pracovnich obrazovek, ktere mely normalni sled pixelu - nejdrive se screen nebo jeho cast (treba dve tretiny) namaloval nekde v pameti a pak rychle preklopil od 16384.

Je to na konci stranky zde: http://zxsnippets.wikia.com/wiki/Clearing_screen


Nahoru
 Profil  
 
PříspěvekNapsal: 10 črc 2017, 15:16 
Offline
Kecálek

Registrován: 18 říj 2014, 22:10
Příspěvky: 147
Has thanked: 8 times
Been thanked: 28 times
SCjoe píše:
Jo, ulozit stavajici SP, nahodit novy na konec mazane pameti - poradne jsem to ocenil az u 24 KB screenu samika...

Nedávno som si všimol, že aj CLS v ROM-ke používa inštrukcie PUSH. Asi 8* v cykle, ale neviem či je to tak aj v pôvodnej romke, ja som to videl v "HD BOOTROM V2".


Nahoru
 Profil  
 
PříspěvekNapsal: 11 črc 2017, 06:59 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1678
Bydliště: Bratislava
Has thanked: 170 times
Been thanked: 300 times
Antony/DTA píše:
SCjoe píše:
Jo, ulozit stavajici SP, nahodit novy na konec mazane pameti - poradne jsem to ocenil az u 24 KB screenu samika...

Nedávno som si všimol, že aj CLS v ROM-ke používa inštrukcie PUSH. Asi 8* v cykle, ale neviem či je to tak aj v pôvodnej romke, ja som to videl v "HD BOOTROM V2".
V povodnej romke sa maze poctivym LDIRom:
Kód:
02379   0E57 54                  ld      D,H                     ;; #0E57  startovni adresa do _DE
02380   0E58 5D                  ld      E,L                     ;; #0E58
02381   0E59 36 00               ld      (HL),0                  ;; #0E59  smazani jednoho pixelu
02382   0E5B 13                  inc     DE                      ;; #0E5B  pro smycku _DE +1
02383   0E5C ED B0               ldir                            ;; #0E5C  smazani vsech dalsich pixelu


Nahoru
 Profil  
 
PříspěvekNapsal: 11 črc 2017, 19:54 
Offline
Radil

Registrován: 23 čer 2013, 22:49
Příspěvky: 486
Has thanked: 25 times
Been thanked: 86 times
Psal jsem ten 5. program pro projekt Euler https://projecteuler.net/problem=5. Konkrétně z toho zadani na facebooku ve skupině BASIC on the ZX Spectrum. https://www.facebook.com/groups/ZXBasic/?fref=ts

Chtěl jsem to rychlé tak jsem to řešil pomocí Erathosthenova síta. https://cs.wikipedia.org/wiki/Eratosthenovo_s%C3%ADto

Přes pole DIM jsem to zkoušel taky, ale bylo to pomalejší jako si to napoukovat do paměti. Kód jsem ukazoval už tam.


Přílohy:
delitel2.z80 [5.44 KiB]
17 krát
code17.png
code17.png [ 7.71 KiB | Zobrazeno 624 krát ]
code16.png
code16.png [ 10.13 KiB | Zobrazeno 624 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 12 črc 2017, 07:58 
Offline
Pan Štábní

Registrován: 22 kvě 2013, 20:14
Příspěvky: 1678
Bydliště: Bratislava
Has thanked: 170 times
Been thanked: 300 times
Ako to ze DIM bolo pomalsie ako POKE ? Ako presne si to robil ?


Nahoru
 Profil  
 
PříspěvekNapsal: 13 črc 2017, 18:32 
Offline
Radil

Registrován: 23 čer 2013, 22:49
Příspěvky: 486
Has thanked: 25 times
Been thanked: 86 times
Busy píše:
Ako to ze DIM bolo pomalsie ako POKE ? Ako presne si to robil ?

Koukám že jsem mazal ve smyčce na začátku i to pole, protože jsem nevěděl že se automaticky vymaže.


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

Všechny časy jsou v UTC + 1 hodina


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