MFA Basic - Info's zum Basic Interpreter

  • Das Software-Paket "SP 1" enthält die Monitorerweiterung MAT 85+, die das Betriebsprogramm MAT 85 um 10 Kommandos ergänzt.

    Außerdem enthält das Softwarepaket ein Programm für einen EPROM-Programmierer, ein Programm "SPS" (Speicherprogrammierbare Steuerung) und einen BASIC-Interpreter.

    Das Softwarepaket ist in vier 2-KByte-EPROMs vom Typ 2716 gespeichert und belegt den Adreßraum ab Adresse 2000 bis 3FFF. Zum Betrieb des Softwarepaketes "SP1" ist das Betriebsprogramm MAT 85 erforderlich. Informationen darüber, wie die EPROMs bei Verwendung der 8-K-BFZ/MFA 3.1. bzw. der 16-K-Speicherkarte Speicherkarte BFZ/MFA 3.2. in die Sockel eingesteckt werden müssen, finden Sie im Anhang.


    Abhängig von der Verwendung der oben genannten Programmteile werden bestimmte RAM-Mindestbestückungen vorausgesetzt.

    Um die Monitorerweiterung MAT 85+ zu betreiben, muss mindestens der Adreßbereich F800 bis FFFF mit RAM bestückt sein.

    Für den EPROM-Programmierer gilt die gleiche Mindestbestückung.

    Will man das SPS-Programm verwenden, so muss zusätzlich der Adreßbereich EOOO bis E7FF mit RAM bestückt sein.

    Für die Arbeit mit dem BASIC-Interpreter muss außerdem der Adreßbereich 6000 bis 67FF mit RAM bestückt sein.


    Die Speicherbelegung ist im Bild 1 dargestellt.


    ---


    Mit dem BASIC-Kommando kann der BASIC-Interpreter aufgerufen werden.

    Zum Betrieb des Interpreters wird zusätzlich zur Speichermindestbestückung füt MAT 85+ ab der Adresse 6000 RAM-Speicher benötigt (siehe auch Bild 1). Die Obergrenze dieses RAM-Speichers ist beliebig. Weitere Hinweise zum Betrieb des BASIC-Interpreters entnehmen Sie bitte dem Kapitel 4.4.


    Aufruf und Handhabung:

    KMD+> B eintippen, "ASIC" wird ergänzt


    BFZ-STEUER-BASIC V2.4 Basic meldet sich

    READY und ist bereit, Befehle entgegenzunehmen

    >_

    (Eingabe von Befehlen}

    >QUIT QUIT CR eintippen


    KMD+> Rückkehr nach MAT 85+


    Fehlermeldungen:

    Ist ab Adresse 6000 kein RAM-Speicher vorhanden, so wird die Meldung


    *** KEIN RAM ***


    ausgegeben. MAT 85+ meldet sich mit seinem Prompt und ist bereit, weitere Kommandos entgegen zu nehmen.



    Peter

  • Tja, die Fehlermeldung habe ich schon mehrfach bekommen. Ich habe leider nur eine 8K RAM-Karte.


    HILFE: Hat jemand eine RAM-Karte übrig???? :tüdeldü:


    Ich sehe schon, das mit der VzEkC-MFA-64K-ROM/SRAM wird immer dringender 8-)

  • Ja. Aber ab 6000h ist schon blöd denn das liegt ja unterhalb der ersten 32k. Evtl. kann man so patchen, das er auch ab 8000h oder sogar E000h.


    Im Prinzip kann man auch die 8k Karte auf 32k umbauen.

    4x 6264. An die Chipauswahl A14+A13. An Basisadresse nur A15.

    A12+A11 direkt an die Rams.

    WE von Fassung an Chips.


    Nutzt aber ohne gepatchten Basic

    nichts..


    Peter

    github.com/petersieg

  • Inzwischen habe ich eine Idee, wie man auch nur mit einer 8K RAM-Karte zurecht kommen könnte:


    Wenn auf der Karte A15 aus der Dekoduerung herausgenommen wird, und die Adressbus A14 und A13 auf 1 setzt finden sich die 8K der Karte einmal an Adresse E000h - FFFFh und zusätzlich an 6000h - 7FFFh. Da der Basic-Interpreter den Bereich von 6000 bis 6FFF nutzt und der Monitor erst ab F000 RAM braucht, kollidiert das nicht. Nur das SPS käme mit dem BASIC in Konflikt - und das läuft ja nicht gleichzeitig.


    Die nötige Änderung auf der Karte ist minimal und reversibel - ein Beinchen von dem 7485 aus der Fassung rausholen und mit GND verbinden müsste reichen. Werde ich heute Abend mal probieren.

  • Wie angekündigt habe ich das probiert. Das Ergebnis ist etwas durchwachsen, das ist wie bei Radio Eriwan: Im Prinzip geht's ....


    Aber der Reihe nach: mit der Grundausstattung (nur eine 8K RAM-Karte) bekomme ich die bekannte Fehlermeldung:




    Hier jetzt die Modifikation, die mich heute morgen nicht schlafen gelassen hat:




    Im Endeffekt habe ich das Bit A15 deaktiviert und dem Comparator 7485 vorgegaukelt, dass dieses Bit immer mit dem DIP-Schalter übereinstimmt. Das bedeutet, dass das RAM sowohl an der Startadresse E000h zu finden ist, aber eben auch ab 6000h. Und das sollte für das BASIC reichen.


    Und es reicht:




    Und jetzt kommen die Probleme:

    Beim ersten Versuch, Basic zu starten, bleibt der Rechner hängen. Reset, erneuter Versuch - dann geht es.


    Wenn ich dann ein Miniprogramm starte, hängt er sich wieder auf. Nach Tastendruck lande ich wieder im Monitor. Und so dreht sich alles im Kreis.


    Ob das Problem jetzt an meiner RAM-"Lösung" liegt, oder ob mein ROM oder das RAM einen Knacks hat - das ist jetzt erst mal zu klären. Immerhin bietet der MFA mehr Unterstützung als die meisten anderen Rechner.

  • Das ist bei der Konfiguration prinzipiell natürlich möglich, aber wenn Deine Informationen stimmen (woran ich keine Zweifel habe) sollte das Basic nur den Bereich 6000-6FFF (E000-EFFF) nutzen, während der Monitor den Bereich F800-FFFF (7800-7FFF) nutzt. Da dürfte nichts kollidieren. Abgesehen davon, dass die beiden Programme ja nicht gleichzeitig laufen. Und beim Start sollte der BASIC-Interpreter seine Datenbereiche initialisieren und somit stabil laufen - eher könnte der Monitor beim Rücksprung Probleme haben, weil der Interpreter ihm irgendwas überschrieben hat...


    Na ja, ich werde noch ein bisschen testen. Und vor allem mal meine Eproms auslesen. Vielleicht finden sich dann schon Hinweise.

  • Tja, ich glaube, ich hab's. :fp:


    In dem Auszug oben habe ich gelesen "Obergrenze beliebig (max. 0FFF)" und habe das für eine Längenangabe gehalten, so dass ich auf den Bereich 6000 bis 6FFF gekommen bin.


    Tatsächlich ist da aber wohl die Adresse DFFF gemeint, denn an anderer Stelle habe ich gesehen, dass das Basic auch 32kb nutzen kann.


    Und dann kollidiert das natürlich. Beim Start testet das Basic den Speicher ab 6000, um das Ende festzustellen. Bei meiner Lösung geht es dabei bis 7FFF und legt dann in den obersten 280 Byte seinen Stack und seine Variablen ab - das ist aber gleichzeitig der Bereich unterhalb FFFF, wo auch der Monitor aktiv ist. Vielleicht passiert der Speichertest sogar destruktiv, und damit werden alle Einstellungen des Monitors gelöscht. Und da das Basic seine Ein-/Ausgabe wohl auch über die Monitorroutinen abwickelt knallt es dann.


    Es gibt also keine einfache Lösung. Entweder der umfangreiche Umbau von Peter, oder eine zweite RAM-Karte, oder das Basic patchen.


    Momentan bevorzuge ich eine Kombination von meiner Lösung und einem gepatchten Basic: Mit meiner Konfiguration muss ich nur die Stelle ändern, wo beim RAM-Test auf die Obergrenze D000 geprüft wird, und da ein 7000 draus machen.

    Die Änderung der Basis-Adresse dürfte deutlich aufwendiger werden.

  • Ich habe es schon gefunden. Sind aber zwei Stellen ;)


    Code
        LD HL, 6000
        CALL 2124
        CALL 3201
        DEC HL
        LD A,H
        CP E0
        JP C, L1
        LD HL, E000
    L1: LD SP, HL

    (Ich habe es in Z80 disassenbliert, weil ich das besser lesen kann).

    Die Routine 2124 prüft, ob an der Adresse HL RAM liegt und springt ggfs. mit einer Fehlermeldung zurück in den Monitor.

    Die Routine 3201 prüft das RAM ab HL und liefert in HL die erste Adresse zurück, wo kein RAM mehr liegt.

    Wenn H dann größer als E0 ist wird die Obergrenze auf E000 gesetzt, sonst auf den gefundenen Wert.

    Es muss also sowohl der Vergleichswert auf 70 und der Default Wert auf 7000 gesetzt werden.


    Zum Glück ist der RAM-Test nicht destruktiv, sonst würde das wieder schief gehen, denn er prüft nicht bis zur Maximalgrenze sondern bis zum Ende und testet dann erst, ob die Grenze überschritten ist...

  • So, kurzer Statusbericht.


    Ich habe die beiden Änderungen vorgenommen, ein Eproms gebrannt, und alles ausprobiert. Tadaa! Es klappt.


    Und netterweise alles mit Bordmitteln! Nur die Programmierspannung muss der geneigte Bastler noch hinzufügen (ich war vorsichtig und habe erst mal nur 25V angelegt).


    Die Schritte:

    1. Kopieren von 3000 bis 3FFF nach E000

    2. Ändern der beiden Bytes

    3. Vergleich alt/neu:


    4. Brennen eines 2716 Eproms

    5. Austausch des ROMs:

    6. Test:



    Das Programmieren hat übrigens erstaunlich lange gedauert. Man ist von modernen Eproms und Brenner verwöhnt. Vielleicht hat aber auch die niedrige Programmierspannung Schuld :grübel:


    Das ganze ist aber ziemlich akademisch, denn erstens ist dieses BASIC ziemlich schwach, und dann sind mit meiner Lösung eben noch nicht einmal 4K RAM frei. Aber es geht, und man kann mit wenig Aufwand in das BASIC reinschnuppern.

  • OK, bis man 4K eingetippt hat (wobei in den 4K auch die eigene Verwaltung des Interpreter drin sind, es ist also weniger) braucht es schon was Zeit.

    Mich stört auch eher die Leistung: Nur 16-bit Integerzahlen, keine oder kaum Funktionen, eine einzige Array-Variable afair etc.

    Aber man kommt wohl per peek, poke, in und out an die Hardware dran. Ist für so einen Rechner ja ganz praktisch.


    Das Patchen auf eine neue Basisadresse ist deutlich komplizierter, weil dann alle Zugriffe auf die eigenen Systemvariablen geändert werden müssen. Die liegen, soweit ich das bisher gesehen habe, alle im Bereich 6000 ff. Gehen tut das, ist aber um einiges aufwendiger.


    Und schöner wäre es, wenn man das dann für verschiedene Startadressen machen könnte. Z.B. auch für die kleine Ausstattung mit RAM ab E000 (dann spart man sich den Hardware-Patch).


    Aber das wird sich zeigen, wenn man mal alle Adressen rausgesucht hat, die angepasst werden müssen. Mal sehen, wann ich dazu komme. Die Hälfte habe ich ja schon analysiert...

  • Nach aktueller Zählung sind es 42 Stellen, wo auf die RAM-Basis bei 6000 (und einige folgende Adressen für Systemvariablen etc.) verwiesen wird.

    Ich muss die einzelnen Stellen noch auf Plausibilität prüfen; der Code ist gespickt mit Texten (relativ leicht zu finden) und Tabellen (schwerer ...), die vom Disassembler falsch interpretiert werden mit dem Ergebnis, dass nachfolgende Codeteile falsch dargestellt werden. Dann kann es passieren, dass Opcodes als Adresse gesehen werden und umgekehrt. Das Control-File für den Disassembler hat inzwischen ca. 1000 Einträge ....


    Das Umsetzen auf eine neue Startadresse (z.B. E000, damit ich das Ergebnis auch testen kann) dürfte relativ einfach sein. Mit einer Adresstabelle und einem kleinen Programm kann man das vermutlich auch so gestalten, dass man BASIC-Versionen für beliebige Startadressen auf Knopfdruck erzeugen kann.

    • Offizieller Beitrag

    Eine 32K RAM/32K ROM Karte war ja bereits im Gespräch.

    Aber Du hast völlig recht, eine mit 64K SRAM/64K Flash wäre deutlich besser.

    Wobei EPROM statt Flash natürlich besser passen würde, aber das ist dann ja nur noch eine Bestückungsfrage.

    Beides jeweils in 4K oder besser noch 2K Blöcken schaltbar wäre optimal.

    Das gibt dann ein anständiges Mäuseklavier. :)

  • Nun, wie so viele Dinge bei unserem Hobby, machen wir es:


    Weil wir es wollen,

    Weil wir es können,

    Weil es Spass macht..


    😀


    Ich brauche keine 64/64k Karte.

    Daher werde ich mir sowas nicht bauen.


    Es waren wohl generell zu wenig Romkarten bei den letzten Geräten dabei. Deshalb dürfte dafür Bedarf bestehen.


    Und an Rom kennen ich bis dato nur die 8k MAT85 ab 0000h und die 8k SP1 mit Zusatzfunktionen ab 2000h.


    Ram wird ab E000h mit 8k benötigt und Basic benötigt ohne Patch Ram an 6000h auch 8k.


    Ich werden nach meinem Urlaub zuerst den Hack von Georg nachbauen.


    Danach überlege ich noch ob ich meinen Umbau (4*8k) mache, oder mal eine neue Platine mache.

    Für letzteres muss ich dann mal nach einer Eagle Lib für die Steckerleiste Suchen.


    Ich spiele sogar mit einem absolut minimalistischen Gedanken:

    Einfach ein 32k Chip anschliessen mit CE über A15 und ein 7400.

    Einmal als ROM, einmal als RAM.

    Sind dann zwar 2 Steckplätze belegt, aber Platz ist ja da.. 🙃


    Da ich z.Z. noch 3 andere Projekte parallel habe.. So wie Zeit und Lust ist.


    Peter

    github.com/petersieg

  • Nachdem das System offenbar gut dokumentiert ist (ftp://ftp.informatik.uni-stuttgart.de/pub/cm/mfa8085/MFA.pdf), wundert mich ein wenig, das ihr Euch nicht einfach eine 64k-Flash/64k-SRAM-Karte macht, die ROM/RAM genau so zur Verfügung stellt, wie ihr das benötigt, statt dessen viel Zeit und Energie ins Disassemblieren/Patchen verwendet?

    Ich weiß Deinen Rat wirklich zu schätzen, auf den habe ich bei früheren Diskussionen schon gerne zurück gegriffen.

    Aber es ist tatsächlich auch eine sehr subjektive Sichtweise, was "einfach" ist und was "Zeit und Energie" kostet.

    Der Wunsch nach einer Karte, bei der man RAM und ROM an beliebigen Stellen - so wie man es braucht - einblenden kann hatte ich auch schon. Da ich aber die Werkzeuge nicht beherrsche und auch etwas die Platinenpreise fürchte ist das für mich eben nicht einfach.

    Dagegen komme ich bei der Analyse der Firmware wesentlich schneller zu einem Erfolg, und das kann ich auch machen, wenn ich mal wieder ein paar Tage krank im Bett liege wie Anfang der Woche.


    Eproms brennen finde ich übrigens immer noch irgendwie charmant. Das Löschen ist etwas nervig, aber das kann man organisieren.


    Und es geht hier ja nicht um Effizienz - dann ist der MFA definitiv das falsche System. Es geht um den Spaß; ich habe ja schon geschrieben, dass das BASIC nicht gerade einladend ist, dafür mache ich es nicht - aber das System mit überschaubaren Aufwand auch mit nur einer 8K-RAM-Karte ans Laufen zu bringen ist für mich Anreiz genug.


    Trotzdem danke ich Dir für solche gelegentliche Impulse - manchmal verrennt man sich ja wirklich, und dann ist sowas Anlass, noch mal über das Ziel und den Weg dorthin nachzudenken. ;)

  • Weil wir es wollen,

    Weil wir es können,

    Weil es Spass macht..

    Genau ;)


    Und deshalb habe ich die 42 Stellen jetzt mal angepasst (plus die beiden schon gefundenen, denn das Ende bei DFFF würde uns nichts nutzen), so dass das BASIC jetzt den Bereich von E000 bis EFFF nutzt. Damit gibt es zwar Schwierigkeiten beim Parallelbetrieb mit der SPS-Software, aber zumindest mich stört das nicht.


    Habe ich eben in zwei 2732 gebrannt (2716 sind hier schon etwas selten geworden) und ausprobiert, und bis jetzt läuft es stabil.


    Dabei habe ich meine Änderung an der RAM-Karte natürlich zurück gebaut; meine Konfiguration ist also:


    ROM-Karte:

    0000 - 1FFF MAT85

    2000 - 2FFF SP1 ROMs 1 und 2 Original

    3000 - 3FFF SP1 ROMs 3 und 4 gepatcht


    RAM-Karte:

    E000 - FFFF 8K RAM


    Hier die beiden geänderten ROMs:


    MFA_SP1_E000.zip


    Wenn das jemand mal ausprobieren möchte würde ich mich über positive wie negative Rückmeldungen freuen - typischerweise testet ja jeder etwas unterschiedlich.

  • Habe aber erstmal wieder ein Epromlöschgerät aus HK bestellt. Wird wohl drei Wochen dauern...

    Drei Wochen? Da kannst Du die EPROMs auch ins Freie legen; wenn das Wetter ein bisschen mitspielt sind Sie dann auch gelöscht 8o

  • Für die Leute, die schon eine 32K ROM/RAM-Karte haben und für die vielleicht zu bauende kommt hier auch die Version für RAM ab 0x8000. Die Obergrenze ist wie im Original bei 0xD000, so dass es keine Konflikte mit dem SPS-Modul gibt.


    MFA_SP1_8000.zip


    Bei der Erstellung ist mir noch ein Zahlendreher in meiner Adresstabelle aufgefallen; hier deshalb die korrigierte Version der EPROMs 3 und 4 für die kleine 8K-RAM-Karte ab 0xE000 (BASIC-Bereich 0xE000 - 0xEFFF):


    MFA_SP1_E000.zip

  • Soweit ich das sehe, dürften die in einem 2716 Sockel ohne weitere Anpassungen laufen..?

    Wusste ich gar nicht, dass das gehen könnte. Das wäre genial, weil ich noch 10 oder 12 AT28C16 aus einer Fehllieferung vom Chinamann rumliegen habe (die sogar ersetzt wurde).

    • i-Telex 7822222 dege d

    • technikum29 in Kelkheim bei Frankfurt

    • Marburger Stammtisch

    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."