Hex-Editoren gibt es eigentlich zuhauf. Unter Linux ist mir "Okteta" am liebsten, bei den anderen beiden müsste ich jetzt nachgucken.
Ansonsten geht halt auch die alte tail/head/printf-Lösung auf der Kommandozeile. ![]()
Hex-Editoren gibt es eigentlich zuhauf. Unter Linux ist mir "Okteta" am liebsten, bei den anderen beiden müsste ich jetzt nachgucken.
Ansonsten geht halt auch die alte tail/head/printf-Lösung auf der Kommandozeile. ![]()
War mir nicht klar, dass Du den gesamten Sourcecode veröffentlich hast und den jeder selbst dank des 64tass selbst compilieren kann.
Tatsächlich kam der Loader-Quelltext schon beim ersten Release v0.64 mitgeliefert, also ca. ein Jahr, bevor endlich auch der Encoder rauskam. ![]()
Aber so ganz der gesamte Sourcecode ist es nicht, zugegeben. Das Tool, welches das magische Encoding und die zugehörigen Tabellen generiert, behalte ich für mich.
Das produziert nicht die einzige Lösung für das Problem, und der Loader wurde bewusst mit GPLv3 lizensiert. =D
der Hauptzweck eines Speeders sollte das schnelle Laden und hohe Kompatibilität sein.
Schon, aber bei Bugs der Programme (und uninitialisierte Variablen bzw. Chip-Register gehören ganz klar dazu) sind die Möglichkeiten recht begrenzt.
Z.B. gibt es da Programme, die komischen Sound machen oder gar abstürzen, wenn bestimmte Werte bei $03xy nicht Null sind.
Dass dieser Bereich genullt ist, ist zwar gegeben, wenn man von einem Original-BASIC/KERNAL aus lädt, aber in genau diesem Bereich hat Transwarp etwas residenten Code, der auch nirgendwo anders hinverschoben werden kann.
Würde der generell nach dem Laden genullt werden, könnte man immer nur einmal laden und nicht per Transwarp nachladen.
Aber wenn mensch das Programm eh schon in einem Spezialformat speichern muss, damit es fixer lädt, kann mensch dabei auch gleich ein paar Fehlerchen wegbügeln. ![]()
Ladesound ist da aus meiner Sicht eher nebensächlich.
Es gibt da diese Optionen im Code:
.weak
BOOTNM = "TRANSWARP"
.if BOOTNM != "TRANSWARP"
CRYPTO = 0
.else; BOOTNM = TRANSWARP
CRYPTO = 1
.endif; BOOTNM = TRANSWARP
SOUND = 1
PROGRS = 1
ERSTAT = 1
COMPAT = 1
INSTAL = 1
.endweak
Alles anzeigen
Dank der "weak"-Direktive sind die von außen überschreibbar, und man kann z.B. so
eine Variante ohne Tonausgabe bauen.
Dabei wird es auch ein wenig kleiner und startet entsprechend schneller, und in der Minimalkonfiguration werden 17 statt 32 Blöcke belegt.
Das einzige, was ich davon vermeindlich verstehe, ist dass die alte Startadresse offenbar $8400 ist und dort hin gesprungen wird, wenn der Schreibbefehl in 8004 positiv bestätigt wurde. Also ist die Zeit, die zwischen .3 und .5 verbraten wird, die längere Ladezeit, denn .1 und .2 dürften ja nicht messbar ins Gewicht fallen.
Um wieviel würde der Start denn verzögert werden? Ist das im Zehntel-Sekunden-Bereich oder darunter? Das würde ich im Kauf nehmen.
Der "Ding"-Sound wird da auch vorzeitig abgebrochen, aber das ist dann halt so. Üblicherweise brauchen Programme aber oft ein wenig Zeit zum Entpacken oder Umherkopieren von Speicherbereichen, bevor sie Ton machen.
Generell eine Verzögerung zwischen geladen und Start einzubauen (und das ist schon mindestens ca. eine halbe Sekunde, bis der Ton ausgeklungen ist), wobei die allermeisten Programme die nicht brauchen, wäre eher doof.
Bei der benutzten LOCO-Variante z.B. wird am Anfang bei $8400 erst mal recht viel Speicher bewegt (relativ sinnlos, das hätte man besser lösen können), bevor es losgeht.
Die SID-Initialisierung könnte also auch erst danach passieren.
Oder einen zukünftigen "No-Sound" Modus, für den man sich über einen Schalter in cc1541 entscheiden kann?
Use-Flags und Kompatibilitäts-Optionen sollen per Design nicht in den Dateien selbst bestimmt werden, die sollen nur das Programm an sich abbilden und effektiv nicht mehr Information als das Standard-PRG-Format beinhalten.
Aber dafür kann man sich ja den Transwarp-Booter zurechtschustern. ![]()
Das mit dem Soundproblem tritt bei mir immer nur dann auf, wenn ich per Transwarp lade.... seltsam...
Da wird anscheinend der SID vom Spiel nicht ordentlich initialisiert.
Programme mit uninitialisierten Variablen sind leider keine Seltenheit, besonders, wenn sie aus der Frühzeit stammen.
Da kann man, ohne die Programme selbst anzufassen, nur sehr bedingt was gegen tun.
Aber probier mal, dieses Stück Code
.C:8000 A9 00 LDA #$00
.C:8002 A2 18 LDX #$18
.C:8004 9D 00 D4 STA $D400,X
.C:8007 CA DEX
.C:8008 10 FA BPL $8004
.C:800a 4C 00 84 JMP $8400
ins Programm zu tun (an der Stelle sind nur ungefährliche Quelltext-Überbleibsel) und die Startzeile auf "1 SYS32768" umzutippen.
Die SID-Register nach dem Laden mit Nullen zu füllen würde entweder den "Ding"-Sound unschön abbrechen oder den Start verzögern, was beides keine so tollen Optionen sind. ![]()