OldComp.cz

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


Právě je 26.04.2024, 10:21

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 18 ]  Přejít na stránku 1, 2  Další
Autor Zpráva
 Předmět příspěvku: Triky s POKE sytémových proměnných
PříspěvekNapsal: 16.05.2013, 19:01 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 19:27
Příspěvky: 1011
Has thanked: 231 times
Been thanked: 221 times
Hledám ucelený seznam POKE pro nastavování systémových proměnných, např. POKE 23609,x kde x je délka pípnutí kláves, 23739,CODE "o" pro zamezení vepsání hlavičky do obrazovky atd. Nic nemůžu na netu najít a potřeboval bych pár POKE, které jsem kdysi znal ale zapomněl jsem se. Typicky potřebuju POKE, který zamezí výpisu Start tape and press any key při SAVE - to vím, že jsou dva druhy, jeden jakoby sám stiskne klávesu, takže se ten výpis na chvíli ukáže a editační zóna se smaže a já potřebuju ten druhý, kdy se editační zóna vůbec nemaže a nevypíše se nic. Dále pak POKE na nastavení PAPERu a INKu obrazovky.

_________________
Have you played ATARI today?


Nahoru
 Profil  
 
PříspěvekNapsal: 16.05.2013, 20:03 
Offline
Site Admin
Uživatelský avatar

Registrován: 05.04.2013, 15:29
Příspěvky: 2395
Bydliště: Starý Vestec
Has thanked: 427 times
Been thanked: 446 times
Tohle bylo v nejakem cisle ZXM... jeste kdyz ho vydavala proxima.

_________________
Amiga Sinclair Didaktik Sam_Coupé Enterprise SAM440ep μA1 MacBook_Air Mac_Mini_MOS CPC Atari MSX Acorn C64 RetroPC

http://party.oldcomp.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 17.05.2013, 07:37 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 19:27
Příspěvky: 1011
Has thanked: 231 times
Been thanked: 221 times
Starej_Mraf píše:
Tohle bylo v nejakem cisle ZXM... jeste kdyz ho vydavala proxima.


V kterem? Ja tohle niky v zadnem zxm nenasel, ale mozna jsem jenom spatne koukal.

_________________
Have you played ATARI today?


Nahoru
 Profil  
 
PříspěvekNapsal: 17.05.2013, 17:58 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1524
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 386 times
Paper a INK nastavují
POKE VAL "23624", VAL "0": POKE VAL "23693", VAL "0"
(první je BORDCR, ovlivňující barvu borderu a dialogového řádku, druhá ATTR P určující barvy pro zbytek obrazovky).
http://www.wearmouth.demon.co.uk/sv.htm
POKE pro nezobrazování hlášky při SAVE mohl vyjít v jednom ze zpravodajů Spectrum 602 ZO Svazarmu nebo v Můj přítel Didaktik (nejsem si ale jist, jestli ta mazací nebo nemazací verze). Ml jsem ho v kazeťákových dobách někde napsaný, ale už si ho nepamatuju.

Podle mne nejjistější by bylo ovlivnit to přes systémové proměnné - podobně, jako nevypisování hlavičky při LOAD.
To funguje (proslulý POKE VAL "23739",CODE "o" a jeho opak CODE "POKE") tak, že zapisuje do kanálových informací od adresy uložené v proměnné CHANS (23631), která bez Betadisku nebo Interface 1 ukazuje na 23734. Kanálové informace jsou uloženy v pětibytových grupách - output rutina, input rutina, písmeno označení kanálu. 23739 ukazuje do adresy output rutiny druhého kanálu.
Pokud by se stejným způsobem přepsala adresa rutiny pro výstup do kanálu, kam směřuje "Start tape, ...", (v STRMS bere adresu kanálových informací z 23568, tedy proud 253 "K" - je potřeba podívat se, kam do CHANS ukazuje, ale jeho hodnota je při Spectru bez Betadisku a Interface 1 pořád stejná), nebude se hlášení zobrazovat.


