Spectrum i njegove neobičnosti

Iako verovatno omaložavaju prethodnika ovog računara, vlasnicima Spectruma bismo ipak preporučili da najpre prouče prethodno poglavlje o ZX81. Razloge nije teško pogoditi: ova dva računara su, i pored toga što je Spectrum znatno moćniji, relativno slična i činilo nam se nepotrebnim da ponovo počinjemo od samog početka, koji se odnosi na organizaciju memorije Spectruma i takozvane sistemske promenljive. U ovom tekstu ćemo se baviti uglavnom njegovim neobičnostima.

Memorija Spectruma je organizovana nešto komplikovanije od memorije ZX81 pošto u njoj mora da se nađe više tipova podataka a i slika u boji. To je uslovilo uvođenje novih sistemskih promenljivih koje su sažete u prvoj tabeli. Pogled na nju otkriva da ROM Spectruma ima 16 kilobajta i zauzima adrese od 0 do 16383. Vlasnici Spectruma opremljenog osnovnom memorijom od 16 K mogu da raspolažu RAM-om koji se pruža između adresa 16384 i 32767, a oni koji su kupili proširenu verziju - do 65536. Sav ovaj prostor, ipak, nije sasvim slobodan - za normalan rad Spectruma potreban je određeni RAM koji se automatski rezerviše svaki put kada uključite računar. Najveća ovakva stavka je ekran koji oduzima 8 kilobajta memorije, o čijoj ćemo organizaciji govoriti kasnije. Počevši od adrese 23296 smešten je bafer koji koristi štampač; kada on nije priključen, ovaj prostor ostaje neiskorišćen. Iza njega sledi 256 bajtova koji sadrže sistemske promenljive i određen broj bajtova koje interno koristi mikrodrajv.

Trikovi sa ekranom

Sve dosadašnje stavke u tabeli su imale fiksne adrese, a sada stupaju na scenu sitemske promenljive. Kraj područja posvećenog mikrodrajvu nije fiksan, već je smešten u sitemsku promenljivu koja se zove CHANS i smeštena je u memoriji na adresama 23531 i 23532. Iza toga se nalaze bejzik programi, korišćene promenljive i nizovi, linija koja se trenutno kuca ili edituje, mašinski stek i, na kraju, RAMTOP. Kod Spectruma RAMTOP ne označava kraj memorije već kraj područja u koje se smeštaju podaci koje koristi neki bejzik program. Iza RAMTOP-a se nalazi područje u koje računar smešta podatke od značaja za generisanje posebnih karaktera koje je korisnik ranije definisao.

Najteže shvatljiva oblast organizacije Spectrumove memorije je ekran. Kao što je poznato, ekran se sastoji od 24 linije od kojih svaka sadrži po 32 karaktera. Svaki karakter je predstavljen određenim brojem tačaka; u normalnom stanju, to je matrica 8x8. Primenom naredbe PLOT, korisnik može da osvetli svaku od tako dobijenih 32x8x24x8=49152 tačke, dajući joj jednu od osam boja. Da li je poslednja rečenica tačna? Jednostavan račun uveriće nas da nije!

Da kontrolišemo boju svake tačke treba da utrošimo 3 bita (tako da, na primer, 000 označava plavu boju, 001 zelenu, 010 crvenu i tako dalje), što znači da nam je za ekran od 49152 tačke potrebno 147456 bita ili osamnaest kilobajta. Pošto se za ekran koristi samo 6,75 kilobajta, jasno je da je primenjen neki trik radi uštede memorije. "Trik" je izveden na sledeći način: u prvih 6 kilobajta RAM-a svakoj tački je dodeljen po jedan bit koji govori računaru da li je ta tačka osvetljena bojom koja je označena kao INK ili bojom koja je označena kao PAPER (1 odgovara boji "mastila", a 0 boji "papira"). Pa dobro, reći ćete, kako računar zna kojom je bojom "ofarban" svaki karakter i, što izgleda još važnije, da li on treperi ili ne? Jednostavno, 768 bajtova memorije koji se nalaze na adresama 22528 - 23296 imaju funkciju "atributa". Svaki od ovih bajtova odgovara jednom karakteru (32x24=768) i dobija vrednost u skladu sa sledećom formulom:

