MSX ZEN/MONS ROM

  • Auf dem Sharp MZ-80K habe ich den ZEN Assembler kennengelernt. Komfortabel für kleine Projekte, Editor, Assembler und Debugger in einem Programm. Beim Durchstöbern verschiedener MSX Webseiten habe ZEN auch für den MSX gefunden. Also, EPROM brennen und loslegen...


    Denkste...


    Editor und Assembler funktionieren, aber was nützts, wenn man nichts speichern kann? Nicht mal das Motor-Relais schaltet. Weitersuchen, vielleicht gibt´s eine andere Version. Und, tatsächlich, eine Disk-Version gefunden. Bei näherem Hinschauen stellt sich heraus, es ist ausser ein paar Bits Unterschied die gleiche Version. Diese schaltet aber immerhin das Motor-Relais (die Disk-Version!). Testprogämmchen schreiben, speichern, laden.


    Denkste...


    Laden unmöglich, es escheint nur Müll. Timing Problem? Um sicher zu gehen, habe ich aus Basic und ZEN Dateien mit gleichem Inhalt (lauter 0x55s) gespeichert und die Ausgangssignale verglichen. Dabei habe ich festgestellt, dass die Pausen zwischen den einzelnen Bytes unterschiedlich sind, bei ZEN ca 100uS länger. Gemäss dem MSX Technical Manual muss aber das Timing des BIOS eingehalten werden.

    Also, die verantwortlichen Routinen suchen und analysieren. Dabei hilft das Source-Listing des MZ-80K-ZEN (für MSX habe ich keins gefunden). Dabei habe ich gesehen, dass ZEN nach jedem Byte die Checksumme für das Verify aktualisiert. Dies braucht Zeit. Das würde doch auch ohne Checksumme funktionieren. Und, siehe da, ZEN und Basic können die so geschriebenen Daten problemlos lesen.


    Ist noch das Problem mit dem Verify. Ich habe die Verify-Routinen für Text- und Binärdateien so geändert, dass ein direkter Speichervergleich während dem Lesen vom Band durchgeführt wird. Dies bringt noch den Vorteil, dass sofort nach Erkennen eines Fehlers abgebrochen wird, nicht erst nach dem Lesen bis zum Dateiende.


    ZEN akzeptiert zur Kommando-Eingabe nur Grossbuchstaben. Deshalb wird beim Start CAPS-LOCK aktiviert. Die beiden Kommandi 'd' (disassemble) und 'u' (unscramble) wurden auf 'J' und 'Y' (die einzigen noch verfügbaren Zeichen) gelegt.

    Der Debugger des ZEN ist rudimentär verglichen mit MONS (Teil von GEN80 von HiSoft). Diesen gibts als BLOADbare Version für Basic. MONS würde sogar noch ins EPROM passen. Da habe ich versucht, dies zu implementieren.

    Das Starten von MONS in ZEN geschieht durch einen Sprung ins EPROM, die Befehlssequenz dazu ist auf Funktionstaste F1 gelegt.

    Der Init-Code im EPROM kopiert den MONS Code ins RAM und führt ihn aus. Nach Beenden von MONS wird wieder ZEN geladen und gestartet.

    MONS überschreibt jedoch den Textbereich von ZEN, der Source müsste nach jedem Umschalten neu geladen werden. Um dies zu verhindern, erfolgt bei jedem Wechsel von ZEN zu MONS ein Backup des benutzten Textbuffers in den ungenutzten Bereich 8000 bis 9FFF (leider nur diese 8k, mehr ist nicht verfügbar). Nach Beenden von MONS wird der Text wieder zurückgeladen.


              


    ZEN und MONS...



    im gleichen EPROM


    Im Anhang sind das EPROM-Image, die Sourcen für den Init-Code sowie die der ZEN-Patches im ZEN-Format (was sonst??)


    Tony