Spelpappan hittar guldkorn: Här är 64-trixen bara proffsen kan


I juni tidigare i år skrev jag en artikel för IDG om den gamle knäckaren Pontus ”Bacchus” Berg. Han gav sig under våren in i en knäckartävling som han till slut fick ge upp på grund av tidsbrist – men kontentan med artikeln är att beskriva hur knäckaren tänker och ser på sin omgivning.

Just Pontus Berg var en flitig skribent i tidningen Datormagazin – och bjöd på en fantastisk text som praktiskt taget skapade crackers av lamers.

v64_users_guideLet’s face it. C64-manualen gav inte många ledtrådar till hur du blev en framgångsrik hacker. Vad den handlar om är egentligen bara en grundkurs i BASIC för Commodore 64, en variant av 6502 BASIC som från början skrevs av självaste Bill Gates på Microsoft.

Den som ville dyka in i datorns djupa mysterier fick antingen skaffa sig ordentligare böcker och mödosamt försöka bena ut vad de sade – eller hitta en kunnig vän villig att hjälpa dig stappla genom svårigheterna.

Eller också läste du Pontus Bergs (då Lindberg) artikel.

Det som är speciellt med denna text är att den gömmer hemligheterna bakom spelknäck mitt i en fullt normal artikel om programmering. Gränsen mellan att befinna sig på ena eller andra sidan lagens råmärken var på den tiden hårfin – och är det kanske fortfarande?

Det var inte helt klartlagt om det var olagligt att knäcka spel på 80-talet – men en tidning av Datormagazins kaliber hade i vilket fall inte publicerat en artikel om det. Såvida det inte smögs ut.

Varsågod – Pontus ”Bacchus” Bergs artikel om C64-trix, nu sparad online för eftervärlden:

Här är 64-trixen som bara proffsen kan

Detta är lika sant som det är sagt. Speciellt när det handlar om programmering. Men lugn i stormen. Nu får du experthjälp. Här presenterar Datormagazins Pontus Lindberg sina bästa och hemligaste 64-trix genom tiderna.

Att börja programmera brukar vara ganska klurigt. Och manualen till 64:an ger bara en försmak av vad maskinen kan göra. Framför allt ger den ganska dålig vägledning om man söker de där småtuffa rutinerna som man kan fiffla med och komma på nya, oväntade resultat. Så här, innan vi kommer igång på allvar, kan jag rekommendera “Mapping the Commodore 64”som jag har hämtat mycket grundmaterial till denna artikel ur.

När man lärt sig basic finns det ett par kommandon man ändå aldrig använder. WAIT är ett typiskt sådant. Fritt översatt från min engelska manual (1984 fick man inga svenska manualer!) läser jag:

”WAIT X,Y,Z — programmet väntar resultatet av innehållet i adressen X, EOR:at med Z och AND:at med Y inte är 0”.

Hängde du med kan jag bara gratulera. Nåja, låt oss se vad det kan göra. Ett praktiskt användningsområde är då man väntar på att en tangent skall tryckas ner. På adress 198 finns en angivelse om hur många bokstäver man tryckt ned på tangentbordet och som står i kö till behandling. Denna brukar vara 0 eftersom det inte så ofta finns bokstäver som väntar. Vill man vara säker skriver man:

POKE 198,0

SCN_0048Man är då helt säker på att man tömt teckenkön. Efter det ta kan man skriva WAIT 198,1 för att vänta på den första tangent tryckningen efter kötömningen.

På adresserna 63 och 64 finner vi på vilket radnummer som man låst en DATA sats senast. Mitt eget lilla debuggerprogram då man kollar om man knappar in datasatser skulle väl passa som ett exempel här.

Data freaking

Som du vet kan man få fram slumptal genom att använda RND-funktionen i basic. Vill man ha ett slumptal mellan 0 och 255 kan man hämta värde från två ställen som ger resultatet snabbare (t ex. om du vill ha en ständig ström av slumptal i ett spel). Dessa adresser är dels angivelsen för rasterstrålen (d.v.s vilken rad på skärmen som håller på att ritas upp) eller så kan man hämta det lägsta värdet i klockan. Raster hittar du genom att PEEK:a i adress 53266 och klockan finns på 160, 161 och 162. Klockan är en ganska kul finess även för övrigt.

