Opisi:
Moj Mikro, Julij/Avgust 1984, Program Meseca, Žiga Turk
LSD, tableta proti glavobolu ob presnemavanju programov
Vse se je začelo decembra 1982, tik pred novim letom. Peščici ponosnih
lastnikov spectrumov je dedek Mraz prinesel prve originalne angleške igrice:
Lačnega Horacija, Planetoide, Simulator letenja, Šah in Bioritem. Stroške smo
si razdelili, vsak pa naj bi tudi dobil kopije programov. Seveda je bilo
navdušenje velikansko in vsak si je čimprej poskušal zagotoviti svoj izvod.
Težko je opisati spoštovanje,s katerim smo se lotili presnemavanja.To so bili
prvi programi in nihče od nas ni pričakoval, da se bo število programov tako
naglo večalo. Poiskali smo vrhunska kasetofona in si iz originalov presneli
vsak svojo kopijo. Praznično razpoloženi bi se vsi radi začeli čimprej igrati.
Tako sva s prijateljem skupaj dobila samo eno kopijo, ki naj bi si jo še enkrat
sama presnela. Slabši izvod sem dobil jaz in ga nisem mogel več zanesljivo
vpisati v računalnik.
Programi za današnje razmere sploh niso bili zaščiteni.Kmalu smo ugotovili,da
je mogoče programe, ki se začnejo izvajati avtomatsko, po vpisovanju ustaviti,
če jih vpišemo z ukazom MERGE. Nekatere vrstice so bile skrite oziroma napisane
z barvo papirja. Nekaj več težav so povzročali deli programov, ki so bili
posneti kot CODE. Pri njih namreč nismo nikoli zatrdno vedeli, koliko so dolgi
in kam se nalagajo. Z nekaj pritiskanja na PEEK po spominu je bilo mogoče
ugotoviti tudi to.
Nekaj mesecev za temi igrami je avtor dobil asembler in disassembler in je
lahko začel »razkopavati po romu«. Knjige ROM Disassembly namreč še ni bilo.
Oba programa sta prišla kot nalašč, saj je podjetje Imagine močneje zaščitilo
svojo Arcadio. Programu sta namreč sledili dve kratki kodi, za kateri nismo
vedeli, kam se morata naložiti.
Brskanje po romu pa ni bilo zaman, odkril sem namreč vhodno točko rutine za
včitavanje s traku. Tako sem HEADER z rutino v strojnem jeziku posnel na
določeno mesto v pomnilniku in ga analiziral. Zgodaj spomladi je tako nastal
program za analizo headerjev - DECODER. Prvih 16 vrstic te verzije LSD je
praktično enakih kot pri decoderju. Kmalu zatem sem odkril še rutino za
snemanje na trak; ko sem te tri rutine povezal, je nastal program LSD (Loader
Saver Decoder in ne Lucy in the Sky with Diamonds).
Naslednje verzije LSD so bile v bistvu iste,vključevale so le dodatne rutine
v basicu, ki so program prilagajale novim tipom zaščit, predvsem za programe
brez headerjev.
Kakšen mesec za prvimi tabletami LSD sta se pojavila še angleška programa
COPYCAT in THE KEY. »Maček« je bil popolnoma neuporaben, saj ni odkrival napak
pri včitavanju. Ključ do zaklenjenih kaset se je pojavil kasneje, bil pa je
nerodno narejen in sta bila za kopiranje programov s headerjem in brez njega
potrebna dva različna programa. Nobeden ni uporabniku omogočal toliko
informacij o dogajanju v programu kot LSD, ki je ob kopiranju lahko izpisoval
direktorno na tiskalnik ali zaslon. Po izidu knjige Spectrum ROM Dissasemby so
programi za kopiranje postali slovenska nacionalna specialiteta. Kako tudi ne,
saj je bilo treba kopirati nekaj novih programov na teden, po možnosti še za
kolege. Nekateri programi so napisani v celoti v strojni kodi in porabijo nekaj
manj spomina, večina pa ohranja elesdejevski način izpisovanja, kaj se dogaja.
Verzija 4.5 vam omogoča avtomatsko kopiranje 99 odstotkov vseh programov, ki
jih srečate pri nas. Nekateri pa so predolgi in bodo zahtevali rutino, ki bo iz
traku včitala le določeno količino podatkov iz sredine piskanja. Še bolj
potrebni pa bodo programi za kopiranje datotek z mikrotračnikov.
Je presnemavanje sploh dovoljeno?
Pravno morda zadeve res niso urejene, toda moralno pomeni kopiranje programov
za druge krajo tistemu, ki se je mučil in program napisal. Kopiranje uvoženih
programov je mogoče sicer upravičiti kot »prispevek k zmanjšanju porabe
deviznih sredstev«, s kopiranjem domačih pa boste kradli avtorjem in neposredno
škodili razvoju domače produkcije programov.
O programu
Program, ki ga imate pred seboj, ni ravno vzor vestnega programiranja. Je
namreč neposredni potomec Dekoderja. To ni zadnja verzija programa, je pa
primeren za objavo, ker je le najnujnejše napisano v strojnem jeziku.
Ko programe nalagate iz basica, se posnemajo tako, kot to zahteva njihov
header. V tem programu pa strojne rutine poskrbijo, da se podatki včitajo na
natančno določeno mesto v spomin, od tam pa v enaki obliki nazaj na trak.
Tri strojne rutine so:
USR 23808 posname v računalnik »len« bytov, prvi od njih pa mora biti »uv«.Če
je »len« = 65535, »uv« ni pomemben. Byti so posneti od adrese st navzgor,
koliko jih je posnetih, pa na koncu pove register BC. Na adresi 23785 je koda
napake (Tape Loading Error). 0-ni napake.
1 - dejansko število bytov na traku je manjše od predpostavljenega (pri
HEADERLESS), vendar so vsi byti pravilno naloženi.
2 - prvi byt je bil napačno predpostavljen.
3 - NAPAKA!
USR 23788 zapiše na trak »len« bytov od lokacije »st« naprej, prvi byt pa bo
»uv«.
USR 23925 prepiše rutine v strojnem jeziku na področje grafičnih znakov.
Program v basicu je pisan tako, da porabi kar najmanj prostora; zato trpi
preglednost:
3 Izpisovanje headerja - izpis sestavlja v p, ki ga PRINTA ali LPRINTA.
28 Programi brez headerja, predpostavi, da so dolgi 65535, na koncu pa izpiše
dejansko dolžino kot ERROR 1.
31 POKE vrednosti, ki jih potrebuje strojna koda, in klic ustrezne rutine.
42 Ko program poženemo z RUN, ta najprej postavi začetne vrednosti nekaterim
konstantam. Prva vrednost je RAMTOP. Če ste podaljšali program, boste morali
to število povečati. Tudi števila, ki se pogosto pojavljajo, so konstante,
saj porabijo manj spomina, kot če bi bile eksplicitno določene.
44 Izpiše MENU:
1 - kopira programe s headerjem
2 - kopira programe brez headerja
3 - izpisuje header na ekran in verificira
4 - izpisuje header na ZX PRINTER
5 - kopira dolge programe.
48 Začetek rutine, ki srkbi za LOAD.
49 Konstante headerja
50 Klic rutine SAVE/LOAD
52 Če ni napake, izpiše header.
53 Če je error ALI izbira 4, POTEM se vrne na začetek, če nisi še nič
posnel, sicer pa pojdi na SAVE.
54 Če je program predolg, to napiši, pojdi na začetek ali pa na vrstico 63.
55 Pripravi se na nalaganje podatkov.
57
61 Upoštevaj napake in izbiro v menuju.
63 Z GOTO 63 po BREAK posnamete na trak vse, kar je bilo uspešno včitano.
Zanka teče po vseh včitanih kosih (max 10).
64 Header.
67 Podatki.
70 Ponovno?
80 Rutina obravnava napake.
90 Dejansko doda program v spomin in vpraša, ali želimo posneti na trak. Če
hitro pohodimo tipko »s«, bo program posnel doslej naloženo. Čaka zelo malo
časa, zato navadno program nalaga, dokler ne porabi vsega razpoložljivega
spomina ali dokler ga za BREAK-GOTO 63 ne pošljemo drugam. Ni najbolj
elegentno, toda ni nam treba stalno pritiskati gumbov med deli programa.
Kako program vtipkati
Najprej vtipkajte PROGRAM 1. Izpis je zaradi večje preglednosti narejen s
programom LLIST 642 s Kasete Radia Študent, zato se ne trudite, da bo tak tudi
na vašem ekranu. Vse besede, ki nastopajo tudi v basicu (»LOADING«,
»SAVEING«...) vtipkajte kot en znak.
Ne preizkušajte, ali dela, ampak ga shranite na trak.
Potem vtipkajte PROGRAM 2.Zadnji znak v stavku REM mora biti na naslovu 24041
kar preizkusite z ukazom poke 24041, code »*«. Ta se mora pojaviti kot zadnji
znak v stavku REM. Lahko si pomagate tudi tako, da natipkate še daljši REM,
ponovite POKE in potem zbrišite, kar je preveč.
Poženite program 2 in vstavljajte vrednosti iz tabele. Izpis, ki se bo
pojavljal na ekranu, se mora ujemati s tabelo. Invertirano izpisani vrednosti
sta zadnja znaka vsote, kar vam rabi za kontrolo.
Pobrišite vse razen prve in z MERGE naložite program 1.
Vpišite še POKE 23635,235. POKE 23636,93
Posnemite na trak kot SAVE »LSD 4.4« CODE 23500,4000.
Testirajte z RUN in upajte, da dela če se vam pojavi opozorilo OUT OF MEMORY,
zvišajte spremenljivko »CL«.
Če program ne dela, ohranite mirno kri in ga poskusite »razhroščiti«.
Kako so programi shranjeni na traku
Vsaka datoteka, ki jo posnamete na trak, najsi bo BASIC, koda ali
spremenljivke, je posneta na enak način. Na traku sta dva dela, header in data,
pred obema pa je t. i. leader, modro-rdeče črte, ki nastavijo nivo kasetofona.
Računalnik najprej posname header. V njem so informacije o podatkih, ki
sledijo. Dolg je 18 bytov:
0 flag, ki pove, da gre za header (0 = header, 1 = data)
1 tip (0 = basic, 1 = numerično polje, 2 = znakovno polje, 3 = koda)
2-11 ime
12-13 dolžina
14-15 začetek kode ali LINE basica
16-17 neto dolžina programa v basicu brez spremenljivk
18 vsota bytov headerja MOD 256
Sledi kako sekundo premora, nato pa se posname še data. To so podatki, ki smo
jih želeli posneti, spet pa je na začetku flag byt in na koncu kontrola vsote.
Ob vsakem nalaganju računalnik sešteva byte. Kar dobi, se mora ujemati z
zadnjim bytom na traku.
Byte, ki jih želimo posneti, si lahko predstavljamo tudi kot serijo ničel in
enic. Na traku so ničle posnete z enim mihajem frekvence 2000 Hz, enice pa z
nihajem 1000 Hz. Povprečna hitrost nalaganja je torej 1500 bitov na sekundo, če
pa je mnogo ničel, boste opazili, da bo čas nalaganja občutno krajši. Program
LSD vam javlja pričakovani čas za SAVE podatkov, ki so v pomnilniku,
upoštevajoč hitrost 1500 bitov v sekundi.
Večino komercialnih programov sestavlja več kosov header/data.
|