/ / POKE v ZX Spectrum - zxspectrum

POKE v ZX Spektrum - zxspectrum

Hrám so starým ZX Spektrum 48k a zaujímam sa, ako presne je možné vstúpiť Kódy POKE.

Môžete nahrať hru páskou - nejako vyprchať z typu programu vo vyhláseniach POKE a spustiť program znova?

V tejto téme som veľa hľadal, ale nebol schopný presne nájsť, ako sa to robí, takže akékoľvek vedenie v tejto oblasti by bolo veľmi oceňované.

odpovede:

2 pre odpoveď č. 1

Väčšina programov Spectrum používa dvojstupňový proces na spustenie hry:

  1. Načítať a spustiť malý program BASIC
  2. Tento malý program BASIC potom načíta oveľa dlhší kód stroja a potom preskočí na vstupný bod stroja (napr. RANDOMIZE USR 28455).

Ak sa vám podarí zastaviť medzi týmito krokmi, môžete POKE okolo (zvýšiť počet životov, ...) a potom spustiť kód stroja RANDOMIZE USR 28455, za predpokladu, že ste nejako zistili správnu adresu.

Po spustení stroja zvyčajne neexistuje žiadny spôsob, ako ho zastaviť a vrátiť sa späť k tlmočníkovi BASIC. Ak strojový program neposkytuje nejaký explicitný (alebo neúmyselný) spôsob, ako to urobiť.


2 pre odpoveď č. 2

Po prvé, význam PEEK a POKE:

10 let x = PEEK 40000: REM returns (reads) the value (0-255) in position 40000
20 POKE 40000, 201: REM writes the 201 value in position 40000

Väčšina programov načítala malý program BASIC nazývaný nakladač. Bolo to niečo ako:

10 cls
20 print "Loading AWESOME GAME!!!"
20 load "" screen$
30 load "" code 40000
40 randomize usr 40000

Význam by mal byť jednoduchý: načítať prezentáciu na obrazovke (riadok 20), aby sa užívateľ mohol zabaviť počas načítavania programu (samotná hra) (riadok 30) a nakoniec spustiť hru (riadok 40).

O riadku 40, usr 40000 je výraz, ktorý robí trik a volá zostavu v pozícii 40000. Pokyn Randomize jednoducho inicializuje náhodne použité semeno rnd, myslel, že sa v skutočnosti nikdy nevráti.

Takže prvé pokusy by boli:

  1. Stlačte "break" (viac alebo menej ekvivalentné Ctrl + C), zadajte lista vložte pokosy do riadku 35, t.j. akonáhle bol program načítaný, ale ešte nebol vykonaný.

  2. Namiesto písania load "" Ak chcete spustiť hru, napíšte merge "" (toto sa používa na skombinovanie základného programu v pamäti s programom na páske). Proces sa zastaví pred spustením nakladača. To je užitočné, keď nakladač obsahuje a poke inštrukcia, ktorá bola zakázaná BREAK.

Problémom s týmito metódami bolo, že na začiatkupokusy skryť nosiče nakladačov boli naivné (ako napr. inštrukcia PAPER 0: INK 0 alebo niečo také, čo je na riadku 10, takže všetko je dočasne neviditeľné), ale čoskoro by sa dostali oveľa zložitejšie až do bodu vlastne byť programom pre montáž, ktorý je súčasťou REM inštrukcie.

Ďalším krokom bolo analyzovanie záhlavímontážny kód načítaný po základnom nakladacom, uzavrieť adresu skládky a dĺžku kódu a vytvoriť vlastný nakladač, do ktorého by ste mohli zahrnúť poke pokyny, ktoré ste chceli. Mnoho časopisov distribuovalo tento druh nakladačov, ktoré mali byť naložené pred pôvodným (nakladač hľadal konkrétne bloky, obchádzajúci pôvodný základný nakladač).

Takže vývojári sa rozhodli zahrnúťmontážne bloky v páse bez záhlavia, ako aj ochrana zaťaženia. Alebo vrátane nakladača, ktorý práve načíta montážny program, ktorý nahrádza nakladač v ROM, používa rôzne rýchlosti, bez informácií o hlavičke atď. Alebo vrátane nakladača, ktorý načíta blok bez hlavy, vrátane obrazovky prezentácie a kódu pre hru.

