AmigaBASIC "Emulator" [Mini Demo]

Es gibt 15 Antworten in diesem Thema, welches 2.927 mal aufgerufen wurde. Der letzte Beitrag (26. Dezember 2013 um 19:21) ist von Zirias.

  • Hi allerseits,
    das ist mein erstes Posting hier, ermutigt im Chat will ich gleich mal vorstellen, was ich die letzten Wochen mit dem Assembler von cc65 (ca65) vollendet habe :)

    Kurz zur Geschichte:

    • Episode 1, ca 1995, bin noch Schüler, lerne gerade ein bisschen Assembler -- ich habe ein Buch von Peter Wollschlaeger, da sind auch Grafikroutinen drin, aber etwas "simples" wie eine Linie zeichnen fehlt. Denke mir "so schwer kann das nicht sein", aber alle Versuche scheitern -- ohne Fließkomma-Arithmetik ist es dann doch nicht SO einfach.
    • Episode 2, 2006, studiere gerade Informatik, entdecke das Projekt cc65. Die Idee eines C-Compilers für den C64 finde ich genial, spiele ein wenig damit herum -- nur um dann doch wieder bei Assembler zu landen. Ich erinnere mich an mein altes Linien-Problem, bastle ein wenig, finde einen iterativen Algorithmus nur mit Ganzzahlberechnungen und da kommt mir die Idee: Auf dem Amiga gab es eine AmigaBASIC demo "Music", in der Linien gezeichnet wurden und dazu Bachs "Jesu meine Freude" dudelte -- also DAS kann doch der C64 auch :) Gesagt, getan, es wurde C64-Code daraus, mit Linien, mit Musik, aber richtig zufrieden war ich doch nicht -- es sah nicht aus wie ein Amiga. Keine Fensterrahmen :)
    • Episode 3, 2013, ich entdecke GIT für mich und migriere alte Projekte aus SVN. Dabei stolpere ich wieder über mein altes Projekt von 2006. Diesmal packt es mich -- ich lasse nicht locker, bis das ganze für mich aussieht wie ein Amiga!

    Ja, nun ist es da, so wie ich es wollte, der Source (und ein .d64 Image in "disks") ist hier: Bitte melde dich an, um diesen Link zu sehen.

    Wer es selbst bauen will braucht cc65, GNU make und gcc (nur C-Compiler, für die beiden Tools, eines konvertiert .bmp in C64 assembler-source, eines zum bauen des Disk-images) im Pfad. Auf Windows sollte MinGW verwendet werden und in CMD gebaut werden (NICHT bash für windows verwenden). 'make' erstellt die binaries, 'make disk' das disk image.

    Für eine Demo ist es sicher zu wenig, aber vielleicht ja trotzdem interessant. Ich selbst bin vor allem interessiert an Kommentaren, vielleicht könnte man Dinge besser machen, vielleicht gibt es Ideen, was noch dazu passen würde. Vieles ist nicht besonders optimiert, das ist mir klar ...

    Kurz noch zum "geliehenen" Code:

    • "gfx-core": Hier sind die routinen (hauptsächlich init/clearscreen/plot) aus dem Buch von Wollschlaeger
    • "kickstart": Der IRQ-loader ist eine fast 1:1 kopie von Bitte melde dich an, um diesen Link zu sehen. -- nur minimale Anpassungen. Der eigentliche Bootcode (autostart) stammt von Bitte melde dich an, um diesen Link zu sehen. -- von mir so erweitert, dass auch ein laden mit ",8" und anschließendes RUN möglich ist -- habe ich dort als "METHOD Bitte melde dich an, um diesen Link zu sehen." dokumentiert.
    • "tools": cc1541.c stammt original von Bitte melde dich an, um diesen Link zu sehen. -- habe ich für meine Zwecke verbessert/erweitert, details dazu im header :)
  • Wer suchet der findet (das Image unter dem oben angegebenen Link). Für alle faulen Säcke:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Nice ;)

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

  • zip leer !

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Direktlink: Bitte melde dich an, um diesen Link zu sehen.
    Hinweis für Emus: Die Floppy muss emuliert werden :) (in Vice: "Präzise Floppy-Emulation" anhaken)

  • Kleines Update,

    es hat mich jetzt irgendwie RICHTIG gepackt, daraus noch was zu machen :) Die Idee ist, eine Art Fake-AmigaDOS für den C64 zu bauen. Das soll so aussehen, dass es ein minimales CLI anbietet (dazu wird u.a. noch ein Tastatur-Treiber gebraucht) mit ein paar builtin kommandos (angezeigt als C:-assign in einer Ramdisk) und eben files direkt von disk starten kann.

    Zur Vorbereitung war ich schon mal in einem Feature-Branch aktiv und hab folgendes angepasst/eingebaut:

    - (autostart)-loader von kickstart getrennt
    - generische routine zur installation eigener "raster-tables"
    - entkopplung verschiedener inits (raster-irq, vic-config, text/grafik-modus)
    - neues memory-layout:
    von amigados ausgeführtes programm: 6000-7fff
    vic-bank: 8000 - bfff
    kickstart: c000 - cfff
    amigados: e000 - fffd

    das BASIC-RAM würde so also bis 5fff frei bleiben, es wird nur temporär vom bootloader genutzt, der ein kleines BASIC-stub mit sys49152 hinterlässt.

    Da diese Version mittlerweile fehlerfrei läuft zeige ich sie mal her:
    Code: Bitte melde dich an, um diesen Link zu sehen.
    D64: Bitte melde dich an, um diesen Link zu sehen.

    TODOs:
    - Tastaturtreiber
    - Bessere print-routinen und scrolling fürs 80col-text display im AmigaDOS fenster
    - (simpler) Kommandozeilenparser
    - virtuelle devices DF0: und RAM:
    - hierarchisches filesystem [eventuell?] (in cc1541.c, floppy-code und amigados)

    Findet das irgendjemand interessant? Und hätte eventuell sogar Lust, ein wenig zu coden? ;)

  • Der Tastaturtreiber und die Basisfunktionen der Konsole sind so weit fertig :D

    Source gleiche Adresse wie oben
    D64: Bitte melde dich an, um diesen Link zu sehen.

    Das Keymapping ist noch nicht ganz ausgereift, aber die "üblichen" Zeichen passen ...

    Bleiben noch ne Menge offener Punkte -- wirklich niemand Lust, mitzumachen? :)

  • Lust ja, Ahnung aber gleich Null. :(
    Dennoch - Klasse gemacht - mal "ganz" was anderes. :zustimm:

    Arroganz ist die Kunst, auf seine eigene Dummheit stolz zu sein.
    Gruß - cp2

    Bitte melde dich an, um diesen Link zu sehen.

  • Danke :) Will das auch auf jeden Fall zuende bringen!

    Habe gerade mal den console source etwas aufgeräumt und TODOs identifiziert, die umgesetzt werden müssen bevor darauf ein CLI laufen kann: Bitte melde dich an, um diesen Link zu sehen.

    Jetzt geht's allerdings erstmal zum "dayjob" ;)

  • Mittlerweile stecke ich ein bisschen in einer Sackgasse .... damit wirklich "AmigaDOS-Feeling" aufkommt sollten so ein paar Shell-Befehle (dir, cd, ...) funktionieren und da wäre ein hierarchisches Dateisystem wirklich wünschenswert. Ich glaube mit dem cc1541 Tool zum Disk images erzeugen komme ich da nicht weiter: Das verteilt erst alle Files auf der Disk und schreibt dann in einem Rutsch das (natürlich flache) Directory.

    Kennt jemand flexibleren Code zur Erzeugung von D64 Disk images? Oder ist hier wirklich der Zeitpunkt gekommen, an dem ich mein komplett eigenes Tool bauen muss?

  • Ich glaube mit dem cc1541 Tool zum Disk images erzeugen komme ich da nicht weiter: Das verteilt erst alle Files auf der Disk und schreibt dann in einem Rutsch das (natürlich flache) Directory.


    Was soll es denn sonst machen? Eine 1541-Diskette hat nur ein Directory, in dem alle Dateien eingetragen werden.

    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.


  • Was soll es denn sonst machen? Eine 1541-Diskette hat nur ein Directory, in dem alle Dateien eingetragen werden.


    Das ist aber weder eine Einschränkung der Diskette noch des Laufwerks ;) Würde das Tool jeweils Directory-Eintrag und dazugehöriges File anlegen (und in der BAM markieren), dann wäre es wesentlich einfacher, das so zu modifizieren, dass es Unterverzeichnisse erlaubt. Leider ist cc1541 strukturell so gebaut, dass eine Änderung in meinem Sinn fast das gleiche wäre wie neu schreiben ...

  • Wenn das was auf die Diskette drauf soll noch irgendwie auf einer "normalen" 1541 mit einem C64 lesbar sein soll, dann sollte man am Dateisystem nicht rumfummeln (das spart auch Ressourcen). "cd" kann man doch gut auf einem SD2IEC anwenden oder auf einem CMD-Laufwerk ...

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

  • Wenn das was auf die Diskette drauf soll noch irgendwie auf einer "normalen" 1541 mit einem C64 lesbar sein soll, dann sollte man am Dateisystem nicht rumfummeln (das spart auch Ressourcen).

    Zum Glück kann man da Code hochladen und ausführen ;) Und da ich das eh schon mache ... was soll's. Allerdings steht zuvor eben das Erzeugen eines entsprechenden Disk image.

    Kompatibel mit dem original DOS muss es natürlich schon so weit bleiben, dass der "bootloader" geladen werden kann, aber das ist jetzt glaube ich weniger das Problem.