BASIC V2 Interpreter/Compiler in/für Java

  • BASIC V2 Interpreter/Compiler in/für Java

    Hallo BASIC-Freunde,

    ich habe in vergangenen Monaten immer mal wieder an dem hier gebastelt und ich dachte, vielleicht interessiert es den ein oder anderen: github.com/EgonOlsen71/basicv2

    Was ist das?
    Das ist ein Java-Programm, mit dem sich BASIC V2- (und ANSI BASIC-)Programme (quasi-)kompilieren und ausführen lassen. Es hat mit dem Orginal-Interpreter nichts zu tun und erzeugt auch nichts, was auf dem C64 ausführbar wäre. Der Ergebnis ist nur innerhalb einer Java-Anwendung zu benutzen.
    Es enthält ferner einen einfachen symbolischen Assembler und eine 6502-Emulation, um die assemblierten Programme ausführen zu können. BASIC und Assembler können auch gemischt werden.

    Was ist es nicht?
    Es ist KEIN Emulator. Es bildet nichts (bzw. fast nichts) von der echten Hardware des C64 ab. Man kann damit keine Spiele laufen lassen, die Bildschirmausgaben in der Java-Konsole sind nicht schön, I/O ist nur rudimentär implementiert usw.

    Wozu soll das nutze sein?
    Ganz ehrlich? Keine Ahnung! Ich habe es als eine Art Fingerübung gesehen und es hat Spaß gemacht, sich mal wieder mit dem ollen BASIC V2 und 6502-Assembler zu beschäftigen. Man könnte damit Java-Programme mit BASIC V2 scripten. Oder sogar mit 6502-Assembler, wenn man das lieber mag. Sinnvoll ist das vermutlich eher nicht.
    Es ist auch ein "template"-Package dabei, welches aufsetzend auf dieser Lösung erlaubt, (HTML)-Templates in BASIC V2 bzw. 6502-Assembler zu erstellen. Das würde ich immerhin noch lieber machen, als PHP...

    Wie schnell ist das?
    Eigentlich ziemlich schnell. Auf meinem 4Ghz Core i7 braucht ein Apfelmännchen in BASIC ~ 500ms.
  • EgonOlsen71 schrieb:



    Wozu soll das nutze sein?
    Ganz ehrlich? Keine Ahnung!
    Könnte man als Voraussetzung für einen Wettbewerb verwenden. Dann wären die Karten für alle Teilnehmer neu gemischt. ;)
    Mitwäre das nicht passiert! :prof:
    :syshack: Meine 3D-Drucker Teile auf thingiverse.com/oobdoo/designs :strom:
    Sammlung | 85 Bücher bzw. 24.427 Buchseiten mit Z80/8080 Power
  • syshack schrieb:

    Es gibt was Ähnliches auch für iOS: Hand BASIC.
    Ja, aber das basiert auf dem cbmbasic-Projekt, welches den Orginal-Interpreter von 6502-ML nach C konvertiert hat und ihn dann auf der Zielplatzform neu kompiliert. Damit habe ich auch ein wenig herumgespielt, aber es ist wesentlich langsamer als mein Ansatz (weil letztendlich derselbe, alte Interpreter läuft, d.h. alle Gleitkommaberechnungen finden in Software statt) und, obwohl es das sein sollte, ist es nicht 100% kompatibel. Ein paar meiner Testprogramme liefen darauf in Endlosschleife, auch wenn sie auf dem C64 selber (und in meinem Interpreter) ganz normal funktionierten. Irgendwas ist das nicht zu 100% korrekt übersetzt worden...
  • Es hat auch eine Grafik-Bibliothek, die man aber zusätzlich als In-App Kauf haben kann.
    Ich finde es halt interessant, dass es bei mir auf dem iPad läuft.

    Wenn Du mit Deinem Projekt eine Alternative geschaffen hast, ist das ja positiv.
    Einzip das mit Java...äh...wird dann halt nix für iOS sein.
    Ich schaue es mir mal an auf dem PC/Mac.

    Ansonsten, wenn Du mal einen tieferen BurnIn-Test haben willst, lass mal @BIF drauf los... 8)
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • syshack schrieb:

    Es hat auch eine Grafik-Bibliothek, die man aber zusätzlich als In-App Kauf haben kann.
    Sowas habe ich jetzt auch ergänzt, als einfache BASIC-Erweiterung, die es erlaubt, die volle Auflösung und Farbpalette des PC auch in BASIC V2 zu nutzen. z.B. so:


    Code dazu:

    Quellcode

    1. 10 DIM R(255),G(255),B(255)
    2. 20 RP=20:GP=80:BP=100
    3. 30 FOR I=0TO255:R(I)=RP:G(I)=GP:B(I)=BP
    4. 40 RP=RP+7:GP=GP+9:BP=BP+5
    5. 50 IF RP>255 THEN RP=20
    6. 60 IF GP>255 THEN GP=20
    7. 70 IF BP>255 THEN BP=20
    8. 80 NEXT
    9. 100 XL = -1.2:XU = -1.185: REM XL = -2.000:XU = 0.500
    10. 110 YL = -0.195:YU = -0.185 :REM YL = -1.100:YU = 1.100
    11. 115 REPS = 255
    12. 116 ITERS% = 0
    13. 120 WIDTH = 800:HEIGHT = 600
    14. 130 XINC = (XU-XL)/WIDTH
    15. 140 YINC = (YU-YL)/HEIGHT
    16. 200 REM MAIN
    17. 207 GRON WIDTH,HEIGHT:CLEAR
    18. 210 FOR J = 0 TO HEIGHT - 1
    19. 220 FOR I = 0 TO WIDTH - 1
    20. 230 GOSUB 300
    21. 231 GOSUB 600
    22. 240 NEXT I,J
    23. 260 PRINT "DONE!"
    24. 290 REM GET A$:IF A$ = "" THEN 290
    25. 299 GOTO 700
    26. 300 REM CALCULATE MANDELBROT
    27. 310 ISMND = -1
    28. 312 NREAL = XL + I * XINC
    29. 313 NIMG = YL + J * YINC
    30. 315 RZ = 0: IZ = 0
    31. 316 R2Z = 0: I2Z = 0
    32. 320 FOR K = 0 TO REPS
    33. 330 R2Z = RZ*RZ - IZ*IZ
    34. 340 I2Z = 2*RZ*IZ
    35. 350 RZ = R2Z+NREAL
    36. 360 IZ = I2Z +NIMG
    37. 365 ITERS%=K
    38. 370 IF (RZ*RZ + IZ*IZ)>4 THEN ISMND=0:K=REPS
    39. 390 NEXT K
    40. 399 RETURN
    41. 600 REM DRAW
    42. 620 IF ISMND<>0 THEN COLOR 0, 0, 0:GOTO 630
    43. 622 REM IF ISMND=0 THEN COLOR 32*(ITERS% AND 7), 32*(ITERS%/8 AND 7), 32*(ITERS%/16 AND 7)
    44. 625 IF ISMND=0 THEN COLOR R(ITERS%), G(ITERS%), B(ITERS%)
    45. 630 PLOT I,J
    46. 699 RETURN
    47. 700 REM RETURN TO NORMAL
    48. 720 GSAVE"MANDELBROT.PNG"
    49. 740 GROFF
    50. 750 END
    Alles anzeigen
  • EgonOlsen71 schrieb:

    Sowas habe ich jetzt auch ergänzt, als einfache BASIC-Erweiterung, die es erlaubt, die volle Auflösung und Farbpalette des PC auch in BASIC V2 zu nutzen. z.B. so:
    Das sieht ja ganz cool aus.

    GRON/GROFF/GSAVE verstehe ich. PLOT zeichnet einen Punkt x,y mit einer Farbe, die mit COLOR festgelegt wird?
    Und das COLOR als RGB Values finde ich mal sowas von modern! :dafuer:

    Der Rest, also die Berechnung des Mandelbrots, ist für mich eh nur Magie... :D
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • syshack schrieb:

    PLOT zeichnet einen Punkt x,y mit einer Farbe, die mit COLOR festgelegt wird?

    Ja, genau. Zusätzlich gibt es noch LINE, CIRCLE (zeichnet auch Ellipsen, wie etwa bei SIMONS BASIC), RECT, einen Floodfiller mit FILL und RECT und CIRCLE können auch gefüllt gezeichnet werden. Da habe ich dann erstmal aufgehört. Man könnte noch relativ einfach COPY oder sowas einfügen...SCALE...ROTATE...mal schauen...
  • Wär schön, wenn du da, wie Lust und Zeit da ist, ab und zu weitermachst. Hat einfach was.

    Auch wenn es ein vielleicht etwas unzutreffender Vergleich ist, aber: Es übertrifft grafiktechnisch natürlich bei weitem die Möglichkeiten eines C/MEGA65. Toll 8o .

    Theoretisch könnte man damit z. B. ja auch schön große Tabellen erstellen etc. (TEXT-Befehl...). Damit könnte man richtig was anstellen.
    Read'n'Blast my jump'n'stop-text-sprite-scroller Select A Move

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?
  • EgonOlsen71 schrieb:

    Ja, genau. Zusätzlich gibt es noch LINE, CIRCLE (zeichnet auch Ellipsen, wie etwa bei SIMONS BASIC), RECT, einen Floodfiller mit FILL und RECT und CIRCLE können auch gefüllt gezeichnet werden. Da habe ich dann erstmal aufgehört. Man könnte noch relativ einfach COPY oder sowas einfügen...SCALE...ROTATE...mal schauen...
    Hast du da auch eine Doku dazu? Habe das Git zu mir gekont, finde aber nix.
    ___________________________________________________________
    Meine Kreationen: Deviant Art | Toonsup | Flickr | Youtube
    | Twitter
    Avatar: Copyright 2017 by Saiki
  • Muss mich mal selbst zitieren:

    Hexworx schrieb:

    Theoretisch könnte man damit z. B. ja auch schön große Tabellen erstellen etc. (TEXT-Befehl...). Damit könnte man richtig was anstellen.
    Ich weiß gar nicht, wie oft mir das schon durch den Kopf schoss: "In BASIC V2 wäre das/hätte ich das (Tabelle, Aufstellung etc.) mal eben ganz schnell hingebastelt". Aber die Grafik-Auflösung gab es eben fast nie her (bis auf wenige Ausnahmen, wo ich das tatsächlich damit gemacht habe). Ja, ich komme leicht ins Schwärmen für das Ding :rolleyes: .
    Read'n'Blast my jump'n'stop-text-sprite-scroller Select A Move

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?
  • Ich habe noch ein wenig mehr Zeug dazugepackt: Man kann jetzt Anti-Aliasing anschalten, Fonts setzen, Text ausgeben (analog zum normalen PRINT-Befehl) und die Framerate auf einen fixen Wert begrenzen. Die Doku ist hier: Graphics Basic

    Ein kleines Beispiel im Bild...


    ...und im Code:

    Quellcode

    1. 100 GRON 320,200:BUFFERMODE 1
    2. 400 FOR W = 0 TO 4*3.1415 STEP 0.05
    3. 405 COLOR 0,0,0:CLEAR:COLOR 255,255,255
    4. 410 A=0:B=0:C=0
    5. 420 F1 = 20 : F2 = 5 : F3 = 8
    6. 430 V1 = 160 : V2 = 100
    7. 440 CO = COS(W) : SI = SIN(W)
    8. 610 SY=-0.5 : SX=-0.05
    9. 620 FOR CT=1 TO 2
    10. 630 FOR YR=3 TO -4 STEP SY
    11. 640 FOR XR=3 TO -3 STEP SX
    12. 650 ZR=YR*YR-XR*XR
    13. 660 X=F1*(A+XR) + F3*(YR+C)*CO + V1
    14. 670 Y=F2*(B+ZR) + F3*(YR+C)*SI + V2
    15. 680 PLOT X,Y
    16. 690 NEXT XR,YR
    17. 700 SY=-0.05 : SX=-0.5
    18. 710 NEXT CT
    19. 750 FLIP:LIMIT 40
    20. 800 NEXT W
    21. 1000 GROFF
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von EgonOlsen71 ()