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.
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.
Das S-BASIC 65-ROM, eine "Demo-Diskette" und das Handbuch könnt ihr hier von meiner Seite hier runterladen:
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.
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.
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!
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