/ / POKE u ZX Spectrum - zxspectrum

POKE u ZX Spectrumu - zxspectrum

Igram sa starim ZX Spectrumom 48k i pitam kako se točno može ući POKE kodovi.

Učitate igru ​​s vrpcom - nekako izbrišite vrstu programa u POKE izjavama i ponovo pokrenite program?

Napravio sam mnogo istraživanja na ovome ali utočište nije uspjelo pronaći točno kako je to učinjeno pa bi bilo kakve poteze na tome bile jako cijenjene.

odgovori:

2 za odgovor № 1

Većina spektralnih programa koristi dva koraka za pokretanje igre:

  1. Učitajte i pokrenite mali BASIC program
  2. Taj maleni program BASIC zatim učitava mnogo dulji kôd stroja, a zatim skoči na ulaznu točku stroja (npr. RANDOMIZE USR 28455).

Ako se možete zaustaviti između tih koraka, možete POKE oko (povećati broj življenja, ...), a zatim pokrenuti kod stroja RANDOMIZE USR 28455, pod pretpostavkom da ste nekako otkrili točnu adresu.

Jednom kada se program stroja izvodi obično nema načina za zaustavljanje i povratak na BASIC prevoditelja. Osim ako program stroj ne dade neki eksplicitni (ili nehotični) način za to.


2 za odgovor № 2

Prije svega, značenje PEEK-a i POKE-a:

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

Većina programa učitava mali BASIC program pod nazivom učitavač. Bilo je nešto poput:

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

Značenje bi trebalo biti jasno: učitajte prezentaciju na zaslonu (redak 20) ​​kako bi korisnik zabavio dok se program asembler (igra sama) opterećuje (redak 30) i konačno pokrenuti igru ​​(redak 40).

O liniji 40, usr 40000 je izraz koji čini trik, zove skupštinu na poziciji 40000. Uputa Randomize inicijalizira slučajno sjeme koje koristi rnd, mislio je da se zapravo nikada neće vratiti.

Dakle, prvi pokušaji bili bi:

  1. Pritisnite "break" (više ili manje jednako Ctrl + C), unesite list, i pokucati u liniju 35, tj. nakon što je program učitan, ali još nije izvršen.

  2. Umjesto tipkanja load "" da biste pokrenuli igru, upišite merge "" (ovo je upotrijebljeno za kombiniranje osnovnog programa u memoriji s onom u traci). Postupak će se zaustaviti prije izvršenja punjača. Ovo je korisno kada je utovarivač uključio a poke uputa koja je onemogućila BREAK.

Problem s ovim metodama bio je to u početkupokušaji skrivanja ugrađenih utovarivača bili su naivni (kao što je npr. uključivanje PAPER 0: INK 0 naredbe ili nešto slično na liniju 10, čineći sve privremeno nevidljivo), ali uskoro bi imali mnogo složenijih, do točke do zapravo biti sastavni program uključen u REM upute.

Sljedeći je korak bio analizirati zaglavljasastavni kod koji je učitan nakon osnovnog učitavača, zaključite adresu dumpiranja i duljinu koda i izradite vlastiti punjač za koji možete uključiti poke upute koje ste željeli. Mnogi časopisi distribuirali su ove vrste utovarivača, koji su bili namijenjeni da se učitaju prije originalnog (utovarivač je tražio određene blokove, zaobilazeći originalni punjač).

Dakle, razvojni programeri odlučili su uključitimontažnih blokova u traci bez zaglavlja, kao i zaštitu utovarivača. Ili uključuje utovarivač koji samo učitava program montaže koji zamjenjuje utovarivač u ROM-u, koristeći različite brzine, bez podataka o zaglavlju itd. Ili uključuje utovarivač koji učitava blok bez glave, uključujući zaslon za prezentaciju i kôd za igru.

