Hallo Besucher, der Thread wurde 5,9k mal aufgerufen und enthält 30 Antworten

letzter Beitrag von Diddl am

XS-1541 JAVA-API beta release

  • Da Atmel uns mit dem Mega1284 im Stich lässt habe ich PC seitig was gemacht: ein JAVA API



    Was kann man damit tun?


    + Wenn jemand JAVA kann, dann kann er mit dem API das XS-1541 und damit seine Commodore Floppys aus JAVA heraus kontrollieren.


    + Man kann sich ein GUI bauen und so die Arbeit mit dem XS-1541 erleichtern.



    Warum braucht man das?


    + Der Controller hat zuwenig RAM um einen ganzen Track der Diskette lesen zu können. Der PC hat dieses Problem nicht ...


    + JAVA läuft auch auf jeder Plattform, wie das Terminalprogramm. Deshalb kann es gut als Ersatz herhalten ...



    Was gibt es noch zu sagen?


    + Das API wird von mir konsequent weiterentwickelt so wie die XS-1541 Firmware


    - Es wird aus verschiedenen Gründen von mir kein GUI geben. Wenn sich wer berufen fühlt, nur zu!!


    + Von JAVA habe ich wenig Ahnung. Ich programmiere das Zeugs erst seit 3 bis 4 Wochen Abends je 2 Stunden. Verbesserungsvorschläge, Kritik und Hilfe ist daher gerne willkommen!



    Was sollte ein JAVA Entwickler zu dem API wissen?


    + Es wird das Paket RXTX verwendet. Man braucht das Zeugs für die serielle Kommunikation, zumindest unter Windows.


    + Es gibt eine Klasse XS1541 die pro Board, also pro Schnittstelle initialisiert wird.


    + Es gibt eine Klasse F_1541 die pro Floppy initialisiert wird. Als Parameter für den Konstruktor gibt man das XS1541 (wo die Floppy dran hängt) und die Gerätenummer mit.


    + Es wird für jeden Floppytyp eine Klasse geben (1571, 1581, 4040, 8050, 8250 ...)


    + Es ist eine TEST Klasse implementiert. Die zeigt auch gut die Funktion der Implementationsklassen und testet die Funktionalität. Der Testlauf sollte eine Ausgabe wie unten gezeigt auswerfen.



    .

  • Der Codierlemming hat wieder zugeschlagen (-;
    Sieht ja schon ganz ordentlich aus! Bist Du sicher, dass Du erst seit drei bis vier Wochen mit Java arbeitest? (-;
    Eine GUI wäre m.E. eine gute Möglichkeit das XS-xxxx der breiten Masse zugänglich zu machen.
    Velleicht sollte ich mir auch mal so'n Teil löten? Und eine GUI wäre schnell zusammengehackt...

  • jo hatte diddl vor geraumer zeit mal angeschrieben deswegen, da ich aber mit der blöden seriellen kommunikation nicht zurecht kam hat er sich auch mal dran gemacht


    ich wollte dazu dann (auch um java zu lernen) eine GUI machen... hoffe das ich mich dann jetzt mal aufraffen kann und was zustande brigne... wie gesagt nutze ich das um in java einzusteigen

  • Sieht ja schon ganz ordentlich aus! Bist Du sicher, dass Du erst seit drei bis vier Wochen mit Java arbeitest? (-;


    Ja, bin ich mir sicher, aber Java ist nicht sehr schwer wenn man C++ gut beherrscht ... ;)


    Ne, meine Firma bot mir die Möglichkeit an einen 2 Tageskurs Java teilzunehmen. Das habe ich genutzt und jetzt muss ich schauen dass ich das nicht gleich alles wieder verlerne. Aber mir fehlt es natürlich total an Erfahrung in Java, muss ständig Google Suche bemühen und hab natürlich auch ständig die JDK Doku offen ...


    Macht aber Spass das Java, vor allem das Eclipse ist total super finde ich. Ich überlege ob ich nicht alle meine Codier Tätigkeiten weitgehends auf Eclipse verlege.

  • Ja prima! Ich entwickle seit vielen Jahren kommerziell auch Java Programme und möchte es für bestimmte Einsatzgebiete nicht mehr missen.

  • JavaDoc ist nicht dein Freund.


    Ich bin froh über deine Kritik, aber könntest du das etwas konkretisieren?


    Spielst du auf meinen stümperhaften ParseInt() Ersatz an? Habe tatsächlich keine fertige Lösung finden können ...


    Ich habe auch sonst 1000 Fragen die mich beschäftigen. Zb. kann ich eine Property 'abstrakt' machen, sodass eine Child Klasse den Wert initialisieren muss?
    Vielleicht sollten wir einen Java Anfänger FAQ Thread öffnen?

  • Nein, mache Methoden hast Du mit Kommentaren versehen und manche nicht. Geht mir genauso. Mir fehlt auch oft die Motivation gleich an Ort und Stelle zu dokumentieren. Meist mache ich es im Nachhinein, was ja auch nicht im Sinne des Erfinders ist.


    Ja, so eine kleine Java-Diskussionsecke fände ich nicht schlecht. Es bleibt aber die Befürchtung, dass sie von den üblichen Schlaumeiern befallen, besudelt und in letzter Konsequenz per "Java find ich doof, $(MY_FAVORITE) ist viel besser"-Bashing ins Off-Topic getrieben wird.


    Aber die Hoffung stirbt zuletzt... :bia

  • Nächster Release des API v0.00.03


    + neue Funktion ReadBAM()


    Folgender Test Code:


    Sollte folgende Ausgabe produzieren:






    .

  • Diddl: Die Schreibweise von Namen könnte einheitlicher sein. `ReadBAM()` und `getBam()` zum Beispiel, da wäre es schöner wenn konsequent eine Schreibweise von BAM verwendet würde. Und in Java fangen üblicherweise eigentlich nur Klassennamen und Konstantennamen mit einem Grossbuchstaben an.


    Die API wäre auch etwas schöner, wenn alle nötigen Informationen in dem Ergebnis von `readBam()` stecken würden, dann bräuchte man `tracks` und `sectors` nicht, denn Java-Arrays kennen ja ihre eigene Grösse. Dann liesse sich das so schreiben:


  • Und in Java fangen üblicherweise eigentlich nur Klassennamen und Konstantennamen mit einem Grossbuchstaben an.


    Wusste ich nicht, in C schreiben wir Funktionen normal groß und nur Variable klein. Drum sind die automatisch generierten Getter klein geschrieben.


    Werde das entsprechend anpassen ...



    Die API wäre auch etwas schöner, wenn alle nötigen Informationen in dem Ergebnis von `readBam()` stecken würden, dann bräuchte man `tracks` und `sectors` nicht, denn Java-Arrays kennen ja ihre eigene Grösse.


    Aha genial, man kann mehrdimensionale Arrays mit unterschiedlicher Länge in der 2. Dimension haben, völlig ungewöhnlich für mich!! Eigentlich logisch wenn es im Grunde nur ein Array von Array Objekten gibt ...


    Werde das auch entsprechend ändern.


    Danke für die guten Tipps!

  • Diddl: Installier' Dir in Eclipse mal die Plugins "Checkstyle" und "Findbugs". Checkstyle zeigt dir bereits beim Editieren, wenn Dein Code nicht den eingestelten Konventionen (Checkstyle) entspricht. Und Findbugs findet Error Patterns, wie z.B. nicht synchronisierte Zugriffe auf Variablen, Nullpointer, versehentliche Zuweisungen in if-Konstrukten usw.
    http://eclipse-cs.sourceforge.net/
    http://findbugs.sourceforge.net/

  • Die saubere und komfortable Methode wäre gewesen, den Update Manager zu verwenden: Help->Software Updates->Find and install->Search new features to install und da die "Update Site" für das Plugin eingeben. Das hat den Vorteil, dass auch die Abhängigkeiten aufgelöst und installiert werden.
    Muss jetzt leider weg... Schau am besten mal bei Tante Googel. Es gibt sicher einige Anleitungen zum Thema. Meistens auch auf den Seiten der Plugin-Entwicker.


    Edit:
    Update Site für Checkstyle: http://eclipse-cs.sourceforge.net/update/
    Einleitung Checkstyle (engl.): http://www.vogella.de/articles/Checkstyle/article.html

    LIFE IS SHORT - Break the rules, do more, need less, smile often, be brave, stay true, dream big, forgive quickley, kiss slowly, love truly, laugh uncontrollably and never regret anything that made you smile.

    Einmal editiert, zuletzt von Draco ()

  • So, nun geht auch D64 Images erstellen im API!


    Die Zeiten sind auch gut


    1541 parallel, volle Disk: 27 Sekunden (inklusive hochladen des Speeder Code in die Floppy)


    1541 seriell (S2 Mode), volle Disk: 1:17 Sekunden


    damit kann man leben ... :thumbsup:



    Ich mach "nur belegte Blöcke" rein und Massentests, damit ich sicher sein kann dass es sauber funktioniert. Dann werde ich es mal releasen.

  • @Diddle: Ich bin vom OO-Entwurf noch nicht so ganz überzeugt. `FloppyType` zum Beispiel erscheint mir redundant und die Verwendung sieht nicht nach OOP aus. Es gibt für jeden Floppy-Typ einen Enum-Eintrag, eine Funktion, die darauf ``switch``\t *und* noch jeweils eine eigene Klasse für jeden Floppy-Typ. Wenn man einen Floppy-Typ hinzufügt muss man das an mehreren Stellen tun und darf keine vergessen.


    Mein erster Gedanke war das ``switch`` über etwas "schlauere" Enum-Objekte zu beseitigen.



    So braucht man die `sendDevice()`-Methode nicht mehr anzufassen, wenn man die Floppy-Typen ändert.


    Aber auch so muss man sowohl `FloppyType` ändern, als auch eine Klasse für den Floppy-Typ schreiben. Wenn man sowieso einen Typ für jede Floppy implementiert, dann könnte man doch aber auch gleich die Floppy-Klassen statt des Enum verwenden. Die Methoden in `XS1541` sähen dann zum Beispiel so aus:



    `Floppy` würde die abstrakte Methode deklarieren ``abstract public String getTypeString();`` und in den konkreten, abgeleiteten Klassen wie `F_1541` stünde dann so etwas:


    Code
    1. // ...
    2. @Override
    3. public String getTypeString() {
    4. return "1541";
    5. }
  • Sieht genial aus. ich verstehe die Idee dahinter, die Syntax ist mir (noch) etwas zu hoch. Ich werde das mal so einbauen und mir dann in Ruhe ansehen. Sind (mir) ganz neue Elemente, sowas wie friend und virtual functions in C++?


    Danke für diese Verbesserung!