Software > Coding
Loader für mehrere Progs auf einer Disk unter GfA BASIC
Burkhard Mankel:
Ich habe folgendes Problem: Früher - als ich noch ohne Festplatte (jaja, ist mindestens 25 Jahre her) habe ich alle Naselang ein Loaderprogramm für eine Diskette erstellt, mit dem ich das Programm, mit dem ich gerade arbeiten wollte, direkt per Drücken einer Taste wählen und starten lassen konnte. Jetzt werden sicher einige von Euch aufschreien: "so ein Umstand ..." - Jawohl, ich gebe zu: In den Zeiten von "Fensterln und Mauserln" ist eine solche Programmgestaltung eher eine Spielerei! Nun habe ich aber 4 verschiedene Ausführungen von Bubble Bobble (von "Original" bus "Ultra light") mit Hilfe eines Editors praktisch selbst erstellt. Mit einem Diskmonitor habe ich dann kontrolliert: Im Hauptprogramm sind die Namen der nachzuladenen RSC's editierbar abgelegt (BUB1.RSC & BUB2.RSC). In BUB1.RSC wiederum die anderen Dateinamen. Die fürs Spiel veränderte Dateien heißen AIRFLOW.DAT & BDATA.DAT. Für die einzelnen Versionen (2-4) habe ich nun dxas zweite Zeichen der Namen durch "2", "3" bzw. "4" ersetzt, BUB1 3x kopiert und zu BUB3 (v2), BUB5 (v3) und BUB7 (v4) umbenannt, danach ähnlich mit dem Hauptprogramm, dem ich zuvor BUBBLE_1.PRG ans Namen zuwies. Jetzt habe ich also BUBBLE_1.PRG, BUBBLE_2.PRG, BUBBLE_3.PRG und BUBBLE_4.PRG, habe in 2-4 per Diskmonitor die passende RSC zugewiesen (BUB3 etc) und danach in BUBx.RSC (x=3,5,7) je die Dateinamen für AIRFLOW und BDATA angepaßt. Danach habe ich nun alles (weniger als 600k) auf eine DD-Disk kopiert. Durch diverse Tests konnte ich dann in Erfahrung bringen, daß ich alle 4 Versionen von dieser Disk korrekt starten (durch umbenennen der jeweils nicht benötigten Version zu PRX). Danach habe ich sie jetzt aus dem AUTU-Ordner ins Root versachoben und versuche mich nun an einem gescheiten Loader - bekomme das aber nicht hin - wer kann helfen?
Ich habe schon mit folgender kurzen Routine getestet - der Erfolg bleibt aber auf der Strecke:
--- Code: ---PRINT AT (3,8);"<1> Bubble Bobble original"
PRINT AT (3,9);"<2> Bubble Bobble oth. Level"
PRINT AT (3,10);"<3> Bubble Bobble o.L. gepatcht"
PRINT AT (3,11);"<4> Bubble Bobble UltraLight"
anfang:
DO
a$=INKEY$
IF a$>="1" OR a$<="4"
file$="A:\BUBBLE_"+a$+".PRG"
RUN file$
ENDIF
LOOP
--- Ende Code ---
Im Editor testweise gestartet, kommt nach wenigen untätigen Sekunden die Fehlermeldung: "Ausdruck zu komplex ...". Wenn ich die Tasten Tastatur testweise bediene, spricht aber auch die Floppy bei den entsprechenden Tasten an, bricht aber irgendwann erwartungsgemäß ab, weil ein PRG auf diese Weise (unkompiliert) nicht unbedingt zu starten ist. Also kompiliert und in den AUTO-Ordner der Disk - erreichen tue ich aber nur einen Blick auf den Desktop!
Was mache ich falsch. Wer kann mir noch 'ne Routine zum Laden und nutzen des Startbildes zufügen?
HamSTer:
Also zumindest das IF-statement ist falsch. Anstatt OR gehört da ein AND hin.
simonsunnyboy:
Das geht problemlos, man muss nur einiges beachten:
* RUN kannst du nicht benutzen, das geht nur mit GFABASIC Dateien und nur im Interpreter
* Ausführen geht mit dem Befehl EXEC mit bestimmten Kombinationen der Parameter
* GFABASIC reserviert im Normalbetrieb den gesamten Speicher, d.h. ein anderes Programm reinladen geht nicht. Du musst dazu den Speicher über RESERVE korrekt freigeben (ACHTUNG: wieder an die Freigabe ans TOS denken!)
* Am besten das Programm compilieren.
Ein einfaches Beispiel (läuft compiliert)
--- Code: ---'$m20000
' Die obvere Zeile sagt dem Compiler, er soll für das Programm mit allen Variablen nur 20000 Bytes RAM fordern.
' Der Rest bleibt vom TOS dann frei und kann ggfs sauber über GEMDOS per malloc und free reserviert und freigegeben werden.
ret%=EXEC(0,"A:\MEINPROG.PRG","","")
--- Ende Code ---
Dieser Code würde einfach MEINPROG.PRG starten und laufen lassen, ohne Kommandozeilenparameter und ohne spezielles Environment.
Falls Parameter übergeben werden, muss das 3. Argument speziell formiert werden.
--- Code: ---ret%=EXEC(0,"ABC.TTP",CHR$(2)+"-v","")
--- Ende Code ---
Das erste Zeichen codiert, aus wievielen Zeichen die übergebene Kommandozeile besteht (hier 2). Maximal sind 127 oder 128 Zeichen möglich.
Ich hoffe, das hilft weiter.
Burkhard Mankel:
--- Zitat von: HamSTer am Di 30.07.2013, 17:33:55 ---Also zumindest das IF-statement ist falsch. Anstatt OR gehört da ein AND hin.
--- Ende Zitat ---
Sorry - hier habe ich auch "AND" programmiert - hatte mich heute morgen beim Setzen des Beitrages vertan!
--- Zitat von: simonsunnyboy am Di 30.07.2013, 17:45:57 ---Das geht problemlos, man muss nur einiges beachten:
* RUN kannst du nicht benutzen, das geht nur mit GFABASIC Dateien und nur im Interpreter
* Ausführen geht mit dem Befehl EXEC mit bestimmten Kombinationen der Parameter
* GFABASIC reserviert im Normalbetrieb den gesamten Speicher, d.h. ein anderes Programm reinladen geht nicht. Du musst dazu den Speicher über RESERVE korrekt freigeben (ACHTUNG: wieder an die Freigabe ans TOS denken!)
* Am besten das Programm compilieren.
Ein einfaches Beispiel (läuft compiliert)
--- Code: ---'$m20000
' Die obvere Zeile sagt dem Compiler, er soll für das Programm mit allen Variablen nur 20000 Bytes RAM fordern.
' Der Rest bleibt vom TOS dann frei und kann ggfs sauber über GEMDOS per malloc und free reserviert und freigegeben werden.
ret%=EXEC(0,"A:\MEINPROG.PRG","","")
--- Ende Code ---
Dieser Code würde einfach MEINPROG.PRG starten und laufen lassen, ohne Kommandozeilenparameter und ohne spezielles Environment.
Falls Parameter übergeben werden, muss das 3. Argument speziell formiert werden.
--- Code: ---ret%=EXEC(0,"ABC.TTP",CHR$(2)+"-v","")
--- Ende Code ---
Das erste Zeichen codiert, aus wievielen Zeichen die übergebene Kommandozeile besteht (hier 2). Maximal sind 127 oder 128 Zeichen möglich.
Ich hoffe, das hilft weiter.
--- Ende Zitat ---
eigentlich nicht - nur so weit, daß ich das mit der "EXEC" Anweisung zum Start einsehe. Ich hatte den auch mal ganz gut d'rauf - leider aber heute nicht mehr!
Ich fürchte, ich brauche mehr als nur Tipps! Vielleicht "strickt" mir ja jemand das "Grundgerüst"
* Es soll(te) das Titel-(Start-)bild geladen werden können
* Ohne diesen Hintergrund wieder zu löschen, würde ich begrüßen, daß deutlich die Wahlmöglichkeiten erkennbar sind
* Falls vorgenannter Punkt nicht ohne weiteres möglich ist, eben ein eigenes Startbild mit ausgegebener Wahlmöglichkeit
* Die Wahlabfrage- und Startroutine. Das zu startende Programm heißt "BUBBLE_x.PRG" - wobei x der gewählten Ziffer entspricht
simonsunnyboy:
Bildschirminhalt erhalten kann schwierig werden, dafür muss der genaue Zustand der Videohardware weggespeichert werden. Einfacher ist es, einfach nach Ende des aufgerufenen Programms einne Reset zu machen und das Menu neuzuladen, oder den Bildschirminhalt proaktiv wieder hinzuzeichnen, ob es nun Text oder Bild ist.
Ich habe unten ein einfaches Menu von mir angehängt (Wurde noch nicht offziell rausgegeben), es zeigt ein Bild und ein Menu mit Rastern, dazu spielt ein einfaches geklautes SNDH Stück von MadMax. Auf Tastendruck können verschiedene Programme gestartet werden.
Bis auf das Degasbild (welches speziell für Paradize gemacht und von mir angepasst wurde) darfst du gerne alle Teile direkt wiederverwenden.
(Die Erweiterung .PDF abschneiden, das ist eine ZIP Datei)
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln