Ich würde einfach mal direkt von Basic/S-Basic aus per PEEK(DEZIMALADRESSE) die fraglichen Bereiche auslesen - mit und ohne Modul gesteckt. Wenn man das emulieren kann, wäre es natürlich schicker, mal mittels Monitor (VICE-Mon o.ä.) reinzugucken.
Hallo Besucher, der Thread wurde 12k mal aufgerufen und enthält 38 Antworten
letzter Beitrag von petrus am
Simons' Basic Extension
- petrus
- Erledigt
-
-
Wieviel freier BASIC-Speicher steht in SIMONS' BASIC 2 zur Verfügung?
Der Startschirm sagt: 28031, also Ende bei $7580.
Wird in der SBX-Initialisierung CLEAR/NEW gemacht? (Also der BASIC-(Variablen-)Speicher freigegeben?) Das Bootprogramm ist ja relativ lang. Ist es hinterher vielleicht sogar noch im Speicher? Du bist da doch schon tiefer in der Materie... -
-
[offtopic]Wieso? Geht doch?
[/offtopic]
-
Danke für den Hinweis. Den Link haben wir allerdings bereits in den Weblinks zu Simons' BASIC: Artikel aus der 64'er 4/84 (DE) in Projekt 64'er.
-
Danke für den Hinweis. Den Link haben wir allerdings bereits in den Weblinks zu Simons' BASIC: Artikel aus der 64'er 4/84 (DE) in Projekt 64'er.
Ich Blinden habe zwar dort drauf geguckt Ihn aber übersehen, Danke petrus.
-
TheRyk: Da ich mir mit SMON die Disassembler-Listings erstellt (und in Textdateien gedruckt) habe, schaue ich einfach dort rein (s.o. "SB2.zip"). Ansonsten benutze ich auch gern VICE, das geht doch viel schneller, als mit dem Original-C64.
GoDot: Der BASIC-Speicher wird von dem BASIC-Ladeprogramm mit einer kleinen Maschinenroutine ab 710 gelöscht. Eine Analyse des Programms habe ich angehängt. Für das Setzen des BASIC-Endes ist die SBX-Initialisierungsroutine $7700 (==> $B1EC) von SBX-part1 verantwortlich. Dort - aber auch an anderen Stellen - wird der BASIC-Ende-Vektor ($37,$38) manipuliert. Wozu, habe ich bislang noch nicht erkannt.
Da es anscheinend erforderlich ist, zur Beantwortung dieser Frage die Routinen im Disassembler-Listing von SBX vollständig zu verstehen, stelle ich dies mal zurück. Das Gleiche gilt für die interessante Frage, was D.S. bei seinem Trick zur Manipulation des Cartridge-ROMs eigentlich gemacht hat.
Wichtiger ist es erst einmal, die Artikel für die neuen Befehle in SB2 zu erstellen. Dazu ist jede Menge Testen nötig und über die Ergebnisse können wir hier diskutieren.
Peter. -
Eine Analyse des Programms habe ich angehängt.
Ich hab mal angefangen, dein Disassembler-Listing für mich zu kommentieren. (Blöd, dass sich die Diskversion von SB so sehr von der Modulversion unterscheidet!) Dabei fiel mir auf, dass SBX öfters im Bereich $DF00 rummanipuliert. Offenbar sind dort Modul-Hardwareflags. Weißt du, wie die liegen und was sie tun?Arndt
-
Dabei fiel mir auf, dass SBX öfters im Bereich $DF00 rummanipuliert. Offenbar sind dort Modul-Hardwareflags. Weißt du, wie die liegen und was sie tun?
Mit der Modulversion habe ich mich noch nicht so intensiv beschäftigt, die kann man ja nicht patchen Kann ich also z.Z. auch nix zu sagen.
ZitatBlöd, dass sich die Diskversion von SB so sehr von der Modulversion unterscheidet!
Na ja, in großen Teilen ist der Code doch ganz ähnlich, liegt nur nicht immer in den gleichen Speicherbereichen. Ich habe gern die beiden Disassemblerlistings nebeneinander aufgelistet und in dem einen dann nach einem charakteristischen Codestück eines Abschnitts des anderen Listings gesucht. Ist das erst mal gefunden, kann man oft die beiden parallel eine ganze Weile nebeneinanderher listen, ohne dass der Code sich wesentlich unterscheidet.
Peter. -
Kann ich also z.Z. auch nix zu sagen.
Schade!ZitatNa ja, in großen Teilen ist der Code doch ganz ähnlich, liegt nur nicht immer in den gleichen Speicherbereichen.
Klar, ich hab aber nur das Simons'-Basic-Buch von M&T. Da heißt es dann immer: Suchen, suchen, suchen...Arndt
-
-
Was macht Routine $7eb2
7EB2 ist Teil der Routine "Ausdruck auswerten" (ab $7B8a), die sich mit vielen CMP #xx und Branches runter bis 7EE3 erstreckt, welche die Behandlung der SBX-Funktionen enthält.
Hier wird eine Funktion ausgewertet, deren Routine bei BA29 ff. liegt. Welche das ist, kann ich so schnell nicht erkennen.Code- ,7EB2 C9 6A CMP #6A ;fragt auf 106 ab (Token)
- ,7EB4 D0 16 BNE 7ECC
- ,7EB6 20 FA AE JSR AEFA ;prüft auf Klammer auf
- ,7EB9 20 CC 88 JSR 88CC ;BASIC-ROM aus
- ,7EBC 20 29 BA JSR BA29 ;? (Funktion in SBX)
- ,7EBF 20 D4 88 JSR 88D4 ;BASIC-ROM ein
- ,7EC2 20 F7 AE JSR AEF7 ;prüft auf Klammer zu
- ,7EC5 A2 00 LDX #00
- ,7EC7 A4 90 LDY 90 ;Ergebnis
- ,7EC9 4C D3 7B JMP 7BD3 ;XY nach Fließkomma
- -----------------------------------
- ,7ECC 4C 08 AF JMP AF08
- -----------------------------------
GoDot: Fürs raschere Suchen habe ich den Quellcode der SB-Diskettenversion angehängt.
Peter. -
Uh, falsch verstanden! So weit war ich ja auch schon. Ich dachte, frag mal schnell Petrus, in welchen SB-Befehl die (so, wie sie da steht, gar nicht funktionierende) Routine hineinwechselt. Vielleicht gibt uns das einen Hinweis darauf, was sie vielleicht ursprünglich tun sollte (denn Token 106 hat ja kein Schlüsselwort, ist also gar nicht anwendbar).
Ich hab inzwischen schon allerhand in deinem Disassembler-Listing von SBX rumkommentiert, z.B. alle Befehlseinsprünge gekennzeichnet und ein paar schon durchkommentiert (einige der Funktionen, denn die sind ja meist einfach zu analysieren).
Arndt
-
Die Routine bei BA29 ist ev. Teil des Speichertricks von D.S.
In der Initialisierungsroutine von SBX wird an zwei Stellen Speicher "im Modul überschrieben":Code- ,B2B5 A9 20 LDA #20
- ,B2B7 8D 8A 85 STA 858A
- ,B2BA A9 29 LDA #29
- ,B2BC 8D 8B 85 STA 858B
- ,B2BF A9 BA LDA #BA
- ,B2C1 8D 8C 85 STA 858C
- ,B2C4 A9 EA LDA #EA
- ,B2C6 8D 8D 85 STA 858D
- ,B2C9 A9 20 LDA #20
- ,B2CB 8D 63 84 STA 8463
- ,B2CE A9 29 LDA #29
- ,B2D0 8D 64 84 STA 8464
- ,B2D3 A9 BA LDA #BA
- ,B2D5 8D 65 84 STA 8465
- ,B2D8 A9 EA LDA #EA
- ,B2DA 8D 66 84 STA 8466
Die betroffenen Modulbereiche sind:
Peter. -
Hier nochmal die Tape+Diskversion von SBX da diese auf altervista nicht mehr erhältlich ist
-
-
Ja, tatsächlich! Hätte wohl die Brille aufsetzen sollen.. Aber schadet nicht wenn sich die Files auch hier befinden.
-
Im Anhang die Version von SIMONS' BASIC EXTENSION mit den SBX Patches für mehr Speicher und der EVAL-Korrektur.
-
Wer kennt sich mit der Steuerung vom Simons' Basic Modul aus?
Ich habe folgende Frage:
Simons' Basic Extension benutzt ja das Modul als Grundlage. Das Ein-/Ausschalten geht auch ganz normal über das Register $DE00.
In SBX gibt es aber eine Stelle, an der das Register $DF01 benutzt wird:
Was wird hier gemacht?