Junior Computer ][

  • Auch bei Commodore ist während dem Laden und Schreiben von/auf Datassette der Interrupt deaktiviert.

    Das wird den gleichen Grund haben. :)

    Naja, ganz deaktiviert ist er nicht. Er wird nur anders aufgerufen. Sonst würde die Uhr komplett stehen bleiben. Das tut sie aber nicht. Sie geht dann "nur" ungenau. Es kann aber sein, dass bestimmte Teile der IRQ-Routine nicht aufgerufen werden, wenn die Kassette aktiv ist. So genau weiß ich das nicht mehr.

  • Sollte das eigentlich ein Scherz sein? Natürlich ist das Aufzeichnungsformat kompatibel.

    klaly fragte, ob das von mir für den Junior ][ geschriebene Aufzeichnungsformat mit dem PET, C64 oder VC20, etc. kompatibel ist. Ist es nicht. Kann ich guten Gewissens so sagen, hab es ja schließlich selber gecoded. Was sollte also daran jetzt ein Scherz sein?

  • Sollte das eigentlich ein Scherz sein? Natürlich ist das Aufzeichnungsformat kompatibel.

    klaly fragte, ob das von mir für den Junior ][ geschriebene Aufzeichnungsformat mit dem PET, C64 oder VC20, etc. kompatibel ist. Ist es nicht. Kann ich guten Gewissens so sagen, hab es ja schließlich selber gecoded. Was sollte also daran jetzt ein Scherz sein?

    Sorry, da war ich im falschen Kontext. ;)

  • Hallo zusammen,


    nach ein paar Wochen Abstinenz im Computer-Basteln habe ich in der letzten Woche mir einen zweiten Junior 2 auf der aktuellen PCB-Version gebaut, diesmal mit kleinen SMD-Tastern. Nach dem ersten Einschalten leuchtete zwar wie erwartet das Display und zeigte plausible Hex-Werte an, jedoch nahm der Junior 2 keinerlei Tastenbefehle entgegen. :(


    Spoiler: Wie sich herausstellte, lag der Fehler im Platinendesign! Ich bin damit wohl der erste, bzw. der einzige, der SMD-Taster verwendet hat. Ansonsten wären hier bestimmt schon mehr Fehlermeldungen. Aber der Reihe nach...



    Fehlersuche war also angesagt...


    Die beiden Tasten, die zum 556 gehen, funktionierten. Die NMI-Taste ließ die CPU (ohne initialisierten NMI-Vektor) abstürzen und beendete das Multiplexen des Displays, die RST-Taste holte den Rechner wieder ins Leben zurück und das Display sah wieder normal aus. Weitere Tasten funktionierten jedoch zu keinem Zeitpunkt.


    Als ersten Schritt habe ich erstmal alle ICs von meinem ersten Junior 2 eingesetzt, in der Hoffnung, dass ein Chip auf der neuen Platine vielleicht fehlerhaft sei. Mit den neuen Chips eingeschaltet: Gleiches Resultat, keine Tasteneingaben möglich...


    Hmmm, erstmal rausbekommen, auf welcher Seite des RIOT denn der Fehler liegt. Ist es die Display- und Tastaturmatrix mit dem 74145 und dem ULN2003 oder arbeitet der CPU-Teil vielleicht nicht korrekt? Vielleicht arbeitet das RAM auch fehlerhaft und erzeugt dieses Fehlerbild...


    Um einen Fehler im CPU-Teil auszuschließen, habe ich eine halbfertige Version meines XLink-Adapters angeschlossen und den Junior 2 wieder gestartet. Und mit dem Adapter war ein Beschreiben und Lesen des JC2-Speichers problemlos möglich. Ich konnte auch die gerade im Display angezeigte RAM-Adresse mit neuen Werten befüllen und das Ändern des RAM-Inhalts im Display verfolgen. Für mich war also klar: Der CPU-Teil ist in Ordnung und ich verlagerte die Suche auf die Port-Seite des RIOT in den Tastatur-Teil.


    Ich habe daraufhin die Leitungen der Tastaturmatrix ohmsch durchgeklingelt und festgestellt, dass die Taste 5 dauerhaft Durchgang hat. Oha, sollte eine fehlerhafte SMD-Taste den Fehler verursachen? Also fix die Taste ausgelötet und nochmal im ausgebauten Zustand durchgemessen: Diesmal alles okay, Taste arbeitet einwandfrei. Nanu? Den Junior 2 ohne die Taste 5 eingeschaltet und getestet: Auch hier war jetzt alles okay soweit...


    Aber wieso hatte die Taste dann im eingelöteten Zustand Durchgang? Ein Blick auf die Platine bringt Klarheit:



    Dazu zuerst ein paar Hinweise zum Aufbau der SMD-Taster: Diese haben vier Anschlüsse, von denen jeweils zwei immer miteinander verbunden sind. Im Bild wären das jeweils die beiden Anschlüsse auf der rechten und linken Seite. Ein Tastendruck verbindet nun diese beiden Seiten miteinander.


    Wenn man sich die Platine nun genau anschaut, dann geht die Leiterbahn von rechts oben kommend zwar auf den Anschluss links unten, aber auch der Anschluss rechts oben wird durchfahren und verbindet die Anschlüsse rechts oben mit links unten!


    Wird jetzt ein Taster eingelötet, dann besteht folgende Verbindung: Linke Seite, Anschluss links unten, über die Leiterbahn auf den Anschluss rechts oben, von dort intern im Taster auf den Anschluss rechts unten. Damit sieht es dann für den Junior 2 so aus, als wenn die Taste dauernd gedrückt wäre...


    Wieso geht die Leiterbahn überhaupt durch das Pad oben rechts? Wurden nicht alle Pads des Taster-Footprints mit Namen versehen? Wurde kein Design Rule Check gemacht, welcher die Abstände bemängelt hätte?


    Wie kommt man nun am schnellsten raus aus der Misere?


    Ich habe einfach den Anschluss oben rechts vom Taster abgeschnitten und den neuen Taster (ich bin beim Auslöten nicht zimperlich gewesen...) mit nur drei Anschlüssen befestigt.



    Nicht schön, aber funktionell...


    In einer überarbeiteten Version der Platine sollte mindestens bei dieser Leiterbahn auf ausreichend Abstand geachtet werden. Nein, bei jeder Leiterbahn sollte auf ausreichend Abstand geachtet werden. Aber dafür ist der DRC im Layout-Programm da, den man gerne mit etwas größeren Werten (so ab 0,4 mm aufwärts) versehen kann und darf...


    Ansonsten sind diese Tasten eine ganz nette Alternative, wie ich finde.



    Randnotiz: Im Hintergrund des ersten Bildes kann man auch die LED-Anzeigen sehen. Reichelt hat mir diesmal für den Typ 'SC 52-11 RT' zwei unterschiedliche Typen mit unterschiedlichen Helligkeiten geliefert. Normalerweise wird der Typ "SC52-11SRWA" geliefert, diesmal waren im Beutel aber ein paar "SC52-11SURKWA" (und ich habe es bei Einlöten nicht gemerkt). Die noch eingelötete SURKWA-Anzeige ist so dermaßen verdammt hell, ideal wenn man Filterscheiben verwenden will. Die kommt zwar hier auf dieser Platine wieder raus, aber ich glaube das wird mein neuer Vorzugstyp... :)


    Gruß

    Thomas

  • Wenn man sich die Platine nun genau anschaut, dann geht die Leiterbahn von rechts oben kommend zwar auf den Anschluss links unten, aber auch der Anschluss rechts oben wird durchfahren und verbindet die Anschlüsse rechts oben mit links unten!

    AUTSCH !!!! :fpa:


    Ich hab das soeben im Layout geändert!


    Ist aber echt seltsam, dass das Layoutprogramm diese Verbindung zugelassen hat. Sollten ja eigentlich verschiedene Netze sein.


    Vielen Dank Thomas !!!


    Poste doch bitte mal ein Vollbild von deinem Junior mit den SMD Tastern. Bin gespannt wie das aussieht.

  • Sieht echt schick aus mit SMD Tastern. Ich muss wohl doch noch ein Board so aufbauen.

    Passt jetzt der Einschalter bei dir bündig zum Rand, oder steht der noch leicht über?


    Edit: Vieleicht sollte man noch für die STEP LED zusätzlich eine SMD LED vorsehen.

  • Passt jetzt der Einschalter bei dir bündig zum Rand, oder steht der noch leicht über?


    Edit: Vieleicht sollte man noch für die STEP LED zusätzlich eine SMD LED vorsehen.


    Der Einschalter passt jetzt sehr gut. Der Rand der Platine steht ganz leicht (so 0,5 mm) über. Ich denke, das ist in Ordnung...


    Für die STEP-LED noch zusätzlich Pads dazu basteln? Ich glaube, da ist nicht mehr so viel Platz. Oder man lötet einfach eine SMD-LED im Format 0603 auf die Pads der 3 mm-LED. Oder vielleicht eine 1,8 mm-LED statt der 3 mm-LED... Aber auch die jetzt verlötete 3 mm-LED passt gut zu den Tastern.


    Ich habe übrigens auf der Unterseite einen 3,3 k-SMD-Widerstand zwischen Pin 1 und Pin 2 von JP1 gelötet. So spare ich mir den Jumper, der normalerweise auf JP1 1-2 sitzt...


    Gruß

    Thomas

  • Ich habe übrigens auf der Unterseite einen 3,3 k-SMD-Widerstand zwischen Pin 1 und Pin 2 von JP1 gelötet. So spare ich mir den Jumper, der normalerweise auf JP1 1-2 sitzt...

    Das hatte ich in einem früheren Post auch schon mal vorgeschlagen, aber wieder vergessen. Ich denke, den Pulldown Widerstand werde ich auch gleich noch im Layout unterbringen, dann kann auch eine Zusatzplatine nach Bedarf die Adressdekodierung vornehmen.


    Bzgl. LED, eine 0603 müsste eigentlich problemlos lötbar sein, da die Pads etwa 0,6mm auseinander liegen.

  • Gerade bin ich mit dem Datasetten Code so weit gekommen, dass ich Start- und Endadresse der zu Sichernden/Ladenden Daten angeben kann. Somit konnte ich jetzt zum Testen mal das EhBasic von $B000 mit seinen 12KB auf Kassette speichern und an $2000 wieder laden.



    Davor hatte ich jetzt am Wochenende schon fortlaufende Blocknummern vor jedem 256 Byte Block und eine durch XOR erzeugte fortlaufende Prüfsumme, die nach jedem Block geschrieben wird eingefügt, womit eigentlich eine recht gute Fehlerprüfung vorhanden ist.


    Da vor der Datei jetzt gerade 6x256 Bytes Synch Marker geschrieben werden kamen also insgesamt 13920 Bytes auf das Band. Bei einer Schreib-/Lesegeschwindigkeit von 37 Sekunden kommt man somit auf 376 Bytes/s oder 3008 Baud, was jetzt für die Datasette garnicht so übel ist.

    Jetzt fehlt nur noch der Header vor den Daten (Dateiname, Start-/Endadresse, evtl. Folgedateien), den ich irgendwann diese Woche noch einfügen werde. Der Rest ist dann hoffentlich auch bald getan, so dass ich dann demnächst eine ROM Version 1.0 bereitstellen werde. Wie schnell ich dann noch die Load und Save Befehle im EhBasic integriert bekomme kann ich jetzt allerdings noch nicht sagen. I will do my very best...

  • Supertape wäre vielleicht ein alternatives Kassettenformat mit 3600 und 7200 Baud.


    Ich habe da noch einen über 25 Jahre alten Code für meinen Junior (1 MHz, geänderte Memory-MAP, CP/M-ähnliches Betriebssystem), den ich hier gerne teile.

    Der Code hat seinerzeit recht zuverlässig mit einem handelsüblichen Kassetenrekorder funktioniert, ist aber aktuell nicht mehr in Nutzung, da ich bei mir die Kassettenschnittstelle entfernt habe. Die Assembler-Syntax ist meine eigene, aber leicht anzupassen.


    Dietrich

  • Supertape, das war doch der Versuch, einen schnelles "Tape Standard" für viele Compuer zu machen, von der c't Zeitschrift.

  • So ist es.


    Dietrich

    Meine Computer: Elektor Junior, EPSON HX-20, Robotron PC1715, Poly-Computer 880, Schneider CPC464, APPLE II+, VIKTOR V386PX

    Mein Betriebssystem: CPM-65

  • Hallo Dietrich vielen Dank für die Datei. Wenn ich den Code vor 4 Wochen schon gehabt hätte, wäre ich nicht im Traum darauf gekommen, da selber was zu stricken. Mittlerweile bin ich aber so weit, dass ich die meisten Dinge fertig habe und alles fehlerfrei läuft, so dass ich bei meinem Code bleiben werde. Ich hoffe, du bist mir da nicht böse.

    Bei der Geschwindigkeit könnte ich natürlich auch noch was drehen, da ich mit meinen Timings recht hoch angesetzt habe. Allerdings habe ich gerade eine 100% Rückleserate, die ich durch höhere Geschwindigkeiten gerade nicht gefährden möchte. Ich werde dann für den finalen Code aber auch noch ein wenig damit experimentieren, 3600 Baud sind da sicherlich locker drin, dazu müsste ich wohl bloss von 255/128uS auf 240/120uS runter gehen.

    Jedenfalls läuft die Übertragung ja schon mal wesentlich schneller als bei der Original Commodore 1541 Floppy, wo es ja meines Wissens nach nur 300 Bytes/s waren.

  • Kein Ding. Du hast da ein Super-Projekt 👍

    Meine Computer: Elektor Junior, EPSON HX-20, Robotron PC1715, Poly-Computer 880, Schneider CPC464, APPLE II+, VIKTOR V386PX

    Mein Betriebssystem: CPM-65

  • CP/M-65 for Junior? Interesting!

  • Hier ist jetzt mal die (hoffentlich) finale Version der Tape Routine, bevor sie in das System ROM eingepflegt wird.


    Laden der Test.bin Datei mit LM und starten mit 0200G. Beim Speichern und Laden muss jetzt eine Zahl (1..9) oder das Asterisk Zeichen * eingegeben werden. 1..9 erzeugt beim Speichern eine Datei mit Namen FILENAME_N, * eine unbenannte Datei. Die Namen können natürlich später an der Kommandozeile eingegeben werden.

    Beim Laden wird mit * wie gewohnt die nächste gefundene Datei geladen und mit 1..9 wird solange gesucht, bis die Datei FILENAME_N gefunden wird.

    Beim Speichern wird nun gerade der 1KB Adressraum $2000..$2200 gespeichert. Wenn dort also bereits ein Programm eingegeben oder geladen wurde, könnt ihr das mal zum Testen nehmen. Ich hab da einfach die Sound Demo (auch nochmal in der ZIP Datei enthalten - laden mit LM und starten mit 2000G) dort hin geladen und dann die Dateien 1..3, *, 4..6 gespeichert.



    Nach dem zurückspulen kann dann wie oben gezeigt z.B. die Datei FILENAME_4 gesucht und geladen werden.


    Mittlerweile habe ich die Pulse Timings auf 240uS und 120uS heruntergesetzt, somit komme ich im Schnitt auf etwas 456 Byte/s oder 3652 Baud. Mehr wäre zwar sicherlich möglich, ich möchte jetzt aber nicht die Geschwindigkeit weiter auf Kosten der Schreib-/Lesequalität erhöhen.


    Um Tests von euch und eventuelle Rückmeldungen wäre ich dankbar. Ansonsten werde ich dann den Code in das System ROM einfügen und hoffentlich nächste Woche veröffentlichen.


    Cheers


    Jörg

  • So, nach etlichen Versuchen, EhBasic die Geheimnisse seiner Parameterabfrage zu entlocken, bin ich nun endlich so weit, dass EhBasic nun auch Load und Save komfortabel beherrscht.



    Das ganze hat auch dazu geführt, dass ich mir Gedanken über ein einfaches Treiberkonzept machen musste, um verschiedene Laufwerke anzusprechen, denn der bisherige Ansatz war da einfach zu monolithisch. Das wiederum hat zu einer völligen Umkrempelung des Codes geführt, weshalb nun mal wieder kein altes Programm ohne Änderung läuft. :wacko:


    Aber es hat sich gelohnt. 8-)


    Z.B. können jetzt von zukünftigen Erweiterungskarten direkt aus dem dortigen ROM Treiber Deskriptoren geladen werden, die dann jeweils eine Input, Output und Command Routine besitzen. Dadurch wird die Ansteuerung neuer Hardware wesentlich flexibler. Das ganze ist noch nicht ganz fertig, wird aber den bisherigen Code nun nicht mehr ändern oder verschieben.


    Daher ist die Liste der bisherigen Standardroutinen und deren Einsprungpunkte nun auch gerade von mir in der Mache.


    In Basic können nun mit


    Load [device] [ , "Filename" ]

    und

    Save [device] [ , "Filename" ]


    Programme geladen und gespeicher werden.


    Dabei ist Device 0 der XModem Treiber und Device 1 der Datasettentreiber. Da XModem keinen Dateinamen braucht, ist dieser für Device 0 verboten.

    Es geht also nur Load 0, bzw. Save 0. Ausserdem kann bei Device 0 die Nummer gänzlich weggelassen werden, somit ist Load und Load 0 identisch.

    Bei allen anderen Storage Devices muss der Dateiname angegeben werden. Dieser kann aber auch Leer sein oder einen Stern beinhalten, was das gleiche bedeutet.


    Ich werde jetzt noch ein paar Befehle für I2C- und VIA-IO, bzw. Lesen und Setzen der Uhrzeit und des Datums in den Basic Interpreter einfügen. Sobald das fertig ist, gibt es dann von mir die neuen ROMs (Version 1.0.1 und EhBasic 2.23), die dann auch ausschließlich miteinander arbeiten.


    Apropos Uhrzeit. Norbert hatte mich zu Recht gefragt, ob es Möglich ist die Uhrzeit schon jetzt zu ändern, schließlich war ja mal wieder eine Zeitumstellung.


    In der BIOS Version 1.0.0 geht das im Monitor mit E27E G für die Uhrzeit, E281 G für das Datum oder E27B G für Datum und Uhrzeit.


    In der neuen Version hat sich das leider wie gesagt alles geändert. Dafür ist der Code nun viel aufgeräumter und optimierter.


    Soweit erst mal die Info für das kommende ROM Update.


    Cheers


    Jörg

  • Nachdem der Bestückung meiner Junior Platine Rev.3.1b hatte ich die guten Marquardt-Taster vom alten Rev.3a auf das neue Board umgezogen. Aber was mit dem alten Board ohne Tasten anfangen? Noch einen Satz Marquardt Taster zu kaufen war mir eine zu hohe Investition. Klar, meist arbeitet man eh über das Terminal. Ich entschied mich daher für ein China-Bestellung, die auch heute endlich ankam: 100 Taster mit 2 Anschlußpins für 2,69€. Ich habe mich gleich ans Löten gemacht, siehe Bild im Anhang. Ist meiner Meinung nach eine preiswerte Lösung bei der Bestückung mehrerer Boards. Die Pins im RM minimal größer als 6mm habe ich alle nochmal nach unten am Tastergehäuse entlang nachgebogen (Tischplatte tut's auch zur Not) und dann passten sie wunderbar in die für die Marquardt-Taster vorgesehenen Löcher. Der Nebeneffekt ist, dass man auch noch schön die Tastenbeschriftungen auf der Platine lesen kann. Eine 50-Cent-Lösung, die sich gelohnt hat, finde ich.


    Viele Grüße,

    Norbert

  • @2ee,
    ich hab den Überblick verloren :(
    Meine IO-Platine ist nun nahezu fertig.


    Welche Firmware, bzw welches ROM muss wo gesteckt werden und was muss man da rein programmieren ?

    U2 27256 auf Junior Computer ][ Board: was in welcher Version muss da rein ?
    U8 28C256 auf IO-Board: was in welcher Version ?

    Vielleicht kannst da aktuell was zusammen stellen.
    Dann wäre noch eine Adressübersicht für JC ][ und auch IO-Board sehr schön sowas zu haben.


    mfG. Klaus Loy

  • Hallo klaly und natürlich auch alle anderen,


    dein (euer) Wunsch wure erhört. Ich gebe jetzt die erst mal letzte Version des Junior ][ BIOS und des erweiterten EhBasic raus. Dann wird es wohl für dieses Jahr eine kleine Pause geben, bevor ich mich an die SPI Schnittstelle und somit der SD-Karten Unterstützung mache.


    In der Zip-Datei sind jetzt wie gehabt eine 8K und eine 32K Version des BIOS Version 1.0.1 (ehemals Print Monitor).

    U2 27256 auf Junior Computer ][ Board: was in welcher Version muss da rein ?

    Wenn vorhanden, nehmt dafür ein 28C256 EEPROM. Ich möchte eigentlich von der 8K Version für 2764 EPROMs langsam weg, so dass in Zukunft nur noch eine Version gepatcht werden muss.


    U8 28C256 auf IO-Board: was in welcher Version ?

    Hierfür liegt die EhBasic Version 2.23 in der Zip.


    ACHTUNG: Das IO Board wird mit der aktuellen BIOS Version 1.0.1 nur mit der aktuellen EhBasic Version erkannt. Alle alten Versionen sind somit obsolet !!!

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    Denkt beim IO Board bitte daran, eine Lötbrücke für die Basis-Adresse zu setzen. Welche ist egal, nehmt aber vielleicht einheitlich K2. Auf der Junior Hauptplatine muss der DIP Schalter auf $80 = ON, $A0 = OFF, $C0 = OFF stehen, sonst startet der Rechner mit eingesteckten IO Board nicht.

    Wenn $80 nicht auf ON steht, verschwendet ihr in Basic 8KB RAM, falls ihr ein 64KB oder 128KB SRAM eingebaut habt.


    Es gibt nun im BIOS eine SWITCH_TO_RAM und eine SWITCH_TO_ROM Routine, um das Language ROM aus- und einzublenden. Somit kann für Maschinenprogramme das durch das ROM überdeckte RAM wieder vollständig nutzbar gemacht werden. Ich habe auf diese Art und Weise auch den Basic Interpreter erweitert und getestet.



    Da vermutlich alle noch ein IO Board der Revision 1 oder 1A haben:

    -------------------------------------------------------------------------------------------------


    Lötet bitte eine 1N4001 oder 1N4004 zwischen die (K1) Relais-Kontakte 1 und 7 mit der Kathode an Pin 1, sonst klebt euch der Schließerkontakt nach ein paar Schaltvorgängen. BITTE NICHT VERGESSEN !!!


    Dann wäre noch eine Adressübersicht für JC ][ und auch IO-Board sehr schön sowas zu haben.


    Ich hab die bereits vorhandene (Hardware) Adressbelegungsliste nochmals mit in die Zip-Datei gepackt. Für das IO Board gibt es Aufgrund der frei wählbaren Basisadresse sowas (vorerst) nicht. Die BIOS Routinen greifen auf die einzelnen Bausteine mittels Y-Register Indexed Indirect Befehlen (LDA/STA (IOBase),Y ) zu. Ihr solltet deshalb die entsprechenden Routinen nutzen. Für die User VIA könnt ihr aber auch die einzelnen Register auf die eben genannte Art und weise lesen und schreiben, wobei IOBase die Zeropage Adresse $0014 ist und der Wert des Y-Registers mit den in der Nachfolgend erwähnten Liste mit VIA_ beginnenden Konstanten geladen werden muss.


    Also z.B.


    LDY VIA_PORTA

    LDA (IOBase),Y


    um das Port A Datenregister zu laden.


    Für die BIOS Routinen habe ich jetzt mal eine (wenig bis noch garnicht kommentierte) Liste der Einsprungadressen zusammengestellt.

    Die hinzugefügten EhBasic Befehle sind ebenfalls in der Zip-Datei. Ihr könnt jetzt mit mit einem Befehl ( PORT ) sowohl die zwei 8-Bit VIA Ports A und B, als auch die I2C Schnittstelle ansprechen.

    Ich werde da auch noch ein paar kleine Demo-Basic-Programme bereitstellen.


    Weiterhin sind wie ja bereits erwähnt die LOAD und SAVE Befehle, sowie ein LOCATE für die Cursor Positionierung und ein DELAY Befehl hinzugekommen.


    Im Monitor gibt es jetzt wie ebenfalls schon erwähnt die Befehle LT (Load from Tape) und ST (Save to Tape). Eine ergänzende Beschreibung für diese Befehle muss ich noch für ein paar Tage schuldig bleiben, ich werde aber jetzt fleißig alles vervollständigen und zusammenschnüren.


    Viel Spass


    Jörg

  • Meine IO-Karte funktioniert nun auch schon ein bisschen.
    Es fehlen mir noch die zwei VIA Bausteine :(
    Ich dachte ich hätte welche, aber es waren 6532 er IO/Timer/Mem Bausteine

    Aber mein Basic läuft :)

    Fragen an Jörg:
    1. welcher IO-Bereich sollte an den Lötjumpern gesetzt werden: K2/K3/K4 ?
    2. Was ist EhBasic eigentlich ?
    3. Gibt es dort auch PEEK und POKE ?
    4. Mit welchem Befehl komme ich zum Monitor zurück ?

    mfG. Klaus Loy

  • Hallo klaly


    1. welcher IO-Bereich sollte an den Lötjumpern gesetzt werden: K2/K3/K4 ?

    nimm einfach K2.


    2. Was ist EhBasic eigentlich ?

    Enhanced Basic wurde von Lee Davison entwickelt, der leider bereits 2013 im Alter von 49 Jahren verstorben ist. Sein Basic wurde seit dem nur wenig weiterentwickelt. Ich habe mich für sein Basic entschieden, da es gut (auch im Source Code) dokumentiert ist. Die EhBasic Dokumentation hatte ich jetzt in meiner letzten ZIP leider nicht dazugepackt, was ich jetzt aber hiermit nachhole.

    HansOtten hat auf seiner Seite auch einiges dazu gesammelt. http://retro.hansotten.nl/6502-sbc/lee-davison-web-site/

    Ich habe übrigens gleich den Patch für Groß-/Kleinschrift mit eingepflegt. Zu beachten ist hier, dass Variablen somit case sensitive sind. M und m sind also verschiedene Variablen.

    Ich habe mir auch erlaubt, die bestehende Version 2.22 auf 2.23 zu erhöhen, um einen Unterschied zu den im Inernet erhältlichen anderen Versionen zu verdeutlichen. Ich hoffe Lee verzeiht mir das.


    3. Gibt es dort auch PEEK und POKE ?

    Ja gibt es. Und ebenfalls DEEP und DOKE für 16 Bit Werte.


    4. Mit welchem Befehl komme ich zum Monitor zurück ?

    Du kannst entweder die ST(op) Taste auf dem Junior drücken, oder im Basic CALL $E003 eingeben, was den Kaltstartvektor des Monitors aufruft. Um dann ohne Datenverluste wieder zurück zum Basic zu kommen springst du zu Adresse $0000 in dem du 0G am Prompt eingibst. Wenn du Basic aber komplett neu starten und initialisieren möchtest gibst du B000G ein.



    Übrigens ist leider ein Nachteil von EhBasic, dass die Befehls Token ab dem Wert $80 beginnen und somit nur 128 Befehle möglich sind. Ich habe jetzt bereits einige Befehle für eine zukünftig geplante Grafikkarte reserviert und eingefügt, damit sich bei den Token später nichts mehr verschiebt, sonst sind gespeicherte Programme nicht mehr startbar, da diese nicht im Klartext sondern tokenized gesichert werden. Man muss da leider für die Befehle, Funktionen und Operatoren eine bestimmte Reihenfolge einhalten, sonst könnte man einfach nach dem letzten Befehl einen weiteren dranhängen.

    Wie auch immer, jetzt sind leider nur noch eine Hand voll freier Token übrig, so dass eine weitere Befehlsvergrößerung fast unmöglich wird.


    Ein weiterer Nachteil ist, dass EhBasic leider manchmal Murks macht, wenn eine Zeile mit den Pfeiltasten editiert wird. Ausserdem war (ist) von mir geplant, noch einen MOD(ulo) Operator einzufügen, was sich leider als höchst kompliziert herausgestellt hat, da man, wegen verschiedener Ergebnistypen nicht so einfach im Assembler Code verschiedene Befehle (+ / * Int() ) aneinander reihen kann. Ich werde mich da aber noch irgendwie durchbeißen.