Opisi: -------- (Svet Kompjutera, #7/8, Julij/Avgust 1987, Dragan Knežević & Predrag Bećirić) ------------------------------------------------------------------------------- SPECTRUM : POKE za pet minuta Kao što svaki haker zna, pronalaženje POKE-ova u većini slučajeva mukotrpan je i težak posao, prvenstveno zbog velike dužine igara. Svaka ozbiljnija i bolja igra zauzima u proseku 40K memorije, a najkraći 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 ? Pišu Dragan Knežević, Predrag Bećirić Veliki broj učitavanja i puno utrošenog vremena su odlike ovakvog načina traženja POKE-ova. Program koji sledi oslobodiće vas ovih muka. a takođe vam i štedi vreme. POKEMAKER je program specijalno pisan za traženje POKE-ova i sa svojih dvadesetak naredbi znatno će vam olakšati posao. POKEMAKER predstavlja jednu vrstu disasemblera, koji je smešten u video memoriji. Program počinje od adrese 16384, u dužini 4096 bajtova, tako da za rad korisniku ostaje ceo raspoloživi RAM, u koji može da se učita celokupna igra. Rad se odvija u donjoj trećini 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 slučaju da smo pogrešili naredbu, iz edit moda izlazi se pritiskom na CAPS i SYMBOL SHIFT istovremeno. Kratak opis naredbi: -------------------- M - memory: Posatavlja memorijiski pokazivač na određenu adresu. Unesite četiri znaka koji predstavljaju novu adresu u hexadecimalnom obliku. Q - decrement: smanjuje memorijski pokazivač za 1 A - increament: povećava memorijski pokazivač za 1 G - get: Unosite string koji treba pronaći u memoriji. Oznaka XX znači da se bajt na tom mestu zanemaruje.String koji se unosti mora imati 8 karaktera. Npr. XXCD5605 N - next: traži se sledeće pojavljivanje zadatog stringa (komanda G) P - message: pomoću ove komande možete na primer upisati svoje ime u tuđ program. Upisuje se do 42 znaka. Završavate sa ENTER. B - poke: služi za unošenje određenog POKE-a na adresu koju pokazuje memorijiski pokazivač. D - dump: lista sadržaj memorije na taj način što vrednost svake lokacije predstavlja kao ASCII simbol. BREAK za povratak. L - list: ovo je najmoćnija komanda u disasembleru. Lista sadržaj memorije počev od adrese memorijskog pokazivača. Povratak se vrši pritiskom na BREAK. Napomena: instrukcije koje operišu sa IX i IY registrima štampaju se u malo promenjenom obliku. Prvo se štampa prefix DD ili FD, a zatim ekvivalentna mašinska instrukcija koja radi sa registarskim parom HL. Ispred te naredbe štampaće se '*' , a iza nje 'IX' ili 'IY'. Treći bajt instrukcije koja radi sa IX ili IY registrima je uvek relativni pomak (-127,+128) U - load: postoji mogućnost učitavanja do 10 različitih blokova (0-9). Učitavanje se vrši od adrese memorijskog pokazivača +1. Dužina programa se automatski određuje. Na lokaciju koju pokazuje memorijski pokazivač učitava se flag byte. S - save: kao što postoji mogućnost učitavanja do deset različitih blokova, tako postoji mogućnost snimanja ovih blokova. Snimanje se vrši na taj način što otkucamo redni broj bloka koji želimo da snimimo. Z - the end: Briše memoriju do RAMTOP-a (#5CB2). Ekvivalentno NEW naredbi u bejziku. H - hex/dec: vrši pretvaranje hexadecimalnog broja u decimalne. Hexadecimalni brojevi su uvek unose sa 4 cifre (npr. 00A0 -> 160) J - dec/hex: vrši 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 izvršenju programa (komanda I) Y - break point: postavlja tačku prekida, tj. ponovo ćete se vratiti u disasembler sa novim vrednostima registara. Pazite samo da program koji izvršavate ne piše nešto po video memoriji! Po izvršenju programa vraća se originalni sadržaji lokacija gde je postavljena tačka prekida. I - execute: Izvršava program od unete adrese. Važno je to da registri dobijaju vrednosti koje su imali posle poslednjeg izvršavanje programa komandom I. Po nailasku na break point (komanda Y) vraćate se u disasembler. Vrlo korisna instrukcija za izvršavanje 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 biće korišćena za printer buffer. K - printer off: nastavlja ispisivanje karaktera na ekran. F - get text: unosimo određeni tekst za traženje. Npr. GAME OVER. Ako umesto nekog slova stavimo '?' to mesto će biti ignorisano. V - find next text: vrši pretraživanje memorije i traži zadani tekst komandom 'F' ------------------------------------------------------------------------ Poboljšanja uradio Nikola Alivojvodć (ARC soft) johnnya@eunet.yu Nova verzija POKEMAKERA završena je 19.08.1990. Novo: ----- * Ukinuta je podrška za štampač (moralo se, da bi program i dalje bio samo u video memoriji). * očitavanje tastature se više ne vrši preko sistemskih varijabli, tako da je moguće bez bojazni učitavati igru i preko dela memorije gde se nalaze sistemske varijable. * za prekid edit moda (escape) dovoljno je pritisnuti SYMBOL SHIFT loša posledica ovoga je što recimo pri unosu teksta više ne možete da koristite simbole koji se dobijaju pomoću 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 pokazivača. Dakle, nešto kao B..Q..B..Q..B..Q... itd. * T - header: učitava blokove koji imaju header i pri tome automatski uzima podatke gde blok treba da se učita. Dakle, kao LOAD "" [CODE] u bejziku. Pri tome vas obaveštava o o podacima koje je našao u header-u. * O - pointer: pamti trenutnu vrednost memorijskog pokazivača. * K - back to: vraća vrednost memorijskog pokazivača zapamćenog komandom O * Z - the end: postavlja dodatno pitanje: END Y/N ? * C - fill to: unesiti željenu vrednost (veću od memorijskog pokazivača!) i deo memorije od memorijskog pokazivača, pa do te vrednosti biće ispunjen bajtom koji se nalazi na adresi memorijskog pokazivača.