Hilfe gesucht!

  • Hallo Leute!
    Ich suche händeringend nach Hilfe von JAVA-Programmierern.


    Es muss einiges an JEMU noch gemacht werden.


      FDC-Command &45 (save) für Floppy emulation
      Scanlines für doppelte Grösse
      Mute-Funktion im Applet integriert
      Bessere Soundausgabe (hierzu habe ich schon etwas herausgefunden, weiss aber nicht, wie man es einsetzen kann)


    Also, die von Euch, die Ahnung von JAVA haben, bitte bei mir melden...


    Grüssle, Markus


    P.S.: Anfragen diesbezüglich bei Richard W. verliefen leider monatelang ergebnislos.

  • Nachdem ich mich nochmal intensiv mit der Floppy-Emulation auseinandergesetzt habe, habe ich nun das fehlende FDC-Command &45 (Save) tot gelegt.
    Das bedeutet, dass dem Emulator vorgegaukelt wird, es funktioniert, in Wirklichkeit aber, passiert garnichts.
    Dieses hat zur Folge, dass sich das Applet nicht mehr aufhängt, wenn ein Spiel z.B. versucht, High-Scores zu speichern (Siehe Groops)


    Vielleicht findet sich ja trotzdem noch die Möglichkeit, das fehlende FDC-Command zu integrieren, so dass später in der Standalone-Version auch gespeichert werden kann.


    Dank Mithilfe von MaV ist es nun gelungen, den Code extrem zu optimieren.
    Das Applet ist nun von 315K auf 218K geschrumpft, und beinhaltet trotzdem sämtliche Funktionen und auch sämtliche Systeme werden nach wie vor emuliert.
    (Vorher wurde jedes CPC-Modell und der KC-Compact einzeln emuliert, das wurde geändert. Es gibt nun nur noch eine CPC-Emulation, wo dann einfach nur die ROMs und der Speicher neu zugewiesen wird)
    Die Modelle:


    CPC 464 - 64K, BASIC 1.0, AMSDOS
    CPC 664 - 64K, BASIC 1.1, AMSDOS
    CPC 6128 - 128K, BASIC 1.1, AMSDOS
    SymbOS - 512K, BASIC 1.1, AMSDOS, SYMBOS Roms
    KC Compact - 128K, BASIC 1.1, AMSDOS, KC-Roms

  • Sozusagen.
    Vorher wurden die einzelnen Systeme emuliert, dieses ist nun weggefallen.
    Es gibt also nur noch eine CPC-Emulation. Dadurch konnten eingespart werden:


    Für die einzelnen Systeme:
    CPC.Java, CPCDiskImage.java, GateArray.java, Keyboard.java und Z80.java
    Diese gibt es also nur noch 1x, und nicht mehr wie vorher für jedes CPC-System einzeln.


    Auszug aus der erneuerten CPC.java:



    So habe ich übrigens die Floppy-Emulation überlistet:
    Auszug aus UPD765A.java:


    Beachtet die letzten 2 Zeilen:
    Vorher wurde bei einem undefiniertem FDC-Command (wo &45 dazugehörte) eine Ausgabe gestellt, dass das Command ungültig ist. (Sieht man nur in der Benutzeroberfläche beim lokalen Ausführen) Dieser Code steht in der letzten Zeile, wo ich ihn herauskommentiert habe.


    Geändert habe ich, dass einfach die ID gelesen wird (was völlig unnütz ist, aber dem Ganzen vorgaukelt, dass gespeichert wird) und es wird intern die Meldung rausgeworfen, dass das Command ignoriert wurde.

  • Zitat von "Octoate"

    Wenn ich das richtig gelesen habe, wurde einfach nur redundanter Code der einzelnen, unterschiedlichen CPC Emulationen rausgeworfen.


    Hallo!


    Jep, ich hab vor allem versucht, die verschiedenen CPCs wieder in ein Package zu vereinen. Letztlich haben sie sich doch nur in Speicher und ROMs voneinander unterschieden.


    Es könnte noch mehr kommen, aber dazu muss ich den Code mal genauer betrachten ... und vielleicht meine Kenntnisse über die CPC-Interna auffrischen.


    MaV

  • Hmm, waere es nicht schoener, wenn du den Command einfach nur ignorierst und eine Meldung auswirfst und dennoch die Exception drin laesst? Also so:



    Hier waere dann sichergestellt, dass der Command 0x45 drin ist, aber ignoriert wird. Kommen dennoch andere Kommandos werden die ignoriert und es fliegt - nach wie vor - die Exception. Waere meiner Ansicht nach eine sauberere Loesung als einfach alles zu erlauben...

  • Schon, aber so funktioniert es leider nicht. Hatte ich davor schon versucht.
    Wenn ich das so mache, wirft er bei Command &45 trotzdem raus. Gebe ich das als CASE ein, erkennt er es nicht... Weiss der Geier, warum.

  • Zitat von "Devilmarkus"

    Schon, aber so funktioniert es leider nicht. Hatte ich davor schon versucht.
    Wenn ich das so mache, wirft er bei Command &45 trotzdem raus. Gebe ich das als CASE ein, erkennt er es nicht... Weiss der Geier, warum.


    Natürlich ist der Vorschlag von dir, Octoate, schöner.


    Zum Fehler:
    Beim switch verknüpft er das command mit & 0x1f, soll heißen er erkennt es ja erst gar nicht als 0x45, sondern als 0x05. Wir sollten zuerst einmal prüfen, ob wir diesen Befehl an die FDC auch als 0x05 benutzen können oder ob es dabei zu einer Überlagerung mit anderen Floppy-Befehlen kommt.


    Jetzt wird's echt Zeit, dass ich das Floppy-Buch aus dem Haufen CPC-Zeug heraussuche.


    MaV


    PS: Jep. Mit 0x05 kann ich den Befehl zumindest abfangen. Bleibt offen, ob sich dann ein anderer Befehl mit diesem überschneidet.

  • Werde ich ändern.
    MaV, melde Dich bitte mal.
    Ich habe in das Applet gerade noch einen "Eject" Button eingebaut, der ein Diskimage wieder aus LW A entfernt, wenn man ihn klickt.
    Dazu habe ich die CPC.java, die COMPUTER.java und die JEMU.java modifiziert.


    So nun werd ich aber das CASE 0x05 definieren.


    Bis dann!

  • So, der Code ist geändert:


    [Blockierte Grafik: http://cpc.devilmarkus.de/eject.png]
    So sieht es nun aus, wenn jemand versucht, etwas zu speichern, CAT schreibt, danach eject klickt, und wieder CAT schreibt...

  • Zitat von "Octoate"

    Ach Gott... den Verknuepfung im Switch-Block hab ich gar nicht beachtet. Dann isses natuerlich klar... waere sinnig, die Ausgabe bei der Exception zusaetzlich um den verknuepften Wert zu erweitern, damit man den dann gleich einsetzen kann.


    So hab ich's dann auch ins Programm eingefügt. :)


    Inzwischen hab ich mir die FDC-Befehle angeschaut. Alle relevanten Bits, die die einzelnen Befehle von einander unterscheiden, befinden sich in eben dem Block, der mit 0x1f maskiert wird. Bits 6-8 sollte laut Buch grundsätzlich immer 010 sein. Damit sind zwischen 0x05 und 0x45 auch keine mehrfachen Deutungen möglich.


    Grüße,
    MaV