/ / POKE ZX spektrā - zxspectrum

POKE ZX Spectrum - zxspectrum

Es spēlēju ar veco ZX Spectrum 48k un es domāju, kā precīzi tas ir iespējams ieiet POKE kodi.

Jūs ielādējat spēli ar lentu - pēc tam kādā veidā izkļūst no programmas veida POKE paziņojumos un sāciet atkal palaist programmu?

Es esmu daudz izdarījis šo meklēšanu, bet esmu spējis precīzi noteikt, kā tas tiek darīts, lai tas varētu būt ļoti appreciated.

Atbildes:

2 atbildei Nr. 1

Lielākā daļa spektra programmu izmanto divu pakāpju procesu, lai sāktu spēli:

  1. Ielādējiet un palaidiet mazu BASIC programmu
  2. Šī mazā BASIC programma pēc tam ielādē daudz ilgāku mašīnkodu un pēc tam lec līdz mašīnes koda ievades punktam (piemēram, RANDOMIZE USR 28455)

Ja jūs varēsit apstāties starp šiem soļiem, jūs varat to izdarīt POKE apkārt (lai palielinātu dzīvību skaitu ...) un pēc tam palaidiet mašīnu kodu ar RANDOMIZE USR 28455, pieņemot, ka jūs kaut kā uzzinājāt pareizo adresi.

Kad mašīna programma darbojas, parasti to nav iespējams apturēt un atgriezties tulkošanā BASIC. Ja mašīna programma nesniedz skaidru (vai netīšu) veidu, kā to izdarīt.


2 atbildei Nr. 2

Pirmkārt, PEEK un POKE nozīme:

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

Lielākajā daļā programmu ir ievietota neliela BASIC programma, ko sauc par iekrāvēju. Tas bija kaut kas līdzīgs:

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

Šai nozīmei jābūt vienkāršai: ielādējiet ekrāna prezentāciju (20. līnija), lai lietotājs izklaidētu, kamēr tiek iekrauta montētājprogramma (pati spēle) (30. līnija) un beidzot uzsāk spēli (40. līnija).

Par līniju 40 usr 40000 ir izteiksme, kas dara triks, izsaucot montāžu 40000 pozīcijā. Instrukcija Randomize tikai inicializē izlases sēklu, ko izmanto rnd, domāja, ka tā nekad neatgriezīsies.

Tātad, pirmās mēģinājumi būtu:

  1. Nospiediet "pārtraukums" (vairāk vai mazāk līdzvērtīgs Ctrl + C), ievadiet list, un ielieciet pokes 35. rindā, t.i., kad programma ir ielādēta, bet tā vēl nav izpildīta.

  2. Tā vietā, lai rakstītu load "" lai uzsāktu spēli, ierakstiet merge "" (to izmantoja, lai apvienotu pamata programmu atmiņā ar vienu lentē). Process tiks apturēts pirms slodzes izpildes. Tas ir noderīgi, ja iekrāvējs ir iekļauts poke instrukcija, kas atspējota BREAK.

Problēma ar šīm metodēm bija tā, ka sākumāmēģinājumi paslēpt iekrāvēja versijas bija naivi (piemēram, iekļaujot instrukciju PAPER 0: INK 0 vai kaut kas līdzīgs 10. rindiņā, padarot visu pagaidām neredzamu), bet drīz vien viņi saņemtu daudz sarežģītāku, līdz brīdim, kad faktiski ir iekļauta komplektētāja programma REM instrukcijas.

Nākamais solis bija analizētmontāžas kods, kas ielādēts pēc pamata iekrāvēja, noslēdz dump adresi un koda garumu un izveido savu iekrāvēju, kurā jūs varētu iekļaut poke instrukcijas, kuras jūs vēlējāties. Daudzi žurnāli izplatīja šāda veida iekrāvējus, kas bija paredzēti iekraušanai pirms oriģinālā (iekrāvējs meklēja konkrētus blokus, apejot oriģinālu pamata iekrāvēju).

Tātad, tad izstrādātāji nolēma iekļautmontāžas bloki lenti bez galvenēm, kā arī aizsargāt iekrāvēju. Vai arī iekrāvējs, kas vienkārši ielādē montāžas programmu, kas aizvieto iekrāvēju ROM, izmantojot dažādus ātrumus, bez galvenes informācijas utt. Vai arī iekrāvējs, kas ielādē bez galvām bloks, ieskaitot prezentācijas ekrānu un spēles kodu.

