★ APPLICATIONS ★ DEPLOMBAGE ★ SCHNELLES LADEN VON KASSETTE (HAPPY COMPUTER) ★ |
Schnelles Laden von Kassette (Happy Computer) | Applications Deplombage |
Schnelles Laden von Kassette Auch mit dem Kassetten-Recorder soll das Laden eines Programms nicht zum Frust werden. Man muß nur das Aufzeichnungsformat ändern und die Daten in einem Block speichern. Ein längeres Programm von Kassette zu laden ist zeitaufwendig. Um beispielsweise 20000 Byte mit 2000 Baud zu laden, braucht der Schneider-Computer ungefähr 140 Sekunden. Es gibt viele Tricks, die Baudrate zu ändern (bis zirka 4 000 Baud ist dies mit ausreichender Datensicherheit zu realisieren), aber das eigentliche Problem stellt das Aufzeichnungsformat dar. Die Programme werden nämlich in 2 KByte lange Blöcke zerlegt. Jeder Block hat einen eigenen Kopf (Header), indem Ladeadresse, Länge Name des Programms und so weiter vermerkt sind. Greift man nun direkt auf die Firmware-Routine CAS WRITE zurück, so kann man die Daten ohne Header in einem Block speichern. Die Zeit halbiert sich dann in unserem Beispiel auf 72 Sekunden (bei 2000 Baud). Zum Laden der Programme benutzt der Schneider eine Firmware-Routine mit dem Namen CAS READ. Auf diese kann man auch direkt zugreifen, so daß die in einem Block gespeicherten Daten wieder korrekt gelesen werden können. Die beiden Routinen müssen nun an unsere Wünsche angepaßt werden. Listing 1 ist der Basic-Lader für die Routine CAS READ. Sie muß immer vor dem zu ladenden Programm stehen — sinnvollerweise mit dessen Namen. Die Anweisung hierzu lautet: »SPEED WRITE 1:SAVE"Name"« In Listing 2 finden Sie den Basic-Lader, der die Speicherrou-tine erzeugt. Das Maschinencode-Programm berechnet die tatsächliche Länge des im Speicher stehenden Basic-Programms, lädt die Register des Z80 mit den erforderlichen Werten und ruft die eigentliche Routine CAS WRITE auf. Nachdem Listing 2 einmal gelaufen ist, kann man es löschen und das Programm laden, das man speichern will. Mit »CALL HIMEM + 1« wird die Speicherroutine gestartet und das Programm auf Kassette geschrieben. Beim Lesen von der Kassette wird zuerst die Laderoutine mit »RUN« geladen und dann automatisch das eigentliche Programm in den Speicher geholt. Dieses muß übrigens von Hand gestartet werden, da dies automatisch nicht möglich ist. Mit der hier vorgestellten Betriebssystem-Erweiterung kann man übrigens auch jedes Maschinencode-Programm speichern und laden. Man muß nur die Startadresse und die Länge der Routine kennen (mit einem Headreader-Programm leicht zu bestimmen). Zum Laden muß ein freier Speicherplatz vorhanden sein, der mindestens 12 Byte aufnehmen kann. Das Listing 1 muß um die zwei Zeilen aus Listing 3 erweitert werden. Die Variable »begin« steht für den Anfangsplatz des freien Bereichs minus eins. Die Variablen I, h, e und d sind Platzhalter für folgende Werte:
Wenn in einem Programm solch eine Maschinencode-Routine nachgeladen werden soll, muß der normale Ladebefehl durch »CALL begin+1« ersetzt werden — und die Daten im entsprechenden Format vorliegen. Wenn man das ursprüngliche Maschinencode-Programm im Speicher hat, benutzt man die zwei Zeilen aus Listing 4, um das Programm in der neuen Form zu speichern. Die Variablen sind die gleichen wie im Listing 3.
|