Hello, Guest the thread was viewed16k times and contains 356 replies

last post from Snoopy at the

S-BASIC 65 (MEGA65)

  • So, nach gefühlten 5 Millionen Stunden Programmieren und 5 Milliarden Stunden Testen (vorsichtig geschätzt) habe ich nun nach Monaten einen Stand erreicht, an dem ich völlig verzweifelt bin ... mit halbwegs ruhigen Gewissen eine erste Veröffentlichung wagen will. :)


    Ich habe es hier und hier schon mal kurz erwähnt, dass ich mein BASIC 65.EX nach und nach für meinen Privatgebrauch erweitert und immer wieder etwas umgebaut habe, weil ich mit dem BASIC 65 manches der MEGA65-Features nur mithilfe "von POKES und Umwegen" oder einiges auch gar nicht machen konnte. Da es ursprünglich "für mich Zuhause" gedacht war, habe ich im ROM auch genau das gekürzt, umgeschrieben und erstellt, was mir persönlich wichtig war und Teile rausgeworfen, die mir persönlich nicht so wichtig waren. Ich musste es ja auch nur mit mir ausdiskutieren. ;)


    Mittlerweile ist S-BASIC 65 nun so stabil beim Testen (mit Xemu und Nexys-Board) und auch beim Programmieren größerer Sachen gewesen, dass ich mich entschieden habe, es auch zur Verfügung zu stellen. Vielleicht hat ja jemand daran Interesse, auch wenn es natürlich kein "offizielles" MEGA65-ROM ist.


    Weil ich ja nun schlecht einfach nur ein ROM "hinwerfen" kann, musste ich zumindest eine kurze Anleitung schreiben, sonst nützt ein BASIC ja eher wenig. Die "kurze Anleitung" sind nun beim S-BASIC 65 für dessen exklusive Kommandos doch 40 Seiten geworden sind. Und da ist jedes exklusive Kommando nur mit paar Worten erklärt. :S


    Ich hoffe, es reicht trotzdem für ein erstes Reinschnuppern aus. Ich werde das Handbuch natürlich nach und nach ergänzen und genauer erklären. :)


    Es ist auch erstmal nur auf Deutsch, das geht mir halt trotz allem noch immer am leichtesten von der Hand. Englisch, Bayerisch und Suaheli kommen dann "irgendwann" (vielleicht) auch noch, wenn ich Zeit dafür habe. :whistling:



    Das S-BASIC 65-ROM, eine "Demo-Diskette" und das Handbuch könnt ihr hier von meiner Seite hier runterladen:


    :achtung 65site.de: S-BASIC 65 :achtung


    Wenn der Xemu-Emulator verwendet wird, könnt ihr das ROM über das Emulatormenü einbinden, beim MEGA65 oder Nexys-Board muss die ROM-Datei in MEGA65.ROM umbenannt werden.


    Ich liste hier unten im Beitrag einfach nur mal zur Übersicht alle exklusiven S-BASIC 65-Kommandos alphabetisch auf. Genaueres ist "so grob" nach Themen sortiert dann im Handbuch zu finden. :zeig:


    Vielleicht kommt dem Einen oder Anderen so maches Kommando bekannt vor? Ich komme ja ursprünglich aus der Sinclair-Ecke (ZX80, ZX81, ZX Spectrum) und hatte auch mal Berührungen mit einem Schneider CPC 6128. Von Letzteren habe ich mir auch die zeitgesteuerten Unterprogrammaufrufe mittels AFTER und EVERY als Idee geholt. Die fand ich dort schon immer toll. :thumbup:


    Ich werde hier sicherlich noch Einiges zum S-BASIC 65 schreiben und erklären. Und falls jemand was dazu wissen möchte, kann er gerne hier im Thread fragen. Ich habe sicherlich noch hunderte Sachen vergessen, zu beschreiben, weil das ROM doch etwas komplexer geworden ist. :/


    Ach so, noch der Hinweis, dass es beim S-BASIC 65 keinen C64-Modus gibt. Einfach aus dem Grund, weil er sich nicht vom C64-Modus des BASIC 65 unterscheiden würde (und ich somit keinen Mehrwert darin sehe) und ich den Platz lieber anderweitig verwendet habe. Also, wer nur ein GO64 machen will, muss sich das ROM gar nicht runterladen. Das geht dort nicht! :D


    Alle Anderen können damit aber zum Beispiel Zahlen binär ein- oder ausgeben (mit führendem % und BIN$() ), Textbildschirme ins RAM speichern und laden, Sprites (auch Fullcolor) definieren, spiegeln und animieren, den Fullcolor-Textmodus (40x25 Zeichen) benutzen, Prozeduren verwenden oder Inline-Assemblerroutinen einbinden. Dazu am Besten einfach mal das Handbuch durchblättern und ein paar Demoprogramme von der Diskette anschauen.


    Man kann mit S-BASIC zum Beispiel solche Sachen ohne einen einzigen POKE-Befehl machen (auch im 3.5 MHz-Modus):



    Hier ein kurzes Capture-Video davon:


    https://65site.de/downloads/s-…e_fullcolor_sprites_a.mp4



    Ich wünsche einfach mal viel Spaß mit S-BASIC 65! :)



    Anhang: Alphabetischer Index aller exklusiven S-BASIC 65-Befehle:


    .. [Assemblerbefehl | @Label |!Byte [, Byte ... ] | Kommentar]

    ADD <Var&|Var%> [, <Integer>]

    AFTER <Zeit>,<Programmzeile>

    ASM <Adresse>,<Bank>

    BIN$(<Zahl>)

    BYTE(<Zahl>,<Byte>)

    CALL <Adresse>,<Bank>

    CLS [<Farbe>]

    DEC(<Zahl>)

    DEFPROC "<Prozedurname>" [,<Variable 1> [,<Variable 2> ...]]

    ENDPROC [<Rückgabewert>]

    EVERY <Zeit> [,<Programmzeile>]

    FAST

    FCM CHARDEF <Zeichennummer>, <Zeile>, "<String>"

    FCM CLS <Zeichennummer>

    FCM GETSCR <Speicherplatz>

    FCM LOAD "<Dateiname>" [, U<Laufwerk>]

    FCM OFF

    FCM ON

    FCM PUTSCR <Speicherplatz>

    FCM SAVE "<Dateiname>" [, U<Laufwerk>]

    FCM TEXT <x>, <y>, "<String>"

    FCM TEXT <x>, <y>, <Zeichennummer>

    FCSPRCOLOR <Sprite>, <Farbwert>, <Rot>, <Grün>, <Blau>

    FCSPRCOPY <Sprite1>, <Frame1>, <Sprite2>, <Frame2>

    FCSPRCOPY <Sprite1>, 0, <Sprite2>

    FCSPRDEF <Sprite>, <Frame>, <Zeile>, "<String>"

    FCSPRFLIP <Sprite>, <Frame> [, <Modus>]

    FCSPRFRAME <Sprite>, <Frame>

    FCSPRITE <Sprite>, 0

    FCSPRITE <Sprite>, 1, [[[[<Transparenz>] , <Priorität>] , <x-Ausdehnung>] , <y-Ausdehnung>]

    FCSPRITE CLR

    FCSPRLOAD "<Dateiname>" [,U<Laufwerk>]

    FCSPRSAVE "<Dateiname>" [,U<Laufwerk>]

    FILL <x>, <y> [, <Modus> [, <Farbe>]]

    GETSCR <Speicherplatz>

    HOME

    INFO

    INK <Farbe>

    LOCAL <Variablenname1> [, <Variablenname2>] ...

    MADD <Adresse> [,<Integer>]

    MAN

    MODE <40|80>

    MSUB <Adresse> [,<Integer>]

    PALETTE LOAD "<Dateiname>" [, U<Laufwerk>]

    PALETTE SAVE "<Dateiname>" [, U<Laufwerk>]

    PAPER <Farbe>

    PAUSE <Zeit>

    PEEK[@] <Adresse>

    PETSCR(<Byte>)

    PROC "Prozedurname" [, Argument1] [, Argument2] ...

    PUTSCR <Speicherplatz>

    RESET

    RFCMTEXT(<x>, <y>)

    RLEVEL(0)

    RPROC(0)

    RTEXT(<x>,<y>,<Modus>)

    SCRPET(<Byte>)

    SHL <Var%|Var&> [, <Stellen>]

    SHR <Var%|Var&> [, <Stellen>]

    SLOW

    SPRCOPY <Sprite1>, <Frame1>, <Sprite2>, <Frame2>

    SPRCOPY <Sprite1>, 0, <Sprite2>

    SPRDEF <Sprite>, <Frame>, <Zeile>, "<String>"

    SPRFLIP <Sprite>,<Frame> [,<Modus>]

    SPRFRAME <Sprite>,<Frame>

    SPRLOAD "<Dateiname>" [,U<Laufwerk>]

    SPRSAVE "<Dateiname>" [,U<Laufwerk>]

    SUB <Var&|Var%> [, <Integer>]

    SYNC <Rasterzeile>

    TEXT <x>,<y>,<Screencode>

    VIC4

  • Endlich mal ein Grund den Mega65 wieder aus der Versenkung zu holen :D


    beim MEGA65 oder Nexys-Board muss die ROM-Datei in MEGA65.ROM umbenannt werden.

    Nö ... man muss sein normales Rom dafür nicht rausschmeißen, einfach ne Zahl dahinter, z.B. MEGA653.ROM und dann die jeweilige Zahl beim booten festhalten (in diesem Fall die "3") ;)


    Ich bin gespannt, teste ich am WE mal, EVERY und AFTER sind im Lokomotive Basic schon klasse :)

  • Ist schon korrigiert und kommt im nächsten Update. :)

    :thumbup:



    Nur dort sind sie im Zeichensatz (FONT B)! ;)


    Das BASIC 65-Design (FONT C) hat dafür alle PETSCII-Zeichen, so ist für jeden was dabei. :)


    Kann man aber auch dort mit FONT B auf Umlaute umschalten. ;)

    Könnte man dann ja in einem Handbuch "2.0" evtl. mal mit erwähnen :D


    Sonst noch aufgefallen : im 3(,5)Mhz Modus nimmt sich der Mega65 alle ca. 10 Sekunde mal ne Auszeit, das passiert im 40Mhz Modus nicht ...


    Mein Testprogramm :


    10 cls

    20 every 5,1000

    30 print" ";

    40 goto 30

    1000 print"X";

    1010 return


    :nixwiss:

  • Danke! Ich kann es auch im Emulator reproduzieren.


    Da kommt sich vermutlich bei 3.5 MHz der "Every-Timer" gelegentlich mit dem Scrolling in die Quere. Bei 40 MHz läuft es super durch.

  • Hi Snoopy,


    das ist ja mal Klasse. "Ich weis was du am Wochenende getan hast" HE, he, he, he

    Das neue Meisterwerk von Regisseure Snoop.


    Eine Frage hätte ich denn noch - als ich mir die Befehlsliste auf die schnelle durchgelesen habe sind mir die Befehle DEFPROC und PROC aufgefallen.

    Welche unterschiede gibt es denn da. Laut Handbuch habe ich da jetzt kein großer Unterschied festgestellt.

    Hat sich erledigt diese Frage


    Auf jedenfall freue ich mich auf das Testen.

    Ich hoffe du bist dann genau so schnell mit dem Update wie GoDot. :roll2:

  • Snoopy


    Danke, nach dem Update ist "@" ok :)


    Kann man es noch einbauen dass man mit DIR U12 den Inhalt der SD Karte sehen kann ? Das gibt nämlich nur einen "device not present error" aber mit MOUNT"TEST.D81",U12 kann ich trotzdem darauf zugreifen, U12 kennt er also offensichtlich :)

  • Kann man es noch einbauen dass man mit DIR U12 den Inhalt der SD Karte sehen kann ? Das gibt nämlich nur einen "device not present error" aber mit MOUNT"TEST.D81",U12 kann ich trotzdem darauf zugreifen, U12 kennt er also offensichtlich :)

    Ich habe glaube ich noch so um die 10 Bytes frei. :D


    Ich habe schon gekürzt wo ich konnte. Das Directory der SD-Karte ist dem zum Opfer gefallen. Das habe ich fast nie benötigt und hat relativ viel Platz im ROM belegt. Irgendwo musste ich sparen. ;)

  • Ich habe glaube ich noch so um die 10 Bytes frei. :D


    Ich habe schon gekürzt wo ich konnte. Das Directory der SD-Karte ist dem zum Opfer gefallen. Das habe ich fast nie benötigt und hat relativ viel Platz im ROM belegt. Irgendwo musste ich sparen. ;)

    Hmmm, schade. Ich arbeite eigentlich NIE mit dem Freezer (ich hasse das Ding) aber dann bleibt mir wohl nix übrig ;)


    Noch eine Verständnisfrage : sind die Spritedefinitionen SPRSAVE/SPRLOAD mit irgendeinem Sprite Editor kompatibel ?

  • Hab endlich verstanden wieso der Basic Compiler noch nicht fertig ist. Ist ja logisch das erst das Basic für fertig sein muss.

    Wo nix, kann nix compiled werden.^^

    Das wird 2048 mal ne geile Kombi. Das Datum passt ganz gut, da bin ich Rentner und kann den

    ganzen Tag tippen.