C 64
Autostart

P-Basic-V2: Autostart mit Rückwärtsgang

Dieser Autostarter erzeugt nicht nur ein einfaches Lade-Programm für Basic und Assembler-Programme. Es wird zusätzlich die RUN/STOP-Taste gesperrt und ein Kopierschutz installiert. Um ein so behandeltes Programm wieder verändern zu können, kann mit einem Befehl der gesamte Vorgang rückgängig gemacht werden.

Das Programm »P-Basic-V2« läuft auf dem Commodore 64 (ohne Basic-Erweiterung) und der Floppy 1541 (nicht auf der Datasette, da das Programm beim Laden den Kassettenpuffer benutzt). Es ist zirka 260 Bytes lang und liegt im Speicher ab 49152 ($c000).

Nach dem normalen Laden und Starten des Basic-Programmes, ist das Basic-V2 um drei neue Befehle erweitert:
1. !SAVE"Name", Gerätenummer,1
2. !LOAD"Name", Gerätenummer,1
3. !NEW

Der Hauptbefehl ist !SAVE. Mit ihm kann man ein Basic-Programm oder ein Maschinenprogramm (mit Basic-Startzeile) so abspeichern, daß es nach dem Laden von allein startet. Außerdem wird die RUN/STOP/RESTORE-Taste abgestellt. Das Programm ist somit vor Änderungen gesichert. Auch das Kopieren ist nur mit besonderen Kopierprogrammen möglich. Doch durch eine Codewortabfrage in den ersten Zeilen wird es wohl keiner schaffen, das Programm zum Laufen zu bringen. Ein Programm, das mit dieser Basic-Hilfe abgespeichert wurde, muß mit dem Zusatz »,1« absolut, nicht ab Basic-Start (2049), geladen werden. Lädt man ein solches Programm ohne diesen kleinen Zusatz in den Speicher, so läßt es sich weder listen, noch starten. Weil ein normales Programm mit der Zwei-Byte-Startadresse am Anfang der Datei gespeichert wird, ist es durch ein nochmaliges anderes Abspeichern ganz verloren.

Man kann diese Routine natürlich auch nur zur Bequemlichkeit benutzen. Um die Stopp-Routine wieder zu aktivieren, hilft: POKE808,237 als erster Befehl des Programms.

Ist in dem geschützten Programm nun aber ein Fehler, oder will man es erweitern oder verbessern, so hilft der zweite Befehl. Mit !LOAD kann man alle Programme, die mit Autostart geschützt sind, knacken und nach eigener Lust bearbeiten.

Tritt bei den Arbeiten mit diesen Befehlen ein Fehler auf, den Sie oder das Betriebssystem (Floppy/Computer) verursacht haben, so können sie mit Eingabe von !NEW alle wichtigen Vektoren korrigieren und somit das gerade bearbeitete Programm wieder listen lassen.

Erläuterungen zum Assemblerlisting

In dem Programmabschnitt »Vektorsetzung« wird die Routine zur Erkennung der Befehls-Token (Basic-Befehle) auf die erweiterte Routine (Erkennung) umgelenkt und danach der Name der Basic-Erweiterung ausgegeben.

In der Erkennungsroutine werden die Befehls-Token mit dem neuen Befehl (!) und danach mit den eigentlichen Befehlen (SAVE, LOAD, NEW) verglichen. »SAVE« hat das Basic-Token 148, »LOAD« hat 147 und »NEW« hat 162. Wird keiner dieser Befehle interpretiert, so wird Syntax Error (Jmp $af08) angezeigt. Die DATAs werden in der Vektorsetzungsroutine ausgegeben.

Der Befehl »LOAD«, der wie der Befehl »SAVE« nur im Direktmodus verwendet werden darf, setzt zuerst das Programmodusflag, damit es keine Ausgabe wie »searching for…« und so weiter gibt. Danach werden die LOADparameter geholt ($e1d4) und nach LOAD verzweigt ($ffd5). Nachdem das Programm geladen ist, werden alle Vektoren mit der NEW-Routine wieder zurückgesetzt und dann zur END-Routine verzweigt ($a831).

Der Befehl »SAVE« gleicht am Anfang (bis Ende Zeile 166) dem LOAD-Befehl. In Zeile 168 wird die Steuerroutine in den Kassettenpuffer (Sprite 11) geladen. Dann werden die »Input«- und »Output«-Vektoren auf die Steuerroutine gesetzt und das Programm ab Byte 806 gespeichert. Die Vektoren werden dann mit der NEW-Routine normalisiert.

Die Steuerroutine arbeitet ungefähr so wie die NEW-Routine. Nur bei dieser Routine werden zusätzlich die RUN-Zeiger ($a659) gesetzt, die Run-Stop/Restore-Funktion abgeschaltet und dann zur Interpreterschleife verzweigt.

Bemerkungen zum Programm

Das Befehlszeichen »!« kann natürlich durch fast jedes Zeichen ersetzt werden, nur wenn das Zeichen ein Token ist, muß nicht der ASCII-Wert, sondern der Tokenwert angegeben werden, da sonst der Befehl nicht erkannt wird. Wenn das Zeichen ein Buchstabe ist, kann derselben Variablen kein Wert zugewiesen werden. Denn auch dabei entsteht ein Fehler.