A potom špeciálny hardvér, ako je Multiface-1 objavil. Čítanie Príručka Multiface-1 môžete si pozrieť, ako vyvolať softvér viacerých stránok(zahrnuté v pamäti hardvéru periférneho hardvéru) stlačením červeného tlačidla (čo vyvolalo NMI (nie je maskované prerušenie), zobrazila sa ponuka, ktorá vám umožňuje uložiť pamäť v danom okamihu (a uložený kód by nemal žiadnu ochranu , čím otvoríte cestu k vytvoreniu vlastného nakladača s pokes), alebo dokonca preskúmať (PEEK) aktuálne hodnoty na konkrétnych adresách v pamäti a zadajte ich POKE(s ktorými môžete nájsť začiatok týchto rutín, napríklad, ktoré znižujú životy v jednom).

Pokyny POKE boli zvyčajne také (to je zjednodušenie): POKE addr, 0 alebo POKE addr, 201, Číslo addr bol začiatok rutinného znižovania počtu dostupných životov alebo odhalenie konfliktu s nepriateľom.

Kód 0 je montážny príkaz NOP (žiadna operácia). Počas NOP CPU nerobí nič.

Kód 201 alebo C9 je zostava RET (return), čo znamená návrat k podprogramu. V BASIC by ste volali podprogram s GOSUB a vrátiť sa od svojho konca s RETURN, Pri montáži je rovnaký pár CALL / RET.

Ak ste mali 201, potom by to skutočne znamenalo, že podprogram (napríklad odpočítať jeden z vašich životov), ​​ako napríklad:

9950 let lives = lives - 1
9960 return

bol premenený na:

9950 return
9960 return

Ak ste mali hodnotu 0, tá istá rutina bola premenená na:

9950
9960 return

1 pre odpoveď č. 3

Ako si spomínam už dávno ... Pri načítaní hry typu Spectrum sa spočiatku načíta v programe malého nakladača a beží, že páska pokračuje a je naplnená väčšina programu. Posledný príkaz v programe načítača potom vydá príkaz poke, ktorý volá všetko načítané a spustí hra. Takže, ako si pamätám, musíte pozastaviť pásku po načítaní programu nakladača a zastaviť riadok kódu od automatického vydania konečného poke, potom pokračuje. Potom, čo sa hromadne načíta, vydáte poke z príkazového riadku, a potom pôvodný poke spustiť hru. Program nakladača sa načíta po prvej sade červených a modrých čiar, po ktorej nasleduje veľmi krátka žltá a modrá čiara na obrazovke (ako som si spomenula, vytlačí sa názov programu, ktorý sa nachádza v tomto bode). Zastavte pásku, stlačte Break (Prerušiť) a potom List (Zoznam), aby ste si pozreli kód. Najlepšie šťastie a skvelá otázka!


1 pre odpoveď č. 4

Kódy POKE vytlačené v časopisoch ZX Spectrumzvyčajne sa očakáva, že budete mať zásuvné hardvérové ​​zariadenie (napríklad Multiface). Po načítaní hry môžete stlačením tlačidla Multiface zastaviť hru, vstúpiť do POKE a potom sa vrátiť späť do hry.

Bez špeciálneho zariadenia musíte hraťako sú opísané v ostatných odpovediach. Potrebujete nahrať počiatočný program malých nakladačov a potom BREAK do kódu. Pokiaľ budete mať šťastie, kód bude robiť niečo jednoduché s načítaním do zvyšku hry a potom spustiť skutočnú kódovú hru stroj pomocou RANDOMIZE USR volania.V tomto prípade môžete upraviť nakladač BASIC program robiť POKES po hra sa načíta, ale pred začiatkom hry.

Avšak, veľa hier robí to ťažké, pretože onizahrnúť vlastný kód nakladača. Toto sa často zapisuje do kódu stroja vloženého do malého programu BASIC vo vyhláseniach REM. Kód stroja načíta hru a vykoná ju a pretože nikdy nevrátia kontrolu do kódu BASIC, nie je príležitosť vstúpiť do POKE. Ak ste dostatočne odhodlaní, môžete skúsiť modifikovať kód stroja tak, aby ste vrátili ovládací prvok späť do BASIC, aby ste mohli odísť ďalej, alebo vykonať POKE prostredníctvom volaní kódu zariadenia. Je to dosť ťažké, pretože ak si správne pamätám, editor použil na výmenu riadkov, ktoré obsahujú znaky, ktoré nie je možné vytlačiť, v príkazoch REM. K dispozícii boli softvérové ​​nástroje ako RoyBot, ktoré vám môžu pomôcť s úpravou kódu v pamäti.

Niektorí herní vývojári sa naozaj zbláznili, aby zabránili hackingu v hre, ako je implementácia kódu načítania, ktorý v skutočnosti prepísal svoj vlastný kód počas jeho vykonávania


Súvisiace otázky


Komentáre (0)

Pridať komentár