Nahoru
 Profil  
 
PříspěvekNapsal: 17.05.2013, 22:35 
Online
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10138
Bydliště: Praha
Has thanked: 1961 times
Been thanked: 1523 times
Jo, POKE já měl taky moc rád. Měl jsem jich z různých zavaděčů vytahaných spousty na kdejaké kraviny. Třeba na libovolné číslo prvního řádku, na zákaz listování programů, atd. K tomu jsem měl i nějaké systémové Randomize USR xxxxx, které například uložily komplet obsah paměti s různobarevnými pruhy. No jo no... Kde je k tomu konec...
Taky bych chtěl někdy vidět fakt komplet výpis, co všechno se s tímto dalo dělat - všechny ty zajímavé triky.

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
PříspěvekNapsal: 19.05.2013, 20:04 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 19:27
Příspěvky: 1011
Has thanked: 231 times
Been thanked: 221 times
misticjoe píše:
Jo, POKE já měl taky moc rád. Měl jsem jich z různých zavaděčů vytahaných spousty na kdejaké kraviny. Třeba na libovolné číslo prvního řádku, na zákaz listování programů, atd. K tomu jsem měl i nějaké systémové Randomize USR xxxxx, které například uložily komplet obsah paměti s různobarevnými pruhy. No jo no... Kde je k tomu konec...
Taky bych chtěl někdy vidět fakt komplet výpis, co všechno se s tímto dalo dělat - všechny ty zajímavé triky.


To je jakoby ti bylo 80 let :)
RAND USR na pruhy jsou 1298, 1299, 1300, 1301 atd.. Ale ukládá to jen ROMku. K ničemu to není.

_________________
Have you played ATARI today?


Nahoru
 Profil  
 
PříspěvekNapsal: 19.05.2013, 20:05 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 19:27
Příspěvky: 1011
Has thanked: 231 times
Been thanked: 221 times
dex píše:
Paper a INK nastavují
POKE VAL "23624", VAL "0": POKE VAL "23693", VAL "0"
(první je BORDCR, ovlivňující barvu borderu a dialogového řádku, druhá ATTR P určující barvy pro zbytek obrazovky).
http://www.wearmouth.demon.co.uk/sv.htm
POKE pro nezobrazování hlášky při SAVE mohl vyjít v jednom ze zpravodajů Spectrum 602 ZO Svazarmu nebo v Můj přítel Didaktik (nejsem si ale jist, jestli ta mazací nebo nemazací verze). Ml jsem ho v kazeťákových dobách někde napsaný, ale už si ho nepamatuju.

Podle mne nejjistější by bylo ovlivnit to přes systémové proměnné - podobně, jako nevypisování hlavičky při LOAD.
To funguje (proslulý POKE VAL "23739",CODE "o" a jeho opak CODE "POKE") tak, že zapisuje do kanálových informací od adresy uložené v proměnné CHANS (23631), která bez Betadisku nebo Interface 1 ukazuje na 23734. Kanálové informace jsou uloženy v pětibytových grupách - output rutina, input rutina, písmeno označení kanálu. 23739 ukazuje do adresy output rutiny druhého kanálu.
Pokud by se stejným způsobem přepsala adresa rutiny pro výstup do kanálu, kam směřuje "Start tape, ...", (v STRMS bere adresu kanálových informací z 23568, tedy proud 253 "K" - je potřeba podívat se, kam do CHANS ukazuje, ale jeho hodnota je při Spectru bez Betadisku a Interface 1 pořád stejná), nebude se hlášení zobrazovat.


Pěkná teorie, ale ty POKE jsou jaké? Vím, že se musí dát dva za sebou, něco jako:

PAUSE 0: POKE první,něco: POKE duhý,něco: SAVE "jméno"

Jo a není kratší než VAL "0" zadávat NOT PI?

_________________
Have you played ATARI today?


Nahoru
 Profil  
 