atribut = 128FF+64*B+8*P+I

gde je sa F označen broj 0 ili 1 koji odgovara mirovanju odnosno treperenju nekog karaktera, sa B 0 ili 1 u zavisnosti od toga da li je neki karakter uopšte osvetljen ili nije, sa P broj između 0 i 7 koji označava boju "papira" (prema redosledu na tastaturi, 2 je, na primer, crvena boja), a sa I broj između 0 i 7 koji odgovara boji "mastila".

Bitovi u haosu

Površan pogled na rezonovanje koje smo izložili uliva neverovatno poštovanje prema konstruktorima Spectruma: ušteđeno je nekih jedanaest kilobajta boljom organizacijom memorije! No, kratko razmišljanje nas uverava da i u programiranju važi "zakon održanja energije" (ovde zakon održanja memorije): da bi se memorija organizovala na racionalniji način, morali su da se učine i neki ustupci. Ustupci se sastoje u tome da ne možemo slobodno da raspolažemo bojom svake tačke, već sve tačke koje čine jedan karakter moraju da budu isto obojene. Da li bi bilo bolje da je utrošeno još 11 kilobajta i postignuta kontrola svake tačke ostaje pitanje za diskusiju - Sinclair se nije odlučio za ovakvo rešenje s obzirom na to da bi tako morao da zaboravi na ZX Spectrum sa 16 K RAM-a.

Voleli bismo da ovim možemo da završimo izlaganje o ekranu ali ne smemo da prenebegnemo "sitnicu" koju nije lako objasniti: već smo rekli da je svakoj od 256x192=49152 dodeljen jedan bit koji reprezentuje njeno stanje. Tako dobijeni bitovi zauzimaju prvih 6 K memorije ali organizovani na, kratko rečeno, neshvatljiv način. Sve će postati jasno (ili nejasno) ako otkucate i izvršite sledeći bejzik program:

Računar najpre ispunjava ekran punim karakterima i snima ga na kasetu. Zatim ekran biva izbrisan i počinje unošenje njegovog sadržaja. Ovo unošenje traje toliko dugo da ćete primetiti da se ekran ne popunjava odozgo nadole, sleva nadesno ili na bilo koji način koji možete da očekujete, nego po sekcijama koje se sastoje od po osam redova karaktera. Karakteri se, opet, ne unose celi nego liniju po liniju: računar najpre ispisuje prvi red tačaka drugog reda i tako dalje sve dok ne stigne do osmog reda. Zatim se vraća nazad i ispisuje drugi red tačaka koje čine prvi red karaktera, prelazi na drugi red i tako dalje sve dok ne završi prvu sekciju ekrana kada prelazi na drugu i, na posletku, na treću. Bitovi koji odgovaraju karakterima su raspoređeni na isti ovakav neverovatan način.

Ako vas je od prethodnog objašnjenja zabolela glava, ne brinite - ni vrhunski programeri ne mogu lako da ga "svare". Napisati mašinski program koji će osvetliti neku određenu tačku na ekranu nije lako, pa se u već većini komercijalnih programa pozivaju gotove rutine iz ROM-a - nećemo trošiti vreme na njihov opis s obzirom na to da pretpostavljamo da posedujete knjigu "Spectrum ROM Disassembled".

Četrdeset karaktera

Pravi je trenutak da boljim programerima uputimo i jedan mali izazov: možete li da sastavite program koji će da omogući stvaranje 40 karaktera u svakom redu? Program namerno nećemo dati, ali vam mogu koristiti neki praktični saveti:

