Plus erkennen

  • Mailzeit!


    Wie kann ein Programm eigentlich erkennen, ob es auf einem Plus läuft? ROMs abfragen? ROMs sind halt wandelbare Wesen in Emulatoren, ROM-RAM-Boxen und Symbifaces.


    Bei meinem CPC6128 führte ein out &7f00,&b8 zum Absturz, sonst hätte ich versucht ins ASIC-RAM zu schreiben und wenn beim Lesen nur die unteren 4 Bit zurückkommen wäre die Sache klar gewesen.


    CRTC abfragen? Wie?


    Vielen Dank,
    Euer AMSi

  • Ich meine mal gelesen zu haben, das man dazu das gate array "mißbrauchen" kann - indem man einen wert mit IN aus den GA-Ports liest. Der normale 6128 liefert glaub ich hier &FF, während der Plus den IN als OUT betrachtet.


    Allerdings hab ich das nie probiert.

  • Ansonsten benutze ich halt byte #C002 im Basic Rom, um den CPC-Typ festzustellen (0=464, 1=664, 2=6128, 3=464+, 4=6128+).
    Daß jemand das Basic-Rom austauscht kommt ja wirklich nicht allzuoft vor.


    CU,
    Prodatron

  • Moin!


    Mein CPC464 und mein 6128plus beantworten ein inp(&7f00) mit 120, mein CPC6128 mit 255 - taugt also nicht zur Plus-Erkennung.


    Also habe ich die von Prodatron vergeschlagene Methode verwendet und bin am Plus prompt reingefallen, weil in der ROM-RAM-Box das BASIC des CPC6128 drin war.


    Bis bald,
    AMSi

  • Es gab mal im Marco Vieth Emulator (etwas alt ;) ein kleines Basic Proggy, das ein 16KB File, sprich das ganze Basic Roms ausgelesen und auf Disk geschrieben hat. Evtl findet man den Emu noch...

    Wie man in den Wald hineinschreit...

  • So, hab mich mal hingesetzt und das Programm "romget.bas" analysiert. Und nachdem ich einiges an Literatur gelesen habe, ist folgendes kleines Programm entstanden, dass einem den CPC-Typ anhand des Basic-ROMs ermittelt.


    Das Beste ist, dass kein "memory <addr>" benötigt wird, da der komplette MC in einem String gespeichert wird. Auch erfolgt die Anpassung der Adressen automatisch. Somit lässt sich der Code einfach und ohne Änderungen in eigene Programme einbauen.


    Viel Spaß damit...


  • Leider muss ich meinen letzten Beitrag etwas revidieren. Auf allen CPCs funktioniert der Code einwandfrei ... nur auf dem 464 nicht. Dort muss unbedingt ein "memory <addr>" rein. Also:


    Code
    5 MEMORY &9FFF


    Dabei ist es eigentlich egal, welche Addresse gewählt wird. Das kann man (fast) beliebig anpassen. Aber ohne diese Zeile stürzt der 464 einfach beim Start des Programms ab. Warum, weiß ich leider auch nicht.

  • Da wird doch der Hund in der Pfanne verrückt! Spinnt mein WinAPE oder funzt das jetzt mit dem MEMORY nur noch auf'm 464???


    Egal... dann eben konventionell: