Pozdravljeni na straneh programov iz prejšnje Jugoslavije za 8 in 16 bitne mlinčke.



        Sinclair ZX SPECTRUM


News
ZX Spectrum
Commodore 64
Amiga
Amstrad CPC
Commodore +4
Atari ST
Galaksija
Orao
Orao
ReCracks
Misc
Misc
Forum
  
News
 
LSD Copy
Žiga Turk


       Jezik: Angleški
    Povzetek: Več verzij prvega ex-YU Copy-ja.
     Skupina: Kopirni Programi 
      Format: TZX
LSD   Download

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.