BOOT-File beim Einschalten laden ...

Es gibt 15 Antworten in diesem Thema, welches 5.302 mal aufgerufen wurde. Der letzte Beitrag (3. März 2006 um 23:45) ist von Kratznagel.

  • Hallo zusammen !!

    so, ich hab nu auch mein MMC64, *freu*
    Gleich noch ne 512MB Toshiba-Karte geholt und ...
    funzt ! :]
    Die HVSC is nu schonmal drauf, bleiben aber bei FAT16-Formatierung "nur" noch 192 MB über. Das muß wohl an den relativ großen Clustern beim FAT16-Filesystem liegen, denke ich ...
    Egal, 192 frei reichen dicke !! :]

    Eine Frage hab ich noch:
    Weiß jemand, wie das BOOT-File genau heißen muß, damit es beim Einschalten automatisch gestartet wird ?

    Das Manual schweigt sich darüber aus, da steht nur, daß man das File ins SYSTEM64-Verzeichnis legen soll. ABER WELCHES ?? ?(

    Geht auch ein Programm mit Basic-Start (Ladeadr. $0801) oder muß es ein File sein, welches einen Autostart besitzt (z.b. Ladeadr. $0302).
    gibt es Beschränkungen seitens der Dateigröße ??

  • Lies mal Olivers Nachrichten hier im MMC64 Forum. Er hat es schonmal verraten wie die Datei heisst, ist mir aber momentan wieder entfallen wie genau.

    Code: Floppy Fehlerkanal abfragen - Ausserdem kann ich bei "drive not ready" den I: und N: Befehl verwenden und notfalls den Kopf manuell zurückschieben. Und Finger weg vom Stepper!
    10 open1,8,15                   : rem 8 ist die Geräteadresse und das kann man bei Bedarf natürlich anpassen
    20 get#1,a$:?a$;:ifst<>64goto20 : rem Das CLOSE 1 am Ende kann man sich sparen, weil beim RUN automatisch ein CLOSE ALL ausgeführt wird.
    RUN
  • Zitat

    Weiß jemand, wie das BOOT-File genau heißen muß, damit es beim Einschalten automatisch gestartet wird ?

    Laut Oliver´s Beschreibung heisst es 'boot.c64' und muss sich im system64 Directory befinden.

    Gruss RectowN
    [EMAIL=Bitte melde dich an, um diesen Link zu sehen.]Bitte melde dich an, um diesen Link zu sehen.[/EMAIL]

  • Hi RectowN,

    ich weiß nicht, ob und wo das Oliver beschrieben hat, es kann jedoch nicht richtig sein !!
    Wenn ich ein File namens boot.c64 ins system64-Verzeichnis reintue, passiert nix, außer daß der gewohnte filebrowser kommt.

    Nach dem genaueren Untersuchen der Recovery - Datei kam ich drauf, daß das File boot.bin heißen muß !

    O.k., ich hab dann mal ein normales File (Ladeadresse $0801 mit sys 2072 als Start)
    hinein getan und zu boot.bin umbenannt, und siehe da, der C64 mach etwas, was wie daten schaufeln aussieht (zumindest zeigt mir das meine Bitte melde dich an, um diesen Link zu sehen. an)

    nach dem Kopieren des Files hangt sich die CPU auf, vielleicht ist die Einsprung-Adresse falsch ??

    Für n paar Tips vom Hersteller wäre ich (und viele andere wohl auch) dankbar :]

  • Du hast recht, mit BOOT.BIN tut sich zwar irgendwas - nur leider startet das Programm nicht.
    Ist jemand weiter gekommen ?

    Gruß
    Thomas

  • Hat sich hier mal was getan?
    Hat schon jemand was herausgefunden?
    Oliver_A, bitte melde dich! :D

    Bei mir geht's auch nicht (BIOS V1.01). Datei wird zwar geladen aber nicht gestartet bzw. das Starten schlägt fehl (einfarbiger Bildschirm).

    Zitat

    Original von RectowN

    Laut Oliver´s Beschreibung heisst es 'boot.c64' und muss sich im system64 Directory befinden.

    Zitat

    Original von GI-Joe
    ich weiß nicht, ob und wo das Oliver beschrieben hat, [...]


    In Bitte melde dich an, um diesen Link zu sehen.. Da hat er sich wohl vertan. Außerdem dachte ich es sollte möglichst alles im Verzeichnis SYSTEM64 großgeschrieben sein.

    Zitat

    Original von GI-Joe
    Nach dem genaueren Untersuchen der Recovery - Datei kam ich drauf, daß das File boot.bin heißen muß !


    Genau, äh - besser BOOT.BIN, obwohl ich mit boot.bin genauso weit kam.

    Zitat

    Original von GI-Joe
    Für n paar Tips vom Hersteller wäre ich (und viele andere wohl auch) dankbar :]


    Genau!

  • Frag' doch tnt. Sein Browser ist ja auch autooboot-fähig. :)

    Ich schätze mal, die Startadresse muss gleich der Ladeadresse sein (ist jedenfalls bei Plugins so).

    Update: Ich hab's gerade eben mal getestet - und lag mit meiner Vermutung richtig: Die Startadresse des Files muss mit der Ladeadresse identisch sein, d.h. wenn ein File ab $1000 beginnt, muss es auch ab $1000 ausführbar sein.

    CU
    Kratznagel

  • Zitat

    Original von Kratznagel
    Ich schätze mal, die Startadresse muss gleich der Ladeadresse sein (ist jedenfalls bei Plugins so).


    Blöde Frage, wie bekomm ich die beiden Adressen raus?
    Wenn ich mir die Plugins mit 'nem Hexeditor angucke, fangen einige mit 0010 an, also $1000 (erst Low- dann High-Byte, oder?), andere fangen aber mit unterschiedlichen Adressen an. Ist das dann die Start- oder Ladeadresse und wie sehe ich die andere?

  • Boot file is called "BOOT.BIN" with all uppercase letters, and it must be in "SYSTEM64" directory (all uppercase here as well).

    After loading BIOS just jumps into load address.

    You can't load it into $0800..$09FF as BIOS uses that for FAT cluster cache. Under-I/O RAM is also unloadable, and if I remember correctly $01 is set to $37 so you can't start programs residing completely under ROM either. The safest way for big programs is to put it at $0A00.

    Kernal & BASIC are both uninitialized, so you need to do it yourself.

    I hope this helps, ask if you need more information.

  • Zitat

    Original von PohliWenn ich mir die Plugins mit 'nem Hexeditor angucke, fangen einige mit 0010 an, also $1000 (erst Low- dann High-Byte, oder?), andere fangen aber mit unterschiedlichen Adressen an. Ist das dann die Start- oder Ladeadresse und wie sehe ich die andere?


    Ja, bei Plugins ist die Ladeadresse (die ersten zwei Bytes) immer auch die Startadresse. Das ist die Voraussetzung für ein File, damit es vom MMC64 als Plugin bzw. Autoboot ausgeführt werden kann.

    Hat man nun ein File, welches diese Voraussetzung nicht erfüllt, könnte man direkt vor das File noch einen Sprung auf die eigentliche Startadresse setzen, um es von der Ladeadresse her ausführbar zu machen.

    CU
    Kratznagel

  • Zitat

    Originally posted by tnt
    Kernal & BASIC are both uninitialized, so you need to do it yourself.

    Excerpt from MMC64 browser:

  • Zitat

    Original von tnt
    You can't load it into $0800..$09FF as BIOS uses that for FAT cluster cache.


    This is silly as most prg files have $0801 as load address.

    Zitat

    Original von Kratznagel


    Ja, bei Plugins ist die Ladeadresse (die ersten zwei Bytes) immer auch die Startadresse. Das ist die Voraussetzung für ein File, damit es vom MMC64 als Plugin bzw. Autoboot ausgeführt werden kann.


    Das mit den Lade- und Startadressen hab ich nie so richtig kapiert. Im folgenden beschreibe ich mal, wie ich das ganze verstanden habe.

    Also nehmen wir eine PRG Datei, egal ob auf Diskette, im d64-Image oder als einzelne PRG Datei auf'm PC. Die ersten beiden Bytes nennt man Ladeadresse.
    Diese Ladeadresse ist eigentlich fast immer $0801 (im Hexeditor steht dann 01 08 ...), auch wenn das Programm in Assembler geschrieben ist. Dann hat es nämlich einen sogenannten BASIC Loader.
    Zeigt das folgende Bild einen BASIC Loader oder ist es was völlig anderes?
    Bitte melde dich an, um dieses Bild zu sehen.

    Wenn ich nun eine PRG Datei von Diskette mit LOAD"NAME",8,1 lade, was passiert dann genau?
    Ich denke, das Laufwerk beginnt die Datei an den Rechner zu übertragen. Die ersten beiden Bytes von der Datei, die am Rechner ankommen, sind also die beiden Bytes der Ladeadresse. Diese sagt dem Rechner, wo er die nächsten Bytes der Datei hinpacken soll. Da die Ladeadresse meistens $0801 ist, packt der Rechner also das dritte Byte der PRG Datei an die Stelle $0801 im Speicher, das vierte nach $0802, das fünfte nach $0803 usw. Die Ladeadresse selbst wird verworfen, da sie nun nicht mehr gebraucht wird.
    Falls man eine Datei aber nur mit ,8 statt ,8,1 liest, ignoriert der Rechner die Ladeadresse, verwirft sie auch und lädt das PRG automatisch nach $0801. Deshalb ist es auch egal, ob man die meisten Programme mit ,8 oder ,8,1 lädt, da sie sowieso meistens $0801 als Ladeadresse haben.

    Ich hoffe mal, soweit liege ich richtig. Aber was ist nun die sogenannte Startadresse? Die müsste doch eigentlich auch $0801 sein, da dort der Beginn des Programms ist. Also müsste die Startadresse immer gleich der Ladeadresse sein.

    2 Mal editiert, zuletzt von Pohli (28. Februar 2006 um 16:28)

  • Du hast schon *fast* alles richtig erklärt. ;)

    Allerdings ist $0801 nicht die Startadresse des ASM-Programms, da sich hier nur der BASIC-Header (SYS XXXX) befindet. Und dieser BASIC-Code muss sowieso entfernt werden, da das MMC64 keinen BASIC-Code als Plugin/Boot-File ausführen kann.

    Ich will das mal etwas genauer anhand Deines Beispieles erklären:

    Um ein ASM-Programm vom BASIC-Prompt aus zu starten, ist der Befehl SYS, gefolgt von der Startadresse des ASM-Programmes einzugeben. In Deinem Beispiel ist die Startadresse des ASM-Programms die 2059 ($080B).

    Damit ASM-Programme nach dem Laden mit RUN ausgeführt werden können, werden diese mit einem sog BASIC-HEADER versehen. Das ist eine kurze BASIC-Code-Sequenz, die eben diesen SYS-Befehl enthält.

    Da BASIC-Code grundsätzlich immer ab $0801 im Speicher stehen muss, damit der BASIC-Interpreter ihn findet, beginnt der Header, und somit das ganze File an genau dieser Stelle.

    Das heißt, aus ASM-Sicht ist die Ladeadresse des Programms nicht aus den ersten zwei Bytes der Datei ersichtlich, wenn in dieser ein BASIC-Header enthalten ist. Der BASIC-Header gehört nämlich eigentlich gar nicht zum Programm!

    Dein Programm besteht also im Prinzip aus zwei Teilen: Dem eigentlichen ASM-Programm ab $080B und eben dem Header, der dem User das Starten des Programms mit RUN ermöglicht.

    Dass das Programm in Deinem Beispiel an $080B beginnt, ist für MMC64-Boot-Files natürlich ungünstig

    Aber wenn Du Dir jetzt die BASIC-Header von verschiedenen Programmen anguckst, wirst Du evtl. auch welche finden, die nicht "SYS 2059" enthalten, sondern auch z.B. "SYS 4096" ($1000). Das ließe dann darauf schließen, dass das eigentliche ASM-Programm erst ab $1000 beginnt. Trotzdem enthalten diese Programme aber die $0801 als Startadresse in den ersten zwei Bytes. Logisch, da der BASIC-Header eben ab $0801 beginnen muss. Deshalb enthalten fast alle Programme die $0801 als Startadresse. Der Bereich zwischen dem BASIC-Header und dem eigentlichen Programm ist oft (allerdings auch nicht immer!) ungenutzt und enthällt nur Nullen.
    Da das eigentliche Proggie erst ab $1000 beginnt, wäre es von daher als MMC64-Boot-File geeignet.

    Wenn Du jetzt ein ASM-Programm als Boot-File oder Plugin auf dem MMC64 nutzen möchtest, musst Du erst mal den BASIC-Header entfernen, so dass nur noch das eigentliche Programm überbleibt und die Ladeadresse anpassen. Bei einem Programm, das mit SYS 4096 gestartet wird, wäre das $00 $10. Das MMC64 schnappt sich dann diese ersten zwei Bytes, lädt das Programm an die darin verschlüsselte Adresse und führt dann "intern" einen "SYS" auf diese Adresse aus, um das Programm zu starten.

    Ich hoffe, das war jetzt nicht zu verwirrend beschrieben. ;)

    Hattest Du Dir eigentlich schon ein bestimmtes Programm ausgeguckt, dass Du vom MMC64 aus booten möchtest?

    CU
    Kratznagel

  • Zitat

    Original von Kratznagel
    Damit ASM-Programme nach dem Laden mit RUN ausgeführt werden können, werden diese mit einem sog BASIC-HEADER versehen. Das ist eine kurze BASIC-Code-Sequenz, die eben diesen SYS-Befehl enthält.


    Du nennst das BASIC-Header, ich hab's oben BASIC-Loader genannt, ist das das gleiche oder habe ich da was verwechselt?

    Zitat

    Original von Kratznagel
    Da BASIC-Code grundsätzlich immer ab $0801 im Speicher stehen muss, [...]


    Grundsätzlich aber nicht immer. Man kann den BASIC-Start auch verschieben, oder?

    Zitat

    Original von Kratznagel
    Dass das Programm in Deinem Beispiel an $080B beginnt, ist für MMC64-Boot-Files natürlich ungünstig


    Stimmt, aber ich probier's trotzdem mal aus, mal sehen was passiert. :D

    Zitat

    Original von Kratznagel
    Aber wenn Du Dir jetzt die BASIC-Header von verschiedenen Programmen anguckst, wirst Du evtl. auch welche finden, die nicht "SYS 2059" enthalten, sondern auch z.B. "SYS 4096" ($1000). [...] Der Bereich zwischen dem BASIC-Header und dem eigentlichen Programm ist oft (allerdings auch nicht immer!) ungenutzt und enthällt nur Nullen.


    Und wo kommen die Nullen her? Sind die schon in der PRG Datei enthalten? Dann wäre die Datei doch riesengroß.
    Wenn nicht, wie wird diese große Lücke geschaffen? Woher weiß der Rechner, wenn er gerade die Daten des Laufwerks bekommt, wohin er den ASM-Teil des Programms packen soll? Er wird doch bestimmt nicht den SYS-Befehl auslesen! :D Und zu Beginn hat er ja nur die Startadresse für den BASIC Header bekommen.

    Zitat

    Original von Kratznagel
    Wenn Du jetzt ein ASM-Programm als Boot-File oder Plugin auf dem MMC64 nutzen möchtest, musst Du erst mal den BASIC-Header entfernen, so dass nur noch das eigentliche Programm überbleibt und die Ladeadresse anpassen. Bei einem Programm, das mit SYS 4096 gestartet wird, wäre das $00 $10. Das MMC64 schnappt sich dann diese ersten zwei Bytes, lädt das Programm an die darin verschlüsselte Adresse und führt dann "intern" einen "SYS" auf diese Adresse aus, um das Programm zu starten.


    Das dachte ich mir schon. Gucken wir uns mal LADY TUT.PRG im Hexeditor an:

    Code
    0108 0B08 CB07 9E 32303539 00 A2 00

    0108 ist klar, Startadresse
    0B08 Zeiger auf nächste Zeile bzw. Ende des BASIC-Programms
    CB07 Zeilennummer 1995
    9E Token für SYS
    32303539 ASCII für 2059
    00 Markierung für Ende BASIC-Zeile
    A2 00 ist schon der Anfang des ASM-Teils, allerdings habe ich ein 00 00 erwartet, das ja normalerweise das Ende des BASIC-Programms kennzeichnet. Aber anscheinend braucht man das wegen dem SYS-Befehl nicht, oder?

    Also entferne ich alles bis A2 ausschließlich außer das 0B08, das kann ich ja gleich als Startadresse stehen lassen, richtig?
    Dass es im MMC64 nicht klappen wird, ist mir schon klar.

    Zitat

    Original von Kratznagel
    Ich hoffe, das war jetzt nicht zu verwirrend beschrieben. ;)


    Auf keinen Fall, das war sehr verständlich! ;)

    Zitat

    Original von Kratznagel
    Hattest Du Dir eigentlich schon ein bestimmtes Programm ausgeguckt, dass Du vom MMC64 aus booten möchtest?


    Mit Lady Tut wollte ich das ganze einfach mal testen.
    In der Anwendung kommt wohl erstmal nur TNTs Browser in Frage, jedenfalls fällt mir gerade kein anderes Programm ein.

  • Zitat

    Original von Pohli
    0108 ist klar, Startadresse


    Sorry, ich meinte Ladeadresse.

    @doc: Schalt doch mal endlich diese blöde Editiersperre ab!

  • Zitat

    Original von Pohli


    Du nennst das BASIC-Header, ich hab's oben BASIC-Loader genannt, ist das das gleiche oder habe ich da was verwechselt?


    Geladen wird durch diesen SYS zwar nichts, aber ich glaube, wir meinen beide das gleiche. ;)

    Zitat

    Original von Pohli


    Grundsätzlich aber nicht immer. Man kann den BASIC-Start auch verschieben, oder?


    Ja, durch Veränderung der entsprechenden Vektoren in der Zeropage.

    Zitat

    Original von Pohli


    Und wo kommen die Nullen her? Sind die schon in der PRG Datei enthalten? Dann wäre die Datei doch riesengroß.


    Ja, der Leerraum ist auch in der Datei enthalten. Aber was heißt riesengroß? Wenn das ASM-Programm erst ab $1000 beginnt, hat man eben knapp 2048 Bytes (=8 Blocks) Überschuss. Zwar unnütz, aber nicht in jedem Fall ein Beinbruch. ;)


    Ladeadresse, richtig.

    CU
    Kratznagel