Programme nachladen
Suche
Index
FAQ
Kontakt
Zurück
Daten nachladen
Oft muessen Programmteile nachgeladen werden. Im Basic läßt sich dieses nur mit einem kleinen Trick erledigen und das Überschreiben des Listings ist ohne "umpoken" der Speicheradresse kaum zu vermeiden. Wesentlich komfortabler geht dieses in Assembler, da man die Möglichkeit hat, direkt die Kernal Routinen zu konfigurieren und dem zu ladenden Programm eine Speicheradresse zuweisen kann. Zudem koennen die üblichen Kernal-Meldungen, die z.B. beim Anzeigen eines Titelbildes sehr stören, abgeschaltet werden. Dieses geschieht durch Löschen der Bits ueber Adresse $FF90. Danach werden logische Filenummer (A), Device Adresse (X) und Sekundäradresse (Y) an $FFBA übergeben und durch Aufruf gesetzt. $FFBD setzt die Länge des Filenames (A) und den Pointer des Dateinamen im Format Lo(X)- und Hi(Y)-Byte. Mit JSR $FFD5 wird das eigentliche Laden ausgeführt. Mit Akku=0 wird das Laden initilisiert und per X/Y koennen Lo/Hi-Byte der Speicheradresse übergeben werden, in die die Daten geladen werden. Falls die letzten Parameter nicht angegeben werden, wird die Ladeadresse der Datei verwendet. Bei manchen Programmen wurde diese Funktion als simpler Kopierschutz verwendet. Es wurden z.B. alle Programmteile mit Ladeadresse $1000 gespeichert und würden sich bei einfachem Laden natürlich gegenseitig überschreiben. Das korrekte Laden war dann nur noch mit dem dafuer vorgesehenen Loaderprogramm möglich. Aber wie bei jedem anderen Schutz auch, ist jeder produzierbare Schutz ebenfalls reproduzierbar, ansonsten hätte man ihn nicht erstellen können. Nützlich ist diese Funktion ebenfalls bei Programmteilen die z.B. im Bildschirmspeicher ausgeführt werden. Man kann diese Programmteile zwar mit einem guten ASM-Monitor an eine andere Ladeadresse laden und danach wieder an die neue (Lade-)Adresse speichern, aber wirklich korrektes späteres Nachladen ist nur durch Übergeben der Ladeadresse möglich. Demnach ist auch dieser gerne verwendete Schutz eher sinnlos. ;)

  !to "loader.prg",cbm
   *=$1000
   

;--------------------------------------------------
; kernal load
;--------------------------------------------------

      LDA #$00
      JSR $FF90                            ; enable/disable KERNAL messages        
      LDA fnnumb 
      LDX drive 
      LDY fn_sec 
      JSR $FFBA                            ; Kernal : Set Logical File Parameters
      LDA fnchars 
      LDX #<(fname)
      LDY #>(fname)
      JSR $FFBD                            ; Kernal : Set Filename
      LDA #$00                             ; 0 = load
      LDX memlo 
      LDY memhi 
      JSR $FFD5                            ; Load (to address)  
      rts
       


;--------------------------------------------------
; parameter setup  
;--------------------------------------------------
     
   drive   !byte $08 
   memlo   !byte $00
   memhi   !byte  $20
   fnchars !byte  $08
   fnnumb  !byte  $0F
   fn_sec  !byte  $00

   fname !tx "CHARSET1"      

 

Letzte Änderung: 2019-01-03 11:42:23
  Rubrik:  C64
Rubriken-Übersicht
 196 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!