(Jan Kusch/gk)
100 rem*****************************
101 rem*        p-basic-v2.        *
102 rem*                           *
103 rem*   geschrieben 1984  von   *
104 rem*                           *
105 rem*        jan kusch          *
106 rem*****************************
107 forx=0to255:reada:s=s+a
108 poke49152+x,a:next
109 ifs=26106then112
110 print"{down}{down}{down}{down}{down}?fehler in datas :"
111 print"pruefsumme :"s"  (26106)":end
112 poke49152+x,asc ("!")
113 sys49152:new
114 data169,17,141,8,3,169,192,141,9,3,169,49,160,192,76,30,171
115 data32,115,0,205,0,193,240,3,76,231,167,32,115,0,201,147,240
116 data64,201,148,240,88,201,162,240,3,76,8,175,76,180,192,147,144
117 data18,32,208,45,194,65,83,73,67,45,214,50,46,32,32,13,195
118 data45,54,52,32,38,32,214,195,45,49,53,52,49,13,195,79,80
119 data89,82,73,71,72,84,32,40,67,41,9,14,8,0,169,0,133
120 data157,32,115,0,32,212,225,169,0,166,43,164,44,133,10,32,213
121 data255,134,45,132,46,76,180,192,169,0,133,157,32,115,0,32,212
122 data225,162,0,189,218,192,157,64,3,232,201,255,208,245,169,38,133
123 data43,169,3,133,44,169,64,141,36,3,141,38,3,169,3,141,37
124 data3,141,39,3,32,68,229,32,89,225,169,1,133,43,169,8,133
125 data44,169,87,141,36,3,169,241,141,37,3,141,39,3,169,202,141
126 data38,3,169,237,141,40,3,169,0,133,198,76,49,168,169,1,133
127 data43,169,8,133,44,169,87,141,36,3,169,241,141,37,3,141,39
128 data3,169,202,141,38,3,169,225,141,40,3,32,89,166,76,174,167
129 data255
  100 sys9*4096 : .opt oo
  101 *=49152
  102 ;
  103 ;
  104 ;
  105 ;##############################
  106 ;* * *  p - basic - v2.   * * *
  107 ;##############################
  108 ;
  109 ; ****************************
  110 ;*geschrieben1984von*
  111 ;**
  112 ;*jankusch(j-ksoft)*
  113 ;**
  114 ; ****************************
  115 ;
  116 ;
  117 ;##############################
  118 ;####### vektorsetzung ########
  119 ;##############################
  120 ;
  121 lda #<erkennung   : sta $0308
  122 lda #>erkennung   : sta $0309
  123 ;
  124 lda #<datas       : ldy #>datas
  125 jmp $ab1e
  126 ;
  127 ;
  128 ;##############################
  129 ;######### erkennung ##########
  130 ;##############################
  131 erkennung jsr $0073 : cmp befehl
  132 beq entscheidung
  133 jmp $a7e7
  134 ;
  135 entscheidung jsr $0073
  136 cmp #147   : beq load
  137 cmp #148   : beq save
  138 cmp #162   : beq new1
  139 jmp $af08
  140 ;
  141 new1         jmp new
  142 ;
  143 ;
  144 ;##############################
  145 ;########### datas ############
  146 ;##############################
  147 datas .asc "{clr}{blk}{rvon} P-Basic-V2.  "
  148 .byte 13 : .asc "C-64 & VC-1541"
  149 .byte 13 : .asc "Copyright (c)"
  150 .byte 9,14,8,0
  151 ;
  152 ;##############################
  153 ;######## befehl .load ########
  154 ;##############################
  155 load lda #0 : sta $9d
  156 jsr $0073   : jsr $e1d4
  157 lda #00     : ldx $2b  : ldy $2c
  158 sta $0a     : jsr $ffd5
  159 stx $2d     : sty $2e
  160 jmp new
  161 ;
  162 ;##############################
  163 ;####### befehl .save #########
  164 ;##############################
  165 save lda #00
  166 sta $9d     : jsr $0073 : jsr $e1d4
  167 ;
  168 ldx #00
  169 verschiebung  lda routine,x
  170 sta $0340,x : inx
  171 cmp #$ff    : bne verschiebung
  172 ;
  173 lda #<806   : sta $2b
  174 lda #>806   : sta $2c
  175 lda #<832   : sta 804   : sta 806
  176 lda #>832   : sta 805   : sta 807
  177 ;
  178 jsr $e544   : jsr $e159
  179 ;
  180 new lda #1  : sta $2b
  181 lda #8      : sta $2c
  182 lda #$57    : sta 804
  183 lda #$f1    : sta 805   : sta 807
  184 lda #$ca    : sta 806
  185 lda #237    : sta 808
  186 lda #0      : sta 198   : jmp $a831
  187 ;
  188 ;
  189 ;******* steuerroutiene *******
  190 ;
  191 routine lda #1 : sta $2b
  192 lda #8         : sta $2c
  193 lda #$57       : sta 804
  194 lda #$f1       : sta 805 : sta 807
  195 lda #$ca       : sta 806
  196 lda #225       : sta 808
  197 ;
  198 jsr $a659      : jmp $a7ae
  199 ;
  200 .byte $ff
  201 ;
  202 befehl .byte "!"
  203 ;
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →