Izvor: "Svet Kompjutera" br. 7,8/87

SPECTRUM : POKE za pet minuta

Kao to svaki haker zna, pronalaenje
POKE-ova u veini sluajeva mukotrpan
je i teak posao, prvenstveno zbog
velike duine igara. Svaka ozbiljnija i
bolja igra zauzima u proseku 40K
memorije, a najkrai disasembler, koj je
neophodan zauzima 6K, tako da on mora
prekrivati izvestan deo igre. Problem se
odmah javlja: gde smestiti disasembler?
ta ako se ba tom delu nalazi POKE ?

Piu Dragan Kneevi, Predrag Beiri

Veliki broj uitavanja i puno utroenog vremena su odlike ovakvog
naina traenja POKE-ova. Program koji sledi oslobodie vas ovih muka.
a takoe vam i tedi vreme. POKEMAKER je program specijalno pisan za
traenje POKE-ova i sa svojih dvadesetak naredbi znatno e vam
olakati posao.

POKEMAKER predstavlja jednu vrstu disasemblera, koji je smeten u
video memoriji. Program poinje od adrese 16384, u duini 4096
bajtova, tako da za rad korisniku ostaje ceo raspoloivi RAM, u koji
moe da se uita celokupna igra. Rad se odvija u donjoj treini
ekrana.

Svaka komanda se aktivira pritiskom na pojedino dugme tastature. Uz
neke komande potrebno je uneti i parametre. Svi parametri koji se
unose moraju biti u HEXADECIMALNOM OBLIKU. U sluaju da smo pogreili
naredbu, iz edit moda izlazi se pritiskom na CAPS i SYMBOL SHIFT
istovremeno.

Kratak opis naredbi:
--------------------

M - memory: Posatavlja memorijiski pokaziva na odreenu adresu.
            Unesite etiri znaka koji predstavljaju novu adresu u
            hexadecimalnom obliku.

Q - decrement: smanjuje memorijski pokaziva za 1

A - increament: poveava memorijski pokaziva za 1

G - get: Unosite string koji treba pronai u memoriji. Oznaka XX znai
         da se bajt na tom mestu zanemaruje.String koji se unosti mora
         imati 8 karaktera. Npr. XXCD5605

N - next: trai se sledee pojavljivanje zadatog stringa (komanda G)

P - message: pomou ove komande moete na primer upisati svoje ime u
             tu program. Upisuje se do 42 znaka. Zavravate sa ENTER.

B - poke: slui za unoenje odreenog POKE-a na adresu koju pokazuje
          memorijiski pokaziva.

D - dump: lista sadraj memorije na taj nain to vrednost svake
          lokacije predstavlja kao ASCII simbol. BREAK za povratak.

L - list: ovo je najmonija komanda u disasembleru. Lista sadraj
          memorije poev od adrese memorijskog pokazivaa. Povratak se
          vri pritiskom na BREAK. Napomena: instrukcije koje
          operiu sa IX i IY registrima tampaju se u malo promenjenom
          obliku. Prvo se tampa prefix DD ili FD, a zatim
          ekvivalentna mainska instrukcija koja radi sa registarskim
          parom HL. Ispred te naredbe tampae se '*' , a iza nje 'IX'
          ili 'IY'. Trei bajt instrukcije koja radi sa IX ili IY
          registrima je uvek relativni pomak (-127,+128)

U - load: postoji mogunost uitavanja do 10 razliitih blokova (0-9).
          Uitavanje se vri od adrese memorijskog pokazivaa +1.
          Duina programa se automatski odreuje. Na lokaciju koju
          pokazuje memorijski pokaziva uitava se flag byte.

S - save: kao to postoji mogunost uitavanja do deset razliitih
          blokova, tako postoji mogunost snimanja ovih blokova.
          Snimanje se vri na taj nain to otkucamo redni broj
          bloka koji elimo da snimimo.