Pretpostavimo da želite da štampate sadržaj alfanumeričke promenljive a$ koja sadrži 40 znakova u jednoj jedinoj liniji ekrana. Treba, pre svega, da pronađete promenljivu a$ u području koje je određeno za čuvanje bejzik varijabli. To ćete najlakše uraditi konsultujući ponovo knjigu "Spectrum ROM Disassembled" i rutinu LOOKVARS koja počinje od adrese 10418. Kada pronađete adresu prvog bajta promenljive a$, nađite CODE tog karaktera, a zatim i osam bajta podataka koji se nalaze u ROM-u i određuju oblik tog slova (tabela sa oblicima slova u ROM-u započinje od 15616). Formula koju pri tom koristite je "oblik karaktera počinje od adrese 15360+8*CODE (a$(1))".

Pošto locirate potrebnih osam bajtova, smestite ih redom u prvi, trideset treći, šezdeset peti, devedeset sedmi itd. bajt područja memorije koje je označeno kao "bafer za štampač". Ovo područje može zgodno da se upotrebi s obzirom na to da sadrži baš onoliko bajtova koliko i jedna linija od 40 karaktera.

Zatim nađite CODE drugog karaktera, odgovarajućih osam bajtova koji govore o njegovom obliku i prenesite ih u drugi, trideset četvrti i tako dalje karakter bafera za štampač. Kada to učinite, pomerite svaki bajt ulevo za po dva bita i pređite na treći karakter niza a$. Kada njegov oblik prenesete na odgovarajuća mesta, pomerite svaki bajt bafera ulevo za četiri bita pa pređite na sledeći karakter. Kada isto učinite sa svih 40 karaktera, problemi su se približili kraju. Ostalo je "samo" da prenesete sadržaj bafera u deo memorije koji je namenjen ekranu i to ne na prirodan način, vodeći računa o, blago rečeno, čudnom rasporedu za koji se konstruktor opredelio.

Na ekranu može da nađe mesto pedesetak karaktera (da budemo precizni, 51 s obzirom na to da se svako slovo relativno pristojno predstavlja matricom 5x7 i da je 51x5=255, tj. skoro 256) pa i više, do 64, ali tada neka slova gube prirodni oblik. Da bismo izveli bilo koju od pomenutih operacija, moramo da upoznamo mašinski jezik Spectruma. Nemamo nameru da se ovom prilikom previše upuštamo u njegovo objašnjavanje (ako za to ima interesa, možemo da pokrenemo Školu mašinskog jezika u "Galaksiji"), ali ćemo svakako objasniti način na koji mogu da se unose mašinske instrukcije i dati nekoliko primera.

Mašinac u REM liniji

Kod ZX81 mašinski programi se, kao što znamo, smeštaju u prve REM naredbe programa. I kod Spectruma može da se pribegne istom rešenju koje ima nekoliko odličnih strana (najbolja je ta što se bejzik i mašinski program istovremeno učitavaju u memoriju), ali koje je prilično nepopularno među vlasnicima Spectruma iz razloga koji autoru ovog teksta nisu naročito jasni. Verovatno je da je Spectrumova mogućnost da, pomoću naredbe SAVE... CODE snima bilo koji segment memorije na traku podstakla programere da mašinski program smeštaju iza bejzika i da njegovo učitavanje povere bejzik programu koji je na traku smešten ispred njega. Bilo kako bilo, mašinski program možete da unesete pomoću programa koji je relativno sličan odgovarajućoj rutini za ZX81; jedina principijelna razlika je proistekla iz činjenice da Spectrum koristi ASCII, a ZX81 neki specijalni kod za smeštanje karaktera. Ukoliko je, kao što je to često slučaj, mašinski program dat kao decimalni (a ne heksadekadni) damp, možemo da zamenimo naredbe 20, 25, 30 i 35 jednostavnim POKE - tada prevođenje heksadekadnih vrednosti nije potrebno i može samo da izazove probleme.