PříspěvekNapsal: 21.05.2013, 11:14 
Offline
Radil
Uživatelský avatar

Registrován: 12.05.2013, 20:32
Příspěvky: 457
Bydliště: Kladno
Has thanked: 46 times
Been thanked: 118 times
a pročpak tam dáváte ten VAL a číslo v uvozovkách? Funguje přeci i jen samotné "POKE 23624, 0: POKE 23693, 0". Nebo to má nějaký hlubší význam?

_________________
>>eLeMeNt, MB03+, Amiga 1200, ZX Spectrum 128 +2A, ZX Spectrum+, Didaktik Gama, LnxSpectrum, LnxTracker, LnxAmigaImageConvertor, https://www.ilnx.cz <<


Nahoru
 Profil  
 
PříspěvekNapsal: 21.05.2013, 14:38 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1524
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 386 times
Citace:
a pročpak tam dáváte ten VAL a číslo v uvozovkách? Funguje přeci i jen samotné "POKE 23624, 0: POKE 23693, 0". Nebo to má nějaký hlubší význam?

Samozřejmě že má.
Ale to je potřeba nejdřív znát způsoby uložení číselných konstant v Basicovém programu na ZX Spectru.
On totiž ta forma zápisu, kterou jsi uvedl, je o 12 bajtů delší.
Basicový program na ZX Spectru není prostý text. http://www.worldofspectrum.org/ZXBasicManual/zxmanchap24.html


Nahoru
 Profil  
 
PříspěvekNapsal: 21.05.2013, 14:55 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 12.05.2013, 19:27
Příspěvky: 1011
Has thanked: 231 times
Been thanked: 221 times
dex píše:
Citace:
a pročpak tam dáváte ten VAL a číslo v uvozovkách? Funguje přeci i jen samotné "POKE 23624, 0: POKE 23693, 0". Nebo to má nějaký hlubší význam?

Samozřejmě že má.
Ale to je potřeba nejdřív znát způsoby uložení číselných konstant v Basicovém programu na ZX Spectru.
On totiž ta forma zápisu, kterou jsi uvedl, je o 12 bajtů delší.
Basicový program na ZX Spectru není prostý text. http://www.worldofspectrum.org/ZXBasicManual/zxmanchap24.html


Zjednodušeně řečeno s použitím VAL "číslo" a různých NOT PI, SGN PI, PI*PI apod. se basicovský program zkracuje. Spectrista zná, nespectrista jen kouká :shock:

_________________
Have you played ATARI today?


Nahoru
 Profil  
 
PříspěvekNapsal: 09.07.2016, 17:22 
Offline
Kecka

Registrován: 20.06.2016, 15:44
Příspěvky: 54
Bydliště: Brno
Has thanked: 4 times
Been thanked: 8 times
Mám pocit, že jsem jich hodně našel v manuálu k Didaktiku M, na konci knihy byl tuším seznam.

POKE 23631,2

X-agon


Nahoru
 Profil  
 
PříspěvekNapsal: 17.09.2019, 00:19 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2094
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 327 times
Oživím toto téma nejakými trikmi.

PAUSE 0 je to isté ako PAUSE NOT PI, akurát NOT PI zaberá v pamäti iba 2 byty, zatiaľ čo 0 zaberá 7 bytov. Ale je tu menšia zrada. Niekedy si to pamätá predtým stlačený kláves takže PAUSE sa nekoná, preto som používal PAUSE PI: PAUSE NOT PI. Prvá PAUSE anuluje prípadný stlačený kláves, takže druhá čaká vždy.
Používa sa 0=NOT PI, 1=SGN PI, 3=INT PI (alebo iba PI, desatinné miesta funkcie aj tak nezaujímajú), potom CODE "x", atď...

Písanie programu a editovanie som vždy začínal POKE 23562,1, potom mi kurzor rýchlejšie behal po BASICu.
Riadok 0 sa dá zmeniť na 1 cez POKE 23756,1. Obdobne sa dá aj vytvoriť.
Ďalšie premenné systému BASIC sú v príručke DIDAKTIK M.