I onda posebni hardver kao što je Multiface-1 pojavio. Čitanje Multiface-1 priručnik možete vidjeti kako se zove višenamjenski softver(koji je uključen u perifernu hardversku ROM-u) pritiskom na crveni gumb (koji je izazvao NMI (ne maskiran prekid), prikazan je izbornik koji vam omogućava spremanje memorije u toj točki (a spremljeni kod bez ikakve zaštite , otvarajući tako put za stvaranje vlastitog utovarivača), ili čak pregledati (PEEK) trenutne vrijednosti na određenim adresama u memoriji i unesite POKEizravno (s kojom biste mogli naći početak tih rutine, na primjer, koji umanjuju život u jednom).

Upute POKE-a bile su obično takve (to je pojednostavljenje): POKE addr, 0 ili POKE addr, 201, Broj adr bio je početak rutine kojim se smanjio broj dostupnih života ili otkriva sukob s neprijateljem.

Kôd 0 je instalacijski NOP (nijedna radnja) instrukcija. Tijekom NOP-a CPU ne radi ništa.

Kôd 201 ili C9 je sklop RET (povratak), što znači da se vrati za potprogram. U BASIC-u biste nazvali potprogram GOSUB i vratiti se sa svog kraja RETURN, U asssembly, isti par je CALL / RET.

Ako ste imali 201, onda bi učinkovito značilo da potprogram (kažem da oduzimaš jedan u svoje živote) kao što su:

9950 let lives = lives - 1
9960 return

pretvoren je u:

9950 return
9960 return

Ako ste imali vrijednost 0, ista se rutina pretvorila u:

9950
9960 return

1 za odgovor № 3

Kao što se sjećam davno ... Kada se igra Spectrum učita, početno se učitava u programu malih učitavača i pokreće to, vrpca se nastavlja te se učita većina programa. Posljednja naredba u programu učitavanja tada izdaje naredbu poke koja sve poziva i pokreće igra. Dakle, kao što se sjećam, morat ćete pauzirati kasetu nakon učitavanja programa učitavanja i zaustaviti liniju koda da automatski izda konačni proboj, a zatim nastavlja. Zatim, nakon što je skupno napunjen, izdajete svoj potis iz naredbenog retka, a zatim izvorni poke za početak igre. Program punjača će se učitati nakon prvog reda crvenih i plavih linija, nakon čega slijedi vrlo kratka žuta i plava linija na zaslonu (kao što se sjećam da ispisuje naziv programa koji se nalazi u ovom trenutku). Zaustavite kasetu, pritisnite Break, a zatim Popis da biste vidjeli kôd. Najbolje sreće i veliko pitanje!


1 za odgovor № 4

POKE kodovi tiskani u ZX Spectrum časopisimaobično se očekuje da imate hardverski uređaj za dodatak (npr. Multiface). Kada se igra učita, možete pritisnuti gumb Višenamjenski za zaustavljanje igre, unijeti POKE i vratiti se natrag u igru.

Bez posebnog uređaja, morate se igratiprogrami učitavača, kao što je opisano drugim odgovorima. Morate učitati početni program malih učitavača, a zatim BREAK u kôd. Ako imate sreće, kôd će učiniti nešto jednostavno s učitavanjem u ostatku igre, a zatim izvršiti stvarni igraći kôd pomoću RANDOMIZE USR poziva. U tom slučaju možete promijeniti program učitavanja BASIC-a kako biste učinili POKES nakon igra je učitana, ali prije početka igre.

Međutim, mnoge igre čine ovo teško, jer oniuključuju kod prilagođenih učitavača. To se često piše u strojnom kodu ugrađenom u mali BASIC program u REM izjavama. Šifra stroja će učitati igru ​​i izvršiti ga, i zato što nikada ne vraća kontrolu na BASIC kôd, nema prilike za ulazak u POKE. Ako ste dovoljno posvećeni, možete pokušati promijeniti kod stroja kako biste vratili kontrolu natrag na BASIC tako da možete POKE odustati, inače izvršiti POKE putem poziva s kodom uređaja. Ovo je prilično teško, jer ako se sjećam s pravom, urednik se u REM izjavama naviknuo na linije koje sadrže znakove koji se ne mogu ispisivati. Bilo je softverskih alata poput RoyBota koji bi vam mogli pomoći pri promjeni kodova u memoriji.

Neki razvojni programeri igara stvarno su ludi stvari kako bi spriječili hakiranje igara, kao što je implementacija kodera učitavača koji je zapravo prebrisao vlastiti kôd dok je izvršen


Povezana pitanja


Komentari (0)

Dodaj komentar