Med det lilla programmet i programexempel 2 kan du prova att leka med klockan ¡ din dator. Den har förresten två egna variabler som heter TI$ och TI. TI$ är angiven i timmar, minuter och sekunder medan TI anges i jiffys. Jag ber om ursäkt för den något flimriga bilden ¡ programexempel 2, men jag får skylla på att basic inte är lämpligt om man vill ha snabba skärmuppdateringar.

Bandstations trix

Visste du att man kan ha ganska långa programnamn om man vill spara på band? Det finns en adress som styr även detta värde. Upp till 187 tecken kan man faktiskt ha utan problem. För att man inte skall ha två spaltsmeter med programnamn så skriver operativsystemet inte ut namn som är längre än 16 (Observera att detta bara gäller band. Diskfiler kan inte ha längre namn än 16 tecken!). De flesta snabbladdare på band använder denna finess för att få in en del av laddningssystemet i kassettbufferten. 187 tecken är just det antalet tecken som finns kvar då man lagt in fem parameterbytes i början av bufferten.

Om man vill ta in en header (parameterbytes och namnet) i bufferten och sedan undersöka den kan man skriva det magiska hoppet in i operativsystemet:

SYS 63276

Därefter står det en fritt att undersöka kassettbufferten och ändra i den. Man kan ändra på var programmet skall laddas in genom att ändra på adresserna 829 till 833 ($033D-$0340). Vill man sedan köra igång och fortsätta ladda från bandet med de (nya?) parametrar som finns i bufferten skall man skriva det andra magiska hoppet till operativsystemet, kernal:

SYS 62828

Detta är öppningen till en helt ny värld om man kan tolka det som finns i kassettbufferten, (Happy hacking! Ber samtidigt att få tacka Stefan Olofsson som lärde mig denna innersta hemlighet en gång i tiden!)

Print POS

SCN_0049De flesta andra basicsystem har en typ av kommando som styr var på skärmen utskriften ska ske. Exempelvis printpos, CUR (x,y). Detta är något som vi helt saknar i 64:ans basic men som ändå är ganska enkelt att göra själv. Adresserna 201 och 202 håller reda på cursorpositionen. Adress 201 innehåller en pekare till vilken rad man är på och 202 följdaktligen då vilken kolumn.

Antalet kolumner är ganska okomplicerat, nämligen mellan 0 och 39, medan det blir lite klurigare att ta reda på vilken rad man är på. Varje rad kan nämligen vara antingen 40 eller 80 koumner lång. Detta har ni stött på åtskilliga gånger under ert basicprogrammerande och det är ju ganska naturligt att en programrad överskrider en fysisk rad.

Cursor

For att vara säker på att man hamnar på rätt rad rekommenderar jag att ni tömmer skärmen innan ni börjat använda ert nya printpos kommando, för att få alla rader som vi vill ha dem, nämligen bara 40 tecken långa. Sedan skriver vi helt enkelt:

POKE201,X:POKE202, Y:PRINT

“Detta skrivs på rad “X” & kolumn “Y

En blinkande cursor är ju kul men om man vill få den att sluta skriver man bara POKE 204,1. Alla värden utom 0 får den att sluta blinka, så om du istället vill få den att börja blinka skall du bara skriva POKE 204,0. Se programexempel 3.

Färgblink

Man kan ju byta färg på markören på lite olika sätt.
1. Genom att stoppa in ett kontrolltecken i en PRINT sats. Man trycker då på en av siffertangenterna och antingen Control (CTRL) tangenten eller Commodore tangenten.
2. Alternativ 2 är att använda PRINT CHR$(X) där X är en giltig färgkod. Dessa finns i en tabell i slutet på din manual. (Min engelska har den i Appendix F).
3. Det coolaste sättet är givetvis en liten smidig poke. POKE:a i adress 646 och vips byter markören färg.

Tangentbords-trix

Om man håller ner sina tangenter så märker man att det inte är alla som repeterar. Cursor tangenterna, insert/delete samt mellanslagstangenten är det som repeterar. For att få snurr på allihopa POKE:ar du 128 i adress 650. Och för att inte låta någon autorepetera skriver du en nolla i samma adress. Normalt finns det 64 ¡ denna adress om du vill ställa tillbaka allt till det normala.

TV-system

Ett gammalt problem för alla som gör demos och intros är att dessa inte fungerar i USA. Anledningen är att amerikanare inte har samma TV-system som
vi. I USA används NTSC och här har vi PAL .Skillnaderna ligger i att vi har 311 rasterlinjer medan man i USA bara har 262. Vi får därför spara på den redan dyrbara rastertiden för att få våra demodelar att funka “over there”. Men det funkar ändå inte med våra ytterlig välltimade loopar som gör perfekta splittar, DYSPAR och får ut spritar ¡ bordern.