Iskoristimo novi program i unesimo mašinsku rutinu koja će ga testirati. Kada smo već kod testiranja, ne bi bilo loše da program koji ćemo sastaviti testira memoriju našeg spectruma i uveri nas da krivicu za sve naše programe koji ne rade ne snosi "neispravni računar". Test je vrlo jednostavan: najpre ćemo u svaki bajt memorije upisati broj 00 i proveriti da li je svaki njegov bit "resetovan", a zatim ćemo upisati FF i proveriti da li je on "setovan". Ne možemo, jasno, da upisujemo podatke u svaki bajt RAM-a s obzirom na to da bi računar krahirao kada bismo poremetili sistemske promenljive, ali možemo da proverimo "slobodan" deo RAM-a - da je memorija neispravna kod neke od sistemskih promenljivih, računar verovatno ne bi ni radio.

Program dat u sledećoj tabeli smestićemo, naravno, u bafer za printer (počevši od adrese 23296) i startovati sa PRINT USR 23296. Ukoliko je sve u redu, nekoliko trenutaka kasnije će se na ekranu pojaviti broj 32575 (65343 za mašine sa 48 K) koji indicira da je računar ispravan. Ukoliko nije, ponovite čitav test proveravajući da li je program dobro unesen. Ako jeste, vaš računar je neispravan ili (što je nešto verovatnije) u našem specijalnom izdanju postoji bar jedna štamparska greška.

Ekskluzivni RESET

Pisanje mašinskih programa je, kao što ćete se ubrzo uveriti, "hleb sa sedam kora". Ako u bejzik programu pogrešite, neće se desiti ništa loše - pritisak na BREAK će na ekranu dovesti poznatu poruku READY i moći ćete da ispravite grešku i ponovo startujete program. Ako se, međutim, u vašem mašinskom programu nađe instrukcija tipa

CIKLUS JR CIKLUS

naći ćete se u velikoj nevolji. Čak i onome ko ne poznaje mašinski jezik nije teško da zaključi da se računar, izvršavajući ovu instrukciju, stalno vrti u "proceduri" koju ne možemo da prekinemo pritiskom na BREAK - ovaj taster je pri izvršavanju mašinskog programa potpuno "isključen". Jedini izlaz je da isključimo računar iz mreže i trenutak kasnije ga ponovo uključimo. Tada će sve biti u redu, ali će i svi programi iz memorije biti nepovratno izgubljeni.

Vlasnici Spectruma su na razne načine izbegavali ovaj problem: neki su svaku verziju mašinskog programa snimali na kasetu kako gubitak memorije ne bi bio tragičan, ali ovakvo rešenje izaziva priličan gubitak vremena. Drugi su se dosetili da u mašinskim programima vrlo često testiraju da li je taster BREAK pritisnut u nadi da će "krah" nastupiti zato što računar neprekidno izvršava istu veću grupu instrukcija, treći su koristili RESET nožicu procesora Z80 da bi, preko jednog tastera, obezbedili hardverski prekid rada, u čemu su imali manje ili više uspeha, a četvrti su izabrali najlakše rešenje: nisu ni pisali mašinske programe. Na žalost, nevolja nastaje i kod bejzik programa koji, na primer, izgleda ovako:

10 INPUT LINE A$ GO TO 10

Startuje ovaj program i pokušajte da ga prekinete. To će biti veoma teško - skoro nemoguće.

Zahvaljujući Englezu Toniju Bejkeru (Toni Baker) svi problemi ovog tipa mogu da postanu neprijatna prošlost. U prvom broju časopisa Your Spectrum (januar 1984; ovo je, inače, ekskluzivna informacija koja je ušla u naše specijalno izdanje u poslednjem trenutku, pola sata pre konačnog zaključivanja) objavljen je, naime, program koji bez ikakvih hardverskih intervencija omogućava prekid izvršavanja bilo kog mašinskog ili bejzik programa jednostavnim pritiskom tastera!