Z - the end: Brie memoriju do RAMTOP-a (#5CB2). Ekvivalentno NEW
             naredbi u bejziku.

H - hex/dec: vri pretvaranje hexadecimalnog broja u decimalne.
             Hexadecimalni brojevi su uvek unose sa 4 cifre
             (npr. 00A0 -> 160)

J - dec/hex: vri pretvaranje decimalnih u heksadecimalne brojeve.
             Decimalni brojevi se onose sa 5 cifara.
             (npr. 32768 -> 8000)

E - jump: startuje program od unete adrese. Nakon toga potrebno je
          uneti jo jedan parametar koji predstavlja vrednost SP (stack
          pointer).

R - registri: pokazuje vrednost registara koje su dobijene pri
              poslednjem izvrenju programa (komanda I)

Y - break point: postavlja taku prekida, tj. ponovo ete se
                 vratiti u disasembler sa novim vrednostima registara.
                 Pazite samo da program koji izvravate ne pie neto
                 po video memoriji! Po izvrenju programa vraa se
                 originalni sadraji lokacija gde je postavljena taka
                 prekida.

I - execute: Izvrava program od unete adrese. Vano je to da registri
             dobijaju vrednosti koje su imali posle poslednjeg
             izvravanje programa komandom I. Po nailasku na break
             point (komanda Y) vraate se u disasembler. Vrlo korisna
             instrukcija za izvravanje samo dela programa. Koristi
             se npr. kada je potrebno da se neki deo programa koji sa
             analizira od-XOR-uje.

O - printer on: od sada e se svi podaci dobijeni komandama 'L' i 'D'
                slati na printer. Ostale komande e i dalje koristiti
                ekran. Memorija od 23296 do 23551 bie koriena za
                printer buffer.

K - printer off: nastavlja ispisivanje karaktera na ekran.

F - get text: unosimo odreeni tekst za traenje. Npr. GAME OVER. Ako
              umesto nekog slova stavimo '?' to mesto e biti ignorisano.

V - find next text: vri pretraivanje memorije i trai zadani tekst
                    komandom 'F'

------------------------------------------------------------------------

Poboljanja uradio Nikola Alivojvod (ARC soft) johnnya@eunet.yu
Nova verzija POKEMAKERA zavrena je 19.08.1990.

Novo:
-----
* Ukinuta je podrka za tampa (moralo se, da bi program i dalje bio
  samo u video memoriji).

* oitavanje tastature se vie ne vri preko sistemskih varijabli, tako
  da je mogue bez bojazni uitavati igru i preko dela memorije gde
  se nalaze sistemske varijable.

* za prekid edit moda (escape) dovoljno je pritisnuti SYMBOL SHIFT
  loa posledica ovoga je to recimo pri unosu teksta vie ne moete
  da koristite simbole koji se dobijaju pomou SYMBOL SHIFT-a (!"#<>...)

* za prekid listanja (komanda L ili D) dovoljno je pritisnuti SPACE

* W - text to mem: ako komandom F unesete jedan hexadecimalni niz (max
                   42 karaktera = 21 bytes) ova komanda e taj niz
                   prebaciti na mesto memorijskog pokazivaa. Dakle,
                   neto kao B..Q..B..Q..B..Q... itd.

* T - header: uitava blokove koji imaju header i pri tome automatski
              uzima podatke gde blok treba da se uita. Dakle, kao
              LOAD "" [CODE] u bejziku. Pri tome vas obavetava o
              o podacima koje je naao u header-u.

* O - pointer: pamti trenutnu vrednost memorijskog pokazivaa.

* K - back to: vraa vrednost memorijskog pokazivaa zapamenog
               komandom O

* Z - the end: postavlja dodatno pitanje: END Y/N ?

* C - fill to: unesiti eljenu vrednost (veu od memorijskog pokazivaa!)
               i deo memorije od memorijskog pokazivaa, pa do te
               vrednosti bie ispunjen bajtom koji se nalazi na adresi
               memorijskog pokazivaa.

