Startadresse C64 Basic

Es gibt 31 Antworten in diesem Thema, welches 5.858 mal aufgerufen wurde. Der letzte Beitrag (30. November 2015 um 23:51) ist von -trb-.

  • Guten Abend Zusammen

    Wir schreiben einen C64 Emulator (für die Chips VICII,SID und CIA und C6502)
    Jetzt möchten wir gerne das C64 Basic testen.

    In unseren virtuellen Speicher haben wir folgende ROMS geladen
    KERNAL Rom,
    Character Rom
    Basic Rom

    Auf welche Adresse müssen wir den PC des CPU's stellen, damit das C64 Basic (Bitte melde dich an, um diesen Link zu sehen.) geladen wird?

  • Lookee here:
    Bitte melde dich an, um diesen Link zu sehen.
    $2B ff


    evtl. auch für Euch spannend
    Bitte melde dich an, um diesen Link zu sehen.

  • Bei einem Reset wird $FFFC und $FFFD vom ROM in den PC geladen. Das sollte auch so in der 6502-Dokumentation drin stehen. Der C64 hat übrigens eine 6510. Und die PLA sollte man auch nicht vergessen.
    Die ROM-Routinen initialisieren dann die Hardware, den Speicher und springen dann ins BASIC.

  • Bevor der Kernal die Maschine initialisiert hat, dürfte ein Aufrufen des Basics sinnlos sein. Nach dem Start des Kernals verzweigt dieser aber automatisch ins Basic, also macht einfach das, was eine 6502-CPU nach dem Reset tut: den Inhalt von $fffc/$fffd lesen und in den Program Counter schreiben.

    EDIT: zu langsam...

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • NOCH einen Emulator den kaum einer nutzt? Warum nicht lieber aktive Projekte unterstützen und verbessern? Bei den meisten stellen sich derartige Fragen auch nicht mehr. Da wird viel mehr bereits an den vielen vielen Grenzfällen gearbeitet und solch grundlegende Dinge funktionieren da schon seit Jahren.

  • Vielen Dank für die raschen Antworten.

    NOCH einen Emulator den kaum einer nutzt? Warum nicht lieber aktive Projekte unterstützen und verbessern? Bei den meisten stellen sich derartige Fragen auch nicht mehr. Da wird viel mehr bereits an den vielen vielen Grenzfällen gearbeitet und solch grundlegende Dinge funktionieren da schon seit Jahren.recht.

    Du hast recht! Es handelt sich aber um ein Projekt im Rahmen meiner Ausbildung. Die Neuentwicklung ist eine der vielen Rahmenbedingungen.

  • Ohne das jetzt böse zu meinen, aber die Art deiner Fragestellung suggeriert dass Du vom C64 nur recht begrenzt Ahnung hast, und da ist die Entwicklung eines Emulators vielleicht noch ein wenig ausserhalb des möglichen Spektrums.

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Geht nur mir das so, dass der Start-Beitrag nicht sichtbar ist?


    Gestern stand in "Forum64 » C64:_alles_rund_um_den_Brotkasten » Allgemein » Startadresse C64 Basic »" Anzahl Beiträge -1 und ne fette Fehlermeldung von der Datenbank hatte ich auch noch gesehen. Problem wurde aber gestern behoben.

    Heute habe ich das gleiche Problem.

    Unter "Allgemein" kannst Du aber auch lesen "Das Thema »Startadresse C64 Basic« von »reims« (Gestern, 20:37) wurde aus folgendem Grund vom Benutzer »8R0TK4$T3N« gelöscht: Doppelpost (Gestern, 20:53)."

    Ok, gestern Doppelpost heute gar kein Post mehr. Broti hat karpott gemacht. :bgdev

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Ohne das jetzt böse zu meinen, aber die Art deiner Fragestellung suggeriert dass Du vom C64 nur recht begrenzt Ahnung hast, und da ist die Entwicklung eines Emulators vielleicht noch ein wenig ausserhalb des möglichen Spektrums.

    Hallo

    Dein Einwand ist berechtigt.

    Das ist richtig ich behersche den C64 nocht nicht, deshalb auch diese Projektarbeit (Sich mit der C64 Umgebung vertraut machen und einen Emulator entwickeln, ganz salop geschrieben) Aber das ist ja genau der Gag einer Projektarbeit: Es ergibt keinen Sinn, sich mit etwas auseindanderzusetzen, was man schon kennt.

    Ich kenne mich dafür mit
    - C6502 Asm
    - x86 Asm
    - C/C++
    gut aus.

  • Unter "Allgemein" kannst Du aber auch lesen "Das Thema »Startadresse C64 Basic« von »reims« (Gestern, 20:37) wurde aus folgendem Grund vom Benutzer »8R0TK4$T3N« gelöscht: Doppelpost (Gestern, 20:53)."


    Ich weiß jetzt, worum´s geht, wenn man auf der Startseite mit der Maus über´s the fährt, ist der Beitrag lesbar. Wen es interessiert:

  • Das ist richtig ich behersche den C64 nocht nicht, deshalb auch diese Projektarbeit (Sich mit der C64 Umgebung vertraut machen und einen Emulator entwickeln, ganz salop geschrieben


    In welchem Rahmen findet diese Arbeit statt? Was ist die Zielsetzung dahinter?
    Ein kompletter Emulator dürfte für eine Projektarbeit deutlich überambitioniert sein.
    Das Emulieren einer CPU allein, mit angebundenem Speicher, das halte ich für deutlich realistischer.
    Deswegen die Frage nach dem Rahmen, bislang klingt das nach innerschulischem auftrag, und ein Emulator ist nicht in ein paar Wochen gebaut.

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Vermutlich ist der Link das Problem. Normalerweise müssen Beiträge von Forums-Neulingen ja erst durch Mods freigeschaltet werden, wenn sie einen Link enthalten (um Spam zu verhindern). In diesem Fall war es aber wohl so, dass der Link erst nachträglich hineineditiert wurde, nachdem schon Antworten existierten.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Das Emulieren einer CPU allein, mit angebundenem Speicher, das halte ich für deutlich realistischer.


    Ist das nicht schon zu einfach? Eine 6502-Emulation, die die Tests der "legalen" Opcodes aus der Lorenz-Suite besteht kann man doch an einem Wochenende runterhacken.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Ich bitte um Verzeihung, wenn das, was ich hier schreibe, für manche in einem Forum64 wie Blasphemie klingt, doch würde ich Dir gerne den Rat geben, anstelle eines C64 als erstes Zielobjekt für eine Emulation lieber den AppleII zu nehmen. Der C64 ist aufgrund seiner Spezialchips (CIA, SID, VIC) nur mit großem Aufwand zu emulieren, wohingegen ein AppleII sehr einfach strukturiert ist. So benötigt man allein schon für das C64-Basic eine Emulation des CIA für den Timer-Interrupt und die Tastatureingabe, wobei auch noch die Tastaturenmatrix entsprechend abgebildet werden muß. Der AppleII verfügt (in der normalen Grundausstattung) überhaupt nicht über Interrupts, und die Tastaturemulation beschränkt sich zumeist darauf, das Highbit im ASCII-Code zu setzen.

    Hier mal eine kurze Vergleichsübersicht:
    - Emulationsgenauigkeit:
    C64: Der Emulator sollte wenigstens zeilenexakt sein (s. alte Versionen von Frodo), um Rasterinterrupts, vertikales Scrolling oder Sprite-Multiplexer nachzubilden. Viele Programme nutzen bewußt zyklengenaue Eigenschaften des 6510 (sprich: idle-Buszugriffe), um z. B. einen IRQ zu bestätigen.
    AppleII: Für 95% der Programme reicht es aus, den Prozessor einen Frame lang laufen zu lassen und dann die Anzeige aufzufrischen (vgl. AppleWin). Der Prozessor kann für 99,9% der Programme befehlsweise, nicht zyklenweise emuliert werden.
    - Illegale Prozessor-Opcodes:
    C64: sehr häufig verwendet
    AppleII: nur eine verschwindend kleine Anzahl Programme (meistens nachträglich eingebaute Fehler des Crackers). In der Regel wird kein bestimmter Prozessortyp vorausgesetzt. 95% der Programme laufen auch auf einem 65c02 oder 65816.
    - Speicheraufbau:
    C64: Umschalten der Speicherkonfiguration hauptsächlich über $01, wobei drei Speicherbereiche jeweils verschieden eingeblendet werden.
    AppleII: Für eine erweiterte Emulation kann der Bereich $d000-$ffff (Rom) mit Ram getauscht werden (LC-Card). Viele Programme laufen auch ohne.
    - Basic:
    C64: Pokes zur Verwendung von Farben und Sprites, sowie Sound üblich. Setzt daher auch die Emulation des VIC bzw. SID voraus.
    AppleII: Baut auf dem gleichen Microsoft-Basic auf wie das C64-Basic, verfügt aber zusätzlich über ein paar Graphikbefehle und bei eingebundenem DOS 3.3 auch über einfache Diskettenbefehle.
    - Tastatur:
    C64: Umwandlung der PC-Tasten in Bits der Tastaturmatrix, die über emulierte Ports des CIA an das Programm weitergereicht werden.
    AppleII: Im ASCII-Code wird das Highbit gesetzt und das Ergebnis an der Adresse $c000 eingeblendet. Kein umfangreiches Mapping nötig.
    - Videoemulation:
    C64: sehr aufwendig (VIC-Emulation) wegen diverser Graphikmodi, Sprites, Scrolling, Rasterinterrupt etc.
    AppleII: Nur 3 Darstellungsmodi (Text, Lores, Hires) und keine Sprites, Scrolling, Interrupts... Prinzipiell würde zunächst sogar eine einfache Schwarz-Weiß (nicht Graustufen)-Darstellung schon ausreichen.
    - Sound:
    C64: sehr aufwendig (SID-Emulation)
    AppleII: einfacher Speaker, kann auch weggelassen werden
    - Diskettenlaufwerk:
    C64: Sehr aufwendig bei Programmen, die einen Schnellader voraussetzen, da neben den Controllerchips für Lesekopf- und Buszugriffe auch eine eigene Prozessoremulation notwendig ist.
    AppleII: Es genügt, beim Laden der Diskette einmal das Image ins GCR-Format umzuwandeln. Die Ansteuerung des Lesekopfes (vom AppleII aus) ist relativ einfach umzusetzen.

    Kurz gesagt: Eine AppleII-Emulation, die bereits die Benutzung von 95% aller Programme gestattet, ist um etliches einfacher umzusetzen als eine C64-Emulation. Mit relativ wenig Aufwand bringt man schon Spieleklassiker wie "Elite", "The Bard's Tale I-III", "Ultima IV", "Summergames", "Bandits", "Karateka" etc zum Laufen und hat damit ein vorzeigbares Ergebnis, und der Schritt hin zu einer vollständigen Emulation des Apple//e mit Spielen wie "Space Quest", "Leisure Suit Larry", "Test Drive", "Prince of Persia", "Maniac Mansion" oder "Dragon Wars" ist dann gar nicht mehr so weit (etwas kompliziertere Speicheranordnung und neuer Graphikmodus Double Hires). Nebenbei bemerkt schreibe ich dies nicht nur rein theoretisch, sondern durchaus auch aus eigener Erfahrung. Nahezu jedesmal, wenn ich eine neue Programmiersprache bzw. einen neuen Rechnertyp in die Finger bekomme (680x0, 8086, x86, C, Java...), schreibe ich als erstes größeres Projekt einen AppleII-Emulator, um ein Gefühl für die Sprache bzw. einen Eindruck von der jeweiligen Leistungsfähigkeit des Systems zu kriegen. Ein AppleII-Emulator wäre innerhalb eines Projektes (je nach zur Verfügung stehender Zeit) machbar, ein C64-Emulator wahrscheinlich nicht.

  • @M. J.: Interessante Ausführung, danke.

    Da explizit nach der Startadresse des C64-BASIC gefragt wurde (was mich eigentlich wundert), ist vorerst evtl. nur geplant, BASIC-Programme ablaufen zu lassen? Das kann funktionieren auch ohne genaue C64-Emulation (muss es aber nicht). In dem Fall wäre ein BASIC-Interpreter mit geringer Hardwaresimulation (statt Emulation) einfacher umzusetzen. Da findet sich vielleicht auch schon das ein oder andere ansehnliche Spiel, das damit läuft.

  • So benötigt man allein schon für das C64-Basic eine Emulation des CIA


    Nö, geht auch ohne.

    Zitat

    für den Timer-Interrupt und die Tastatureingabe, wobei auch noch die Tastaturenmatrix entsprechend abgebildet werden muß.


    Tastatureingaben kann man direkt in den Keyboard-Puffer schreiben und den Timer-Interrupt emulieren, indem man einfach "blind" mit 60Hz IRQs auslöst. Von einer C64-Emulation, die den Namen verdient ist man damit natürlich noch meilenweit entfernt, aber es reicht für ein "10 print "hallo":goto 10" aus.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Tastatureingaben kann man direkt in den Keyboard-Puffer schreiben

    Interessanter Gedanke. Da könnte man am Ende sogar auf den Interrupt völlig verzichten.

    In dem Fall wäre ein BASIC-Interpreter mit geringer Hardwaresimulation (statt Emulation) einfacher umzusetzen.

    Sofern es tatsächlich nur um ein Basic für den 6502 geht, könnte sich vielleicht ein Blick auf diesen leicht anzupassenden Enhanced-Basic-Interpreter lohnen: "Bitte melde dich an, um diesen Link zu sehen.". Im "forum.6502.org" findet sich dazu auch ein eigener Bereich. (Leider ist der Entwickler vor einiger Zeit verstorben.)
    Edit: Link korrigiert

  • Interessanter Gedanke. Da könnte man am Ende sogar auf den Interrupt völlig verzichten.

    Am Interrupt hängen auch noch TI/TI$ (wichtig für simple Geschwindigkeitstests) und das Cursorblinken nebst Ab- und Wiederanschalten mit dran. Zumindest hätte so eine Emulation ein sehr irritierendes Verhalten weil man ja nie weiß ob sie sich schon aufgehängt hat oder (noch) nicht.....

  • Am Interrupt hängen auch noch TI/TI$ (wichtig für simple Geschwindigkeitstests) und das Cursorblinken nebst Ab- und Wiederanschalten mit dran. Zumindest hätte so eine Emulation ein sehr irritierendes Verhalten weil man ja nie weiß ob sie sich schon aufgehängt hat oder (noch) nicht.....

    Richtig. Sorry, da war ich in Gedanken schon etwas weiter vorgesprungen nach dem Motto: Wenn man die Zeicheneingabe von außen füttern kann, kann man auch die Zeichenausgabe vom Emulator übernehmen lassen (inklusive Cursor), und TI$ hatte ich gerade wegen der Anbindung an die Hardware im Kopf verdrängt. Daher auch der Gedanke, daß gut dokumentierte Enhanced-Basic zu nehmen, welches ebenso funktioniert: Ein- und Ausgabevektoren umbiegen, und schon läuft die Maschine. Ist so natürlich auch mit Commodore Basic bzw. Applesoft möglich, die ähnlich aufgebaut sind, aber Commodore Basic ohne Peeks und Pokes wäre für mein Gefühl irgendwie nicht wirklich vollständig.
    Was mich noch interessieren würde (wenn die Nachfrage erlaubt ist): Für welche Ausbildung wäre denn dieses Projekt? Für ein schulisches Projekt wäre ein C64-Emulator oder auch nur die Emulation eines Basic-Interpreters auf 6502-Basis ein recht ambitioniertes Projekt, welches ich mir daher schlecht als Bestandteil eines Informatik-LKs vorstellen kann. (Zumindest als ich das letzte Mal in die Richtlinien geschaut hatte, standen da sehr viele spannende Sachen drin wie Zustandsautomaten oder objektorientierte Programmierung in Java, aber garantiert kein Wort zu Emulatoren.) Auch an der Uni habe ich es eher so erlebt, daß schon Assembler als ziemlich out und verpönt angesehen wird, also eine Sache, über die man besser nicht laut spricht. Vielleicht könnte reims Näheres dazu sagen, insbesondere auch zur Zeitplanung, um mal den Aufwand besser abschätzen zu können.