Program koji dajemo treba da smestite u memoriju vašeg Spectruma (mogućnost, na žalost, postoji samo za one koji poseduju Spectrum 48 Kb) počevši od adrese 80E2 koristeći hex-loader. Program ima samo 89 bajta, pa njegovo unošenje ne predstavlja baš nikakav problem: probajte ga čak i ako niste počeli da pišete mašinske programe. Novi RESET će biti aktiviran ako otkucate RANDOMIZE USR 33001. Kad vam god zatreba da izvršite RESET, jednostavno istovremeno pritisnite tastere CAPS SHIFT ENTER. Na ekranu će se pojaviti odgovarajuća poruka i računar će biti spreman za normalan rad! Ukoliko želite da isključite RESET, otkucajte RANDOMIZEUSR32994. Čini nam se da nećete osetiti potrebu da bilo kada isključujete ovu novu proceduru i da ćete se učitavati u memoriju svaki put kada uključite vašeg Spectruma.

Nova naredba RESET funkcioniše čak i u toku izvršavanja nekih internih funkcija računara. Otkucajte, na primer, neki bejzik program i pritisnite ENTER da bi ovaj bio izlistan. U toku listanja pritisnite RESET i ono će trenutno biti prekinuto. Naredba RESET ima i par minornih značenja:

bulletIzvršavanje naredbe NEW će deaktivirati RESET čak i ako je ovaj program smešten iznad RAMTOP-a. Naredba RANDOMIZE USR 33001 će ga, jasno, ponovo aktivirati ako nije izbrisan.
bulletRESET ne radi dok računar izvršava SAVE, LOAD ili BEEP. Tada je, naime, interapt isključen i trik na kome je program zasnovan više ne funkcioniše. Ukoliko se u vašem mašinskom programu na samom početku nalazi instrukcija DI (ne zaboravite na EI pre povratka u bejzik), RESET neće moći da ga zaustavi. Zašto biste želeli da to onemogućite? Jedino zbog eventualne zaštite programa, koja je sledeća na našem dnevnom redu.

Kontrolor snimanja

Mehanizam zaštite komercijalnih programa je znatno komplikovaniji i, samim tim, teži za "probijanje" od metoda koji se primenjuju na ZX81. Ipak, dokazano je da se program pisan za Spectrum ne može zaštititi od presnimavanja na način koji nije savladiv. Zaštićeni programi su prava zagonetka za one koji uče programiranje i nepotrebno mistifikuju računar. Ipak, čini nam se da nema velikog smisla trošiti vreme i imaginaciju za unapređenje zaštite koja pred iskusnim korisnikom pada u vodu. Ovo "iskusni korisnik" može da se odnosi i na vas - dovoljno je da pročitate pasuse koji slede.

Objavljivanjem programa za skidanje zaštite nemamo cilj da vam damo u ruke "kalauz" za komercijalne programe već korisnu alatku za brzo sređivanje svoje postojeće biblioteke programa.

Mehanizam zaštite se zasniva na automatskom startovanju programa. Ukoliko se mašinski program nalazi u okviru bejzika (na primer, u nekoj REM liniji), skidanje zaštite je trivijalno: otkucamo MERGE"": STOP i startujemo kasetofon. Po učitavanju programa, njegovo izvršavanje će biti prekinuto (ili, da bude precizniji, neće ni započeti), pa ćemo moći da ga snimimo na kasetu primenom obične naredbe SAVE.

Pravi problem, međutim, predstavljaju mašinski programi koji su snimljeni sa SAVE... CODE i koji se automatski startuju. Da bi se njihovo presnimavanje uspešno obavilo, moramo u memoriju da unesemo poseban program poznat pod imenom "brejker" ili, kulturnije, "save controler" (kontrolor snimanja). Jedan takav program je sastavio Bogdan Kosanović iz Beograda koji nam je pružio značajnu pomoć pri realizaciji ovog poglavlja. Program ovde objavljujemo uz neophodna uputstva za njegovo kucanje, snimanje i upotrebu.

Kucanje programa

