OldComp.cz

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


Právě je 28.03.2024, 23:25

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 12 ] 
Autor Zpráva
PříspěvekNapsal: 09.07.2017, 14:21 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 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...

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
PříspěvekNapsal: 09.07.2017, 15:21 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3025
Has thanked: 2192 times
Been thanked: 894 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....

_________________
// na co myslím, když sedím u oldkompů: Blood Products from Genetic Vaccine Recipients


Nahoru
 Profil  
 
PříspěvekNapsal: 09.07.2017, 15:41 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 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.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
PříspěvekNapsal: 09.07.2017, 15:58 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3025
Has thanked: 2192 times
Been thanked: 894 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.

_________________
// na co myslím, když sedím u oldkompů: Blood Products from Genetic Vaccine Recipients


Nahoru
 Profil  
 
PříspěvekNapsal: 10.07.2017, 08:04 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 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.07.2017, 11:33 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 28.01.2016, 23:57
Příspěvky: 3756
Has thanked: 213 times
Been thanked: 388 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.

_________________
Nikdy nediskutujte s blbcem. Stáhne vás na svoji úroveň a vyhraje zkušeností.


Nahoru
 Profil  
 
PříspěvekNapsal: 10.07.2017, 12:44 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 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.07.2017, 12:56 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3025
Has thanked: 2192 times
Been thanked: 894 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

_________________
// na co myslím, když sedím u oldkompů: Blood Products from Genetic Vaccine Recipients


Nahoru
 Profil  
 
PříspěvekNapsal: 11.07.2017, 07:59 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 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.07.2017, 20:54 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 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]
667 krát
code17.png
code17.png [ 7.71 KiB | Zobrazeno 13528 krát ]
code16.png
code16.png [ 10.13 KiB | Zobrazeno 13528 krát ]

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH
Nahoru
 Profil  
 
PříspěvekNapsal: 12.07.2017, 08:58 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Ako to ze DIM bolo pomalsie ako POKE ? Ako presne si to robil ?


Nahoru
 Profil  
 
PříspěvekNapsal: 13.07.2017, 19:32 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1100
Has thanked: 100 times
Been thanked: 157 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.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


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

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