Niekto sa pýtal na SAVE bez čakania na kláves: POKE 23734,111: POKE 23736,20: SAVE.... Prvé POKE zabezpečuje aby sa nevypísalo "Start tape then press any key", druhé POKE ruší pauzu.

POKE 23613,0 asi pozná každý, používa sa na zabránenie stopnutiu programu v basicu (zvyčajne loaderu hry). Že sa ale dá vyradiť predošlým použitím CLEAR 65283, to už vie málokto.

Ešte trik s otravným dlhým BEEP. Na konci dlhého riadku nastavte nejakú farbu (napríklad caps shift+symbol shift, 1), potom šípka vľavo, šípka vpravo, a stlačte napríklad x. ENTER. Tým sa nastaví neexistujúca farba, takže pri editácii tohoto riadku to bude pri každom pohybe kurzoru trúbiť ako šialené, čo každého odradí niečo tam meniť. Kým by došiel na koniec, prejde 5 minút. Tiež sa na tejto farbe zastaví výpis programu (LIST) s chybovou hláškou. Správny hacker má na to rýchle riešenie: POKE 23608,0 skráti trúbenie na minimum, a v kombinácii s POKE 23562,1 sa na koniec riadku dostane pekne rýchlo, aby tú farbu odtiaľ zmazal.

Na záver trik na ktorý už určite každý prišiel. TABulátor v programe. Stačí spraviť žltú farbu (caps shift+symbol shift, 6), a následne Delete (caps shift+0). Farby sa vždy mažú na dva krát, a to čo prvom Delete ostane je hodnota. 0 až 5 a 7 niesu žiadne znaky ani príkazy, preto sa vypíšu ako otáznik, ale 6 je tabulátor, čo sa nám hodí. Vypíše medzery po polovicu riadku alebo po koniec riadku, podľa toho či sme pred polovicou alebo za. Veľmi účinné napríklad na vynechanie riadku v poznámkach REM.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


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

Registrován: 22.05.2013, 21:14
Příspěvky: 3674
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 798 times
POKE 23613,0 ma obecne dost nedefinovany ucinok, nemusi vzdy nutne sposobit crash systemu. Systemova premenna ERRSP na 23613 je pointer na adresu, ktora ukazuje kam sa ma program vratit po chybe. V podstate take dvojite nepriame adresovanie ;) Ak chceme, aby po chybe naisto prebehol reset, tak musime vlozit nuly nie priamo na 23613 a 23614, ale tam, kam tato systemova premenna ukazuje. Korektny sposob nastavenia teda bude:
Kód:
LET adresa = PEEK 23613 + 256 * PEEK 23614
POKE adresa + 0, 0
POKE adresa + 1, 0
Vyhoda je, ze tento sposob "osetrenia" chyby prezije aj prikazy CLEAR a CLEAR <cislo> :)
Da sa na to ist aj tak, ze priamo do 23613 vlozime adresu niekam kde uz tie nuly su, ale tento sposob jednak neprezije prikaz CLEAR a dvak ak sa zrovna strafime do prerusenia (resp. ono sa strafi do nas), tak mozu nastat nepredvidatelne okolnosti, hlavne ak tie nuly budu v romke.

Jeden z peknych sposobov, ako vyuzit (resp. zneuzit) 23613 demostruje nasledujuci program:
Kód:
    10 POKE 23613,PEEK 23613-2
    20 PLOT 255*RND,175*RND
    30 DRAW INK 7*RND,510*RND-255,350*RND-175
    40 IF INKEY$<>"s" THEN GO TO 20
    50 POKE 23613,PEEK 23613+2
Skuste si ho najprv spustit len samotny graficky efekt, t.j. bez riadkov 10 a 50. Program podla ocakavania kazdu chvilku skonci na hlaseni Integer out of range pretoze prikaz DRAW sa bude snazit kreslit mimo obrazovky.