Najpre otkucajte bejzik program koji je prvi naveden i snimite ga na kasetu sa SAVE "Breaker 3.2" LINE 10. Program je snimljen tako da se automatski startuje; razlog za ovakvo snimanje nije u tome što sam program treba da bude zaštićen nego u tome što je njegova upotreba znatno jednostavnija kada ne moramo da kucamo RUN posle svakog učitavanja.

Po uspešnom snimanju i verifikaciji programa izvadite kasetu, ubacite neku drugu (ovde će ta kaseta biti upotrebljena samo kao pomoćna), otkucajte NEW i unesite bejzik program dat na sledećoj. Ovaj program ne treba da snimate - on je namenjen jedino unošenju mašinskog programa koji će predstavljati integralni deo "breakera". Pošto dobro proverite ispravnost DATA linije, startujte program sa RUN. Trenutak kasnije računar će zatražiti da startujete kasetofon i tako snimite mašinski program.

Ostala je još jedna stepenica. Otkucajte NEW i unesite sledeći kratki BASIC program i startujte ga sa RUN. Moraćete da premotate pomoćnu kasetu i u memoriju unesete program koji je upravo snimljen. Posle toga možete da odstranite pmoćnu kasetu i, po zahtevu računara, snimite finalni mašinski program iza bejzika koji je već snimljen na prvu kasetu. Neprijatni deo posla je završen i možete da počnete da koristite brejker.

Napominjemo da su ovolike manipulacije bile apsolutno neophodne. Osnovna karakteristika koju dobar "save controler" treba a ima je da bude što kraći da bi pomoću njega mogli da se presnimavaju što duži programi. Nije, na žalost, moguće odmah smestiti mašinski program na pravo mesto pošto bi se kosio sa bejzik programom koji ga unosi. Zato on najpre biva snimljen na više adresa da bi, pomoću drugog programa, bio "spušten" na pravo mesto. Autoru programa se činilo da njegovo unošenje na ovaj način oduzima vreme samo jednom i da se kasnije program koristi uz veće mogućnosti.

Presnimavanje...

Kada zaželite da presnimite neki zaštićeni program, unesite breaker sa LOAD. Pošto se program uspešno učita, na ekranu će se pojaviti "meni", odnosno spisak opcija koje možete da upotrebljavate.

Ako ste početnik namenjene su vam opcije bp, sp i vp.

Da biste uneli neki program u memoriju otkucajte bp (uz uobičajeno ENTER) i startujte kasetofon. Po učitavanju programa, računar će od vas zatražiti da umetnete kasetu na koju program treba da se snimi, završite snimanje a onda se od vas očkuje da premotate kasetu da bi se izvršila verifikacija snimka. Posle toga, možete ponovo da otkucate bp i tako unesete neki drugi program ili da otkucate sp i tako snimite program koji se i dalje nalazi u memoriji na neku drugu kasetu. Posle ovoga možete da upotrebite vp i tako verifikujete novi snimak. Opcije sp i vp možete da ponavljate koliko je god puta potrebno.

Analiza programa

Sledeći stupanj poznavanja Spectruma vam dopušta da koristite opciju ep. Po njenom izvršavanju računar unosi program sa trake i smešta ga u memoriju od adrese 25500 (dekadno). Posle toga možete da prekinete rad "brejkera" (sa CAPS SHIFT 6), i analizirate uneseni mašinski program pomoću disasemblera ili nekog sličnog programa. Treba da vodite računa o jednoj činjenici: program je veštački učitan tako da počinje od adrese 25500, što ne znači da on treba tamo da se nalazi da bi se korektno izvršavao. Štaviše, ako startujete mašinski program sa RANDOMIZE USR 25500, skoro je sigurno da će uslediti blokiranje računara i da ćete morati da ga isključujete i ponovo uključujete. Opcija lp je, dakle, namenjena samo analizi programa, dok za njegovo učitavanje "na pravo mesto" morate najpre da upoznate strukturu dela programa koji se zove zaglavlje ("header").