Un tad īpaša aparatūra, piemēram, Multiface-1 parādījās. Lasīt Multiface-1 rokasgrāmata jūs varat redzēt, kā piesaistīt daudzveidīgu programmatūru(iekļauta perifērijas aparatūras ROM), nospiežot sarkano taustiņu (kas izraisīja NMI (nav maskēta pārtraukšana), tika parādīta izvēlne, kas ļauj tajā saglabāt atmiņu (un saglabātajam kodam nebūtu nekādas aizsardzības , tādējādi atverot ceļu, lai izveidotu savu iekrāvēju ar pokes) vai pat pārbaudīt (PEEK) pašreizējās vērtības konkrētās adresēs atmiņā un ievadiet POKE"S tieši (ar kuru jūs varētu atrast sākumu šo rutīnas, piemēram, ka mazināsies savu dzīvi vienā).

POKE instrukcijas parasti bija tādas (tas ir vienkāršojums): POKE addr, 0 vai POKE addr, 201. Numurs addr bija rutīnas sākums, samazinot pieejamo dzīvību skaitu vai sadursmes ar ienaidnieku noteikšana.

Kods 0 ir montāžas NOP (bez darbības) instrukcija. NOP laikā CPU neko nedara.

Kods 201 vai C9 ir montāža RET (atgriešanās) instrukcija, kas nozīmē atgriezties apakšprogrammā. BASIC jūs varētu izsaukt apakšgrupu ar GOSUB un atgriezties no tā beigām ar RETURN. Asamblejā viens un tas pats pāris ir CALL / RET.

Ja jums būtu 201, tad tas faktiski nozīmētu, ka subroutine (piemēram, atņemot vienu savu dzīvi), piemēram:

9950 let lives = lives - 1
9960 return

tika pārveidota uz:

9950 return
9960 return

Ja jums bija 0 vērtība, tā pati rutīna tika pārveidota uz:

9950
9960 return

1 atbilde Nr. 3

Kā es atceros jau sen ... Kad spektra spēle tiek ielādēta, tā sākotnēji tiek ielādēta mazā iekrāvēja programmā un darbojas tā, ka lente turpinās un tiek ielādēta lielākā daļa programmas. Pēdējā komanda ielādes programmā pēc tam izdod komandu, kas aicina visus, kas ielādēti un sākas spēle. Tātad, kā es atceros, lenti ir jāaptura pēc tam, kad ielādes programma ir ielādēta, un pārtrauc koda rindu automātiski izsniegt galīgo mocīti, tad turpina. Pēc tam, kad lielākā daļa ir ielādēta, jūs izsniedzat savu šņaukāties no komandrindas, un pēc tam oriģināls pieskaras, lai sāktu spēli. Iekraušanas programma tiks ievietota pēc pirmās sarkanās un zilās līnijas, kam seko ļoti īsas dzeltenās un zilās līnijas uz ekrāna (kā es atceros, tas izdrukā šajā punktā atrastās programmas nosaukumu). Lai apturētu lentu, nospiediet Pārtraukt, pēc tam saraksts, lai apskatītu kodu. Labākais veiksme un lielisks jautājums!


1 atbilde Nr. 4

POKE kodi drukāti ZX Spectrum žurnālosParasti tiek sagaidīts, ka jums būs spraudņa aparatūras ierīce (piemēram, Multiface). Kad spēle ir ielādēta, jūs varat nospiest Multiface pogu, lai apturētu spēli, ievadiet POKE, un pēc tam atgriezieties spēlē.

Bez īpašas ierīces, jums ir nepieciešams spēlēt arloader programmas, kā aprakstīts citās atbildēs. Jums ir nepieciešams ielādēt sākotnējo mazo iekrāvēju programmu un pēc tam BREAK uz kodu. Ja tev veiksies, kods darīs kaut ko vienkāršu, iekraujot pārējo spēli, un tad izpildīs faktisko mašīnu koda spēli, izmantojot RANDOMIZE USR zvanu. Šajā gadījumā jūs varat modificēt BASIC programmu, lai veiktu POKES pēc tam, kad spēle ir ielādēta, bet pirms spēles sākuma.

Tomēr daudzas spēles padara to grūti, jo tāsiekļaut pielāgoto ielādes kodu. Tas bieži tiek rakstīts mašīnrakstā, kas iegults mazajā BASIC programmā REM paziņojumos. Iekārtas kods ielādēs spēli un izpildīs to, un, tā kā viņi nekad neatgriezīs kontroli uz BASIC kodu, nav iespējas iekļūt POKE. Ja jūs esat pietiekami veltīts, jūs varat mēģināt modificēt mašīnkodu, lai vai nu atgrieztos vadības režīmā atpakaļ uz BASIC, lai jūs varētu POKE prom, vai arī veikt POKE caur mašīna kodu zvani. Tas ir diezgan grūti, jo, ja es pareizi atceros, redaktors REM paziņojumos skrēja līnijas, kas satur neizdzēšamas rakstzīmes. Tika izmantoti tādi programmatūras rīki kā RoyBot, kas varētu palīdzēt mainīt kodu atmiņā.

Daži spēļu izstrādātāji patiešām izdarīja traki, lai novērstu spēļu uzlaušanu, piemēram, ieviešot ielādes kodu, kurš faktiski pārrakstīja savu kodu, kamēr tas tika izpildīts


Saistītie jautājumi


Komentāri (0)

Pievieno komentāru