Hallo Besucher, der Thread wurde 3,7k mal aufgerufen und enthält 20 Antworten

letzter Beitrag von kinzi am

U36 ROM: prg umwandeln?

  • Moin,


    Ich habe mir einen C128 zugelegt, und dann von dem leeren U36 Steckplatz erfahren. Es müsste ja möglich sein, prg Programme so zu packen oder umzuwandeln, so das diese per Code von der Startadresse vom U36 ins RAM entpackt und/oder kopiert werden.


    Gibt es Programme, die das machen können?

  • Es müsste ja möglich sein, prg Programme so zu packen oder umzuwandeln, so das diese per Code von der Startadresse vom U36 ins RAM entpackt und/oder kopiert werden.


    Gibt es Programme, die das machen können?

    Ja.
    Mein eigenes (Weiterentwicklung hiervon) wartet allerdings schon seit zwei Monaten darauf, dass ich es endlich mal veröffentliche. Es gibt beim Reset eine Meldung aus, per F-Taste kommt man in ein Menü, und dort kann man dann C64- und C128-Programme starten.
    Ich muss mir nur mal wieder ne Stunde Zeit nehmen...

  • Jau. Das klingt perfekt, im Prinzip genau das, was ich suche :)


    Alternativ müsste das ja mit einem Assembler auch möglich sein.


    prg disassemblieren, in einem Assembler Editor laden, einen Kopier-Header hinzufügen und dann einen jmp aufs RAM zum ausführen des prg... Vielleicht kennt jenand den Workflow im Detail?

  • Da die "schöne" Version bestimmt wieder länger dauern wird als gedacht, hier der aktuelle Stand:


    • Man braucht einen aktuellen ACME mit installierter Library.
    • Das Makefile erzeugt im Augenblick eine Datei ohne Ladeadresse. Wer unbedingt am C64 das EPROM brennen will, muss also eine Ladeadresse hinzufügen oder im Makefile die andere (derzeit auskommentierte) Zeile benutzen.
    • Der Benutzer muss die Datei "config.a" editieren, um ein paar Sachen einzustellen:

      • Chipkapazität (4/8/16/32 KiB)
      • internes (U36) oder externes (Modul) Funktions-ROM
      • Text der Startmeldung
      • F-Taste für das Menü
      • Menütext
      • die einzelnen Payload-Einträge
    • da ich dieses "Release" gerade ziemlich übers Knie gebrochen habe, ergibt die aktuelle Konfiguration nicht viel Sinn: Man bekommt zwar eine Ausgabedatei, aber das Menü enthält noch Einträge für Payloads, die auskommentiert sind. Und Payload "clean64" führt bei Druck auf RESTORE Code aus, den außer mir derzeit niemand sinnvoll einsetzen kann - also bitte nicht wundern.

    Wer es ausprobieren möchte: Am besten erst mit zwei kleinen C64- und C128-Basic-Programmen testen, bevor man da größere Payloads benutzt.

  • Warum so Umständlich? Du kannst die Programme in U36 auch Direkt dort ausführen, Die Adresse ist Bank 4 von $8000 bis $FEFF. U36 wird auch mit den Banken 5 - 7 und 12 angesprochen. Eine Uterscheidung zwischen Bank 4 und Bank 5 ist machbar, indem man A15 mit CAS 0 Verbindet, dabei ist dann das Eingeblendete Ram allerdings die Bank 1, auser bei der Common-Ärea natürlich.

  • Warum so Umständlich? Du kannst die Programme in U36 auch Direkt dort ausführen,

    Das möchte ich sehen, wie Du C64-Programme und Basic7-Programme direkt in U36 laufen lässt.


    [Gefühlte dreißig mal umformuliert, um nicht verdient gesperrt zu werden]

  • Es müsste ja möglich sein, prg Programme so zu packen oder umzuwandeln, so das diese per Code von der Startadresse vom U36 ins RAM entpackt und/oder kopiert werden.

    Ja.
    [...] per F-Taste kommt man in ein Menü, und dort kann man dann C64- und C128-Programme starten.

    Warum so Umständlich? Du kannst die Programme in U36 auch Direkt dort ausführen,

    Das möchte ich sehen, wie Du C64-Programme und Basic7-Programme direkt in U36 laufen lässt.

    Das geht natürlich nur im C128 Modus. Was aber geht ist, vom Rom ins Ram Kopieren und dann in der 64er Modus Wechseln.

    :oob:
    Hast Du das Forum auf "write only" eingestellt?

  • Wer es ausprobieren möchte: Am besten erst mit zwei kleinen C64- und C128-Basic-Programmen testen, bevor man da größere Payloads benutzt.

    Ich habe ACME nun mal unter Ubuntu kompiliert, läuft.


    Im Vice 128 im Basic 7 ein Hello World Basic Programm geschrieben, auf D71 gespeichert, mit Dirmaster exportiert.


    Dann in der config.a das Blue Max prg durch mein Hello World ersetzt. Mehr habe ich da nicht verändert.


    Dann kompiliert mit:


    Code
    1. ACME=/PfadXY/ACME_Lib make

    Alles klar, ich habe ein img8000.rom in meinem Verzeichnis liegen.


    Das habe ich im Vice 128 als internes Funktions ROM eingebunden.
    Ist das richtig, oder muss das als "externes Funktions ROM eingebunden sein?


    Jedenfalls startet der Emulator ins Funktions ROM, ich werde aufgefordert, F2 zu drücken.
    Dann wähle ich Blue Max aus (bzw das, was da laut config.a nun steht).


    Der Emulator springt dann aber ins C64 Basic und führt nichts aus.


    Sicher habe ich noch was falsch gemacht?

  • Im Vice 128 im Basic 7 ein Hello World Basic Programm geschrieben, auf D71 gespeichert, mit Dirmaster exportiert.


    Dann in der config.a das Blue Max prg durch mein Hello World ersetzt. Mehr habe ich da nicht verändert.

    Du hast die "Blue Max"-Zeile aber wieder aktiviert? Ich meine ich hatte die mit einem Semikolon auskommentiert.
    Sollte es nicht daran liegen, probier es bitte noch mal mit dem korrekten Typ: "Blue Max" ist als C64-Payload markiert (deshalb wird ja auch der C64-Modus angesprungen), aber Dein Programm war jetzt im 128er-Modus geschrieben und mit der entsprechenden Ladeadresse gespeichert.
    Zwar hätte es eigentlich (tm) trotzdem gehen sollen, aber getestet habe ich solche Fälle nicht.


    Wenn es dann immer noch nicht geht, schick mir bitte config.a und img8000.rom per PM.

    Das habe ich im Vice 128 als internes Funktions ROM eingebunden.
    Ist das richtig, oder muss das als "externes Funktions ROM eingebunden sein?

    "Intern" ist richtig. Für "extern" müsste man erst am Anfang der config.a die entsprechende Änderung vornehmen.

  • Du hast die "Blue Max"-Zeile aber wieder aktiviert? Ich meine ich hatte die mit einem Semikolon auskommentiert.

    Jaaaa... eigene Beschränktheit! Es war wie du sagtest, einfach nur auskommentiert. Auch das mit dem C64-Payload stimmte,
    ich habe den Eintrag im macro menu_table auf PRG128 gesetzt, und schwupps funktionierte mein Hello World. Nice!


    Das einzige, was jetzt noch auffällt, ist, das das Basic Programm mit den Farben und dem Font deines Menüs startet. Was ja so nicht schlimm ist.
    Kann man das trotzdem für den Payload zurückbiegen auf Standard, oder müsste assembler code eingefügt werden?

  • Das einzige, was jetzt noch auffällt, ist, das das Basic Programm mit den Farben und dem Font deines Menüs startet.

    In Zeile 75 in der Datei "funcrom.a" steht "jsr simple". Kommentier das aus, dann bleiben die Farben auf ihren Standardwerten.
    Abgesehen von den Farben passieren in der Routine noch zwei weitere Sachen: beim Start mit gedrückter 40/80-Taste wird automatisch auf 2MHz geschaltet, und die strunzdumme F-Tasten-Belegung von JiffyDOS wird auf den normalen 128er-Standard zurückgesetzt - das gehört alles in die Kategorie "ich habs auf meine persönlichen Bedürfnisse angepasst, aber niemand sonst wird das haben wollen". :D

  • Mac Bacon ... dann bin ich hier weiter lästig. :-D :-P

    • Kann ich denn ein "PRG128" aus dem "minimal"-Zweig direkt starten?
    • Kann ich als "minimal" festlegen, dass nix passiert (C128 Startschirm) und mit einem Hotkey (z. B. SHIFT) ein PRG128 gestartet wird?

    Oder ist das Menü in dieser Variante "zwingend"?

    "Wenn du überredet, ermahnt, unter Druck gesetzt, belogen, durch Anreize gelockt, gezwungen, gemobbt, bloßgestellt, beschuldigt, bedroht, bestraft und kriminalisiert werden musst. Wenn all dies als notwendig erachtet wird, um deine Zustimmung zu erlangen, dann kannst du absolut sicher sein, dass das, was angepriesen wird, nicht zu deinem Besten ist." - Quelle unbekannt.


    "Steve Jobs hat User hervorgebracht, Jack Tramiel Experten." - Quelle unbekannt.

    "Mein Herr, ich teile Ihre Meinung nicht, aber ich würde mein Leben dafür einsetzen, dass Sie sie äußern dürfen." - Voltaire.

    "Diskutiere nie mit einem Idioten - er zieht dich auf sein Niveau hinunter und schlägt dich dort mit seiner Erfahrung!" - Volksweisheit.


  • Kann ich denn ein "PRG128" aus dem "minimal"-Zweig direkt starten?

    Mit ein paar kleinen Änderungen: In Zeile 155 von funcrom.a, direkt hinter dem Test auf die Menüauswahl, steht der Kommentar "; run menu entry Y:" - hier müsste ein Label hin, dass man dann mit dem richtigen Index in Y anspringt (also man fälscht quasi den Zustand "Benutzer hat Eintrag 3 ausgewählt"). Bevor man da hinspringt, müsste man aber die richtige Speicherkonfiguration einstellen (Kernal an/aus? I/O-Chips an/aus?), da gibt es eine Menge möglicher Kombinationen. Und je nachdem, ob der Einsprung in den Code jetzt direkt beim Systemstart erfolgt oder erst später über den Mechanismus mit der F-Taste, ist der Default mal so und mal so. In den vorhandenen Kommentaren hab ich meist vermerkt, mit welchen Bedingungen die jeweilige Routine aufgerufen wird bzw. werden muss.

    Kann ich als "minimal" festlegen, dass nix passiert (C128 Startschirm) und mit einem Hotkey (z. B. SHIFT) ein PRG128 gestartet wird?

    Du kannst für jede Kombination der Tasten Shift, Control und Alt eine eigene Startroutine angeben. Alle nicht benutzten Kombinationen sind automatisch funktionslos. Wenn Du also die Zeile, in der jetzt "minimal" steht, auskommentierst, passiert beim Starten ohne Shift/Control/Alt überhaupt nichts. Wenn Du "minimal" auf Control legst, wird eben nur beim Start mit Control-Taste die F-Taste belegt und die Meldung ausgegeben. Und wenn Du für "Shift" eine eigene Routine angibst, kann die natürlich gern das oben beschriebene Szenario auslösen.

    Oder ist das Menü in dieser Variante "zwingend"?

    Nein, durch die Start-Struktur mit Shift/Control/Alt geht es auch ganz ohne Menü. Das Menü kam nur später dazu, um das Ganze etwas benutzerfreundlicher zu machen. Und zwar nicht nur für den Endanwender, sondern durchaus auch für den, der das System aufsetzt: Denn bei den bis zu acht Start-Routinen muss man sich selbst um die Speicherkonfiguration kümmern, während bei den Menü-Einträgen das mit den drei verschiedenen Programmtypen (64/128/DIRECT) schon deutlich besser abstrahiert ist.

    Wie der FIXME-Kommentar oben in config.a anzeigt, will ich das eigentlich irgendwann auch mal vereinheitlichen, so dass man dann z.B. auch ein 128er-Basic-Programm direkt in die Start-Tabelle aufnehmen kann.