Promena zaglavlja

Program se kod Spectruma sastoji iz dva dela: zaglavlja i podataka. Zaglavlje zauzima 17 bajtova koji su podeljeni u nekoliko grupa. Prvi bajt daje računaru informaciju o tipu program (OO za bejzik, 01 za brojni niz, 02 za alfanumerički niz i 03 za ono što nas najviše interesuje: mašinski program snimljen sa CODE ili SCREEN), sledećih deset bajtova sadrži ime programa (ako ime ima manje od 10 simbola, praznine se popunjavaju blankovima; ako program nema ime, prvi od ovih deset bajtova sadrži FF), a zatim slede parametri bloka kojima treba posvetiti posebnu pažnju.

Prva dva parametra predstavljaju dužinu bloka u bajtovima (ako sa Bx obeležimo sadržaj x-tog bajta zaglavlja, dužina programa se računa kao 256*B12+B11), a sadržina sledeća četiri zavisi od tipa programa.

Ako se radi o BASIC programu, broj linije od koje se program automatski startuje dat je sa B13+256xB14. S obzirom na to da B12 i B11 daju dužinu programa zajedno sa promenljivima, potrebni su bajtovi 15 i 16 za "pamćenje" dužine samog programa. Dužina se, kao i obično, izračunara kao B16x256+B15.

Ako je sniman numerički niz B14 sadrži njegovo ime (kod Spectruma imena nizova mogu da imaju samo jedn slovo) pri čemu je njegov bit 6 uvek nula. Ako je sniman alfanumerički niz, njegovo ime je ponovo sadržano u četrnaestom bajtu s tim što je šesti bit sada jedan.

Ako je, najzad, sniman mašinski program, apsolutna adresa od koje program treba da bude unesen u memoriju može da se dobije kao B13+256xB14, dok sadržaji B15 i B16 nisu bitni.

Kada smo razumeli strukturu zaglavlja, možemo da upoznamo opcije koje omogućavaju manipulacije sa njim. Sa lh učitavamo samo zaglavlje i smeštamo ga u memoriju. Zatim možemo, sa sh, da snimamo zaglavlje na novu traku, da učitamo blok koji se nalazi iza zaglavlja sa lb i da ga snimamo sa sb (svako snimanje može da prati verifikacija uz korišćenje opcija vh odnosno vb), ali ovakva manipulacija nema velikog smisla - bilo je jednostavnije da smo koristili opciju bp. Posle unošenja zaglavlja, međutim, možemo da izaberemo opciju th i računar će ispisati sadržaj zaglavlja i omogućiti nam da ga menjamo. Možemo, na primer, da izmenimo ime programa i da zatim snimimo zaglavlje i blok. Mnogo je interesantnije eksperimentisati sa promenama ulaznih adresa i drugih parametara bloka, ali ovakva promena nosi ogroman rizik - možemo da zadamo parametre koji nemaju smisla i tako onemogućim unošenje presnimljenog program u memoriju.

Programi bez zaglavlja

Ovaj "brejker" omogućava presnimavanje najvećeg broja (nekih 97%) komercijalnih programa. Ipak, pred jednom zaštitom on je nemoćan: neki autori prave programe u kojima je simulirana naredba LOAD, tako da blok sa mašinskim programom ne sadrži zaglavlje. Jedini programi zaštićeni na ovaj način koji su nam došli do ruke su fort, cyrusis chesse i turk chess. Preporučujemo vam da, uz pomoć disasemblera, pronađete deo mašinskog programa koji vrši snimanje i da iz njega pročitate potrebne adrese. Za ovakvo proučavanje potreban je određeni nivo poznavanja Spectruma, ali vas u toku rada može držati ideja da ćete dok ne presnimite program, mnogo naučiti i da sigurno ne postoji savršen metod zaštite programa! 

Zagonetke Sharp-a PC1500 Moja home strana