Potom si skuste program spustit aj s riadkami 10 a 50. A uvidite ... zazrak :) A dalsi "zazrak" sa bude konat ked budete chciet program zastavit klavesou BREAK :D
(Pozn. Tento trik s nastavenim 23613 funguje len v 48k basicu. Hodnotu RAMTOPu nemente, nechajte ho tam kde si ho system nastavil defaultne po resete.)


Nahoru
 Profil  
 
PříspěvekNapsal: 17.09.2019, 13:47 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2094
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 327 times
Jéééé ono to funguje. :D Ale break nefunguje. ;) Po stlačení S to končí na riadku 50 s Integer out of range, pamätá si to poslednú chybu. Zaujímavé. Ale keď stopnem príkaz, ktorý by sa po break+continue opakoval (napríklad SAVE alebo LOAD), tak to pokračuje ďalším príkazom, neopakuje ten zastavený.

Neviem prečo, ale to 23613,0 som videl naozaj vo veľa loaderoch. Pritom je to nesprávne, mení sa tým ukazovateľ na adresu, nie samotná adresa kde sa má skočiť. A počíta sa s tým, že tam, kde to nanovo ukazuje, budú nuly a teda sa skočí na 0. A po resete tam nuly aj sú, ale pokiaľ som mal nahraté niečo v pamäti práve na tomto mieste, už to môže skočiť kamkoľvek...

V jednom mojom programe pre BT-100 (tuším sa volal krížiky alebo výšivky) som break alebo chybu riešil tak, že sa vypísalo chybové hlásenie, ale bez čísla riadku a bez čísla chyby, a po stlačení klávesy program pokračoval kde mal (program bol v assembleri). Bolo to hlavne pre rutiny LOAD* a CAT (pre D40), ktoré som volal z basicu, a tiež ako zaujímavé riešenie pokiaľ sa breakla tlač.

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


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

Registrován: 22.05.2013, 21:14
Příspěvky: 3674
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 798 times
PotPalo píše:
Jéééé ono to funguje. :D Ale break nefunguje. ;) Po stlačení S to končí na riadku 50 s Integer out of range, pamätá si to poslednú chybu.
Ano, presne tak. Staci do programu pridat
Kód:
60 POKE 23610,255
a potom to skonci korektne s hlasenim OK.
PotPalo píše:
Zaujímavé. Ale keď stopnem príkaz, ktorý by sa po break+continue opakoval (napríklad SAVE alebo LOAD), tak to pokračuje ďalším príkazom, neopakuje ten zastavený.
Vysvetlenie je jednoduche, vtedy sa nevykonava rutinka prikazu CONTINUE.
Pointa spociva v tom, ze pocas behu programu, hned nad error-handlerom #1303 je na zasobniku pushnuta navratova adresa do basic interpretra #1B76 a to POKE na zaciatku sposobi, ze ERRSP 23613 ukazuje prave na basic interpreter. Takze ak dojde k akejkolvek chybe, basic pokracuje vykonavanim tam kde prestal :)
Podmienkou ale je, aby sa nacital cely prikaz, v ktorom doslo k chybe. Vtedy basic pokracuje vykonavanim dalsieho prikazu.
Ak by totiz doslo k chybe niekde pocas nacitavania prikazu, napriklad:
Kód:
PLOT 1/0, 0
(t.j. ze uz pri nacitavani prveho vyrazu 1/0 dojde k chybe)
tak basic ako dalsi prikaz nacita ciarku pred druhym parametrom a kedze toto nie je ziadny platny prikaz, dojde k dalsej chybe (Nonsense in basic). Lenze v tomto okamihu na zasobniku este nie je ulozena navratova adresa do interpretera basicu, a tak cely system zblbne (obvykle zamrzne alebo crashne).


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ů: 18 ]  Přejít na stránku 1, 2  Další

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 8 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