Vi sliter oss i håret och skriker VARFÖR? Svaret är ganska enkelt även här, en NTSC 64:a har inte 63 cykler/raster linje som i Europa utan bara 62. Gör man ett nytt coolt demo sorn man vet inte funkar i USA på grund av detta är det juste att kolla adress 678. Är det 0 i denna adressen är det en NTSC-maskin man befinner sig i och är det en etta är det en PAL-maskin.

Nu kan du sluta undra hur de coola knäckarna i IKARI kan veta om du har en NTSC eller en PAL maskin. Det känns väl skönt?

Jaha. Då har vi tuggat oss igenom allt som jag tyckte var roligt i minnet mellan $0000 och $03FF. Det finns givetvis massor kvar att ösa fram. Men med den tidigare omtalade boken kan du snabbt göra detta själv och mer därtill.

Pontus Lindberg

Jag är väldigt nöjd att jag till sist fick tummen ur och publicerade denna fantastiska text online. Detta är för mig ett typiskt exempel på artiklar som förtjänar att bevaras digitalt för efterlevande.

Ha en fortsatt trevlig söndagkväll!

 


8 svar till “Spelpappan hittar guldkorn: Här är 64-trixen bara proffsen kan”

  1. Datormagazin publicerade ju fler artiklar av Pontus i samma andra, och någon som uttryckligen använde vokabulär om att knäcka eller i alla fall ta sig in i spelen, och instruktioner hur man kunde använda TFC III eller Action Replay för att söka efter strängar i maskinkodsmonitorn. Det var precis på slutet av C64:s ekonomiska livslängd så det kanske inte fanns så många nya spel att knäcka längre.

  2. Jag använde själv Action Replay för att ändra vissa värden i spel.
    Som att ändra stats på karaktärer i rollspel, ändra utrustningar och annat smått och gott.
    Det var för mig en utmaning och jag uppskattade det ibland mer än sjävla spelet.
    Härliga tider :)

  3. @anders: Jo, så är det ju. Denna är rolig för att den passar så väl med de intervjuer jag genomfört med den gode Pontus där han beskriver upptäckten av dessa två SYS-kommandon som porten till hans knäckarkarriär. Det är liksom en inbakt story om hur han själv blev till på scenen.

    @mindrax: Ja, AC gjorde att man kände sig lite computer savvy och kung över spelet ;)

  4. Det som jag gillade med AC var att jag kunde editera direkt i minnet och därmed hitta alla värden på det jag ville förändra.
    Ungefär som med Cheat Engine på PC som är ett grymt verktyg om man vill editera värden i spel.
    Pokefindern för evigt liv osv funkade ju bra med om man skulle fuska med sådant men det var inte lika roligt att pilla med.
    Minns att jag hade fantastiska karaktärer med de bästa grejerna i t.ex Bard’s Tale-serien.

  5. Bacchus och Rowdy deltog i crackingtävlingen, men deras knäck var inte helt färdigt.

    ”Gräv i spelens hemligheter” av Pontus Lindberg i Datormagazin 10/1990 tycker jag är ännu mer på gränsen. Där står det mer utförligt hur det går till att dissekera autostartande tape loaders, då med förevändningen att det är för att hitta gömda textmeddelanden.

  6. Blev lite upprepning där men vad fan :)
    Sorry :P

    Jag älskar i alla fall Action Replay-cartridges och använder min än idag på maskinen.
    Rippade även musik och grafik ur spel med mera på ett ypperligt och enkelt sätt.

    Man blev som du sa Jimmy lite ”savvy” och kände sig som en kung :)

  7. Jo, det var nog nr 10/1990 jag i första hand tänkte på. Artikeln ovan är alltså publicerad 11/1990 så numret efteråt! Dock är frågan hur många som ens i fattig-Sverige fortfarande harvade med bandspelare 1990. Vad jag minns utan att titta efter hade de väl inga diskettrick?

    Jag minns hur redan i mitten av 80-talet diverse POKE och SYS spreds även bland oss dödliga (eller lamers kanske man ska säga) hur man kunde hacka Novaload och allt vad det hette så man fick en READY-prompt efter laddning och kunde spara spelet själv.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *