Grafik mit dem MFA

  • Mal wieder was zum MFA:

    Martin Hepperle hat mich draufgebracht, dass TeraTerm, welches ich eh schon als Ein- und Ausgabe auf der PC-Seite für den MFA nutze, einen Tektronix-Modus hat. Wenn man nun z.B. von Udo Munks Seite https://www.autometer.de/unix4fun/z80pack/ das Diskettenimage mit GSX-80 und dem Tektronix 4014-Treiber von Udo lädt und auf den MFA schiebt, öffnet sich nach Eingabe von DEMOGRAF ein Tektronix-Fenster von Tera-Term und zeigt die Vektorgrafik-Demo an. Dazu muss man in den Einstellungen von TeraTerm nur ein Häkchen beim "automatischen Wechsel zum Tektronix-Modus" setzen.


    Ich habe das Gefühl, dass nicht alle Elemente des Demos angezeigt werden, das muss ich mal mit einer anderen Maschine quer testen.


    Aber schon sehr cool :sunny:, vor allem ohne weitere Hardware und über den gleichen seriellen Kanal.


    Gruß

    Robert

    NCR DMV/Olivetti M20/ITT 3030/DEC Rainbow 100/Siemens PC-D/OlyPeople/MFA 8085/TA Alphatronic

  • Robert,


    in meinem PDF Dokument hier sind ein paar Bilder von DEMOGRAF auf meinem HP 2648 Terminal eingebunden.

    DEMOGRAF.COM brauche ich dafür nicht neu zu übersetzen, nur den passenden Treiber in ASSIGN.SYS einzutragen.

    Mit den Bildern kannst Du vergleichen (und mit dem Quellcode DEMOGRAF.BAS und dem Handbuch für die CBASIC-80 Grafikerweiterungen). Der Tektronix Treiber kann ein paar Sachen (z.B. Texthöhe) nicht.


    Martin

  • Die Infos sind echt klasse zusammengestellt, und auch dass Du mal schnell eigene GSX-Treiber klöppelst, finde ich super! :)


    In der ASSIGN.SYS kann ich ja mehrere Treiber in den unterschiedlichen Klassen (Display, Plotter usw.) laden ... wird dann der Output gleichzeitig z.B. auf dem Display und auch in das GEM-Metafile ausgegeben?


    Vielen Dank!


    Robert

    NCR DMV/Olivetti M20/ITT 3030/DEC Rainbow 100/Siemens PC-D/OlyPeople/MFA 8085/TA Alphatronic

    Einmal editiert, zuletzt von rfka01 ()

  • nein, nicht gleichzeitig - Einer nach dem Andern ... sonst wären die 64 KB RAM schnell voll.


    Man öffnet eine "Workstation" mit einer Nummer und diese Nummer ist die Zahl im ASSIGN.SYS.

    Beim Öffnen der Workstation wird der zugehörige Treiber in den Speicher geladen.


    Du kannst also die Ausgabe eines Grafikprogramms in TeraTerm bestaunen, dann die Workstation schließen und einen andere (z.B. Drucker oder Plotter) öffnen und die gleiche Ausgaberoutine dann nochmal laufen lassen. man hat also immer Pärchen OPEN/CLOSE WORKSTATION im Programm.


    Martin

    • Offizieller Beitrag

    Übrigens hat auch die MFA-Video-Serial Karte eine Grafikerweiterung an Bord. Damit habe ich schonmal ein bißchen mit MBASIC herumgespielt. Funktioniert. :)

    Keine Ahnung, ob sich das für eine GSX-Erweiterung eignet. Fände ich aber in sofern schöner, daß das ohne externes Terminal bzw. PC funktioniert.

    Beschreibung habe ich mal angehängt.

  • Toast_r

    Das ist interessant. Diese Escape Sequenzen schickt man an die CON: Ausgabe und dann erscheint die z.B. Linie auf dem VGA-Ausgang?

    [...]

    Draw a line ESC [Z1...Z
    Draw a box ESC [Z2...Z
    Draw a filled box ESC [Z3...Z
    Draw a circle ESC [Z4...Z
    Draw a filled circle ESC [Z5...Z
    [...]


    Wenn Du es schon ausprobiert hast:

    Für hochauflösende Grafik würde man dann vorher wohl in den 480 x 432 pixel "VGA" Modus schalten?

    Es scheint auch keine Funktion zu geben um Text pixelgenau zu positionieren, vermutlich nur in Terminal-Grobraster 80x36?


    Dann könnte man relativ einfach einen GSX Treiber schreiben - die Treiber für Tektronix oder HP 26xx funktionieren ja auch so. Die Intelligenz steckt in den Terminals. Könnte ein Wochenendprojektchen werden.


    [Man kann natürlich auch direkt ein Programm schreiben, der Weg über GSX hat halt den Vorteil dass man geräteunabhängig ist und das Programm nicht für andere Ausgaben anpassen und neu übersetzen muss. Und viele einfache CP/M Systeme haben keine Grafik.]


    Martin

    • Offizieller Beitrag
    Zitat

    IÜbrigens hat auch die MFA-Video-Serial Karte eine Grafikerweiterung an Bord. Damit habe ich schonmal ein bißchen mit MBASIC herumgespielt. Funktioniert. :)

    Ich hab sie noch nicht gebaut :(

    Man kann da auch eine 'Sparversion' von bauen:


    Das war mein 'Prototyp', um das ganze erstmal auszuprobieren.

    Nachdem das geklappt hat, hat funkenzupfer die Platine entworfen.

  • ui-ui-ui - sieht aber aufwendig aus :)


    ... o.k. ... ich kann mal spasseshalber einen GSX Treiber anpassen, für Text kann man nur mit den VT-100 Sequenzen positionieren:


    Move cursor to screen location v,h ESC [<v>;<h>H

    Move cursor to screen location v,h ESC [<v>;<h>f


    <v> und <h> werden wohl im Zeichen-Raster (mehrfache von 6x12 bei 480 x 432 Pixel Auflösung) liegen, d.h. in 6-er Schritten in waagerechter Richtung, nicht pixelgenau in 480x432.


    Nicht so schön, aber sicher verschmerzbar und besser als nichts. Hauptsache Linien kann man ziehen.

    • Offizieller Beitrag

    Soweit ich weiß gibt es keinen Textspeicher, nur Grafikspeicher, der ankommende Text wird in Grafik umgewandelt und in den Speicher geschrieben.

    Dem ist so.



    Es scheint auch keine Funktion zu geben um Text pixelgenau zu positionieren

    Gibt es nicht, laesst sich aber implementieren.


    BTW: Ich hatte mal angefangen die Aufloesung auf VGA zu erweitern.

    Anfaengliche Versuche haben geklappt, ist dann aber liegen geblieben.

    • Offizieller Beitrag

    Ja, nehme ich gern an. Über die ganze MFA Thematik hatten wir bisher noch überhaupt keine Artikel!

    Denn Feindschaft wird durch Feindschaft nimmermehr gestillt; Versöhnlichkeit schafft Ruh’ – ein Satz, der immer gilt. Man denkt oft nicht daran, sich selbst zurückzuhalten; Wer aber daran denkt, der lässt den Zorn erkalten. Sprüche von Buddha, aus dem ‹Dhammapada›.


    Mein Netz: Acorn | Atari | Milan | Amiga | Apple //e und IIGS | Macintosh | SUN Sparc | NeXT |SGI | IBM RS/6000 | DEC Vaxstation und Decstation| Raspberry Pi | PCs mit OS/2, BeOS, Linux, AROS, Windows, BSD | Stand-alone: Apple //c und III | Commodore 128D | Sinclair QL | Amstrad | PDAs

  • Ich selbst habe kein MFA System.

    Ich kann aber spaßeshalber mal blind einen GSX Treiber für die bekannten Escape-Sequenzen umschreiben.


    Für Textausgaben in Pixelkoordinaten wäre eine entsprechende Escape-Sequenz tatsächlich nützlich (z.B. für Achsenbeschriftungen).


    Im Grunde wird vorrangig die schon vorhandene Linienziehfunktion gebraucht. Damit kann man dann schon gut Liniengrafiken, Digramme etc zeichnen.

    Die außerdem vorhandenen Markersymbole werden im Treiber per Software erzeugt, das muss das terminal nicht mitbringen.

    Weiterhin werden von den besseren Terminals Linientypen (durchgezogen, strichliert, gepunktet, ...) angeboten, das würde hier erst mal entfallen.


    Die Kreisfunktionen werden nicht wirklich gebraucht - dafür werden als Obermenge Ellipsenbögen mit freien Anfangs- und Endwinkeln als nächst höhere Funktion verwendet.


    Neben Grafik unterstützt GSX übrigens auch Cursoradressierung im "Textmodus" (sofern vorhanden),, d.h. man kann damit auch VT-100 oder andere Escape Sequenzen einbauen. Das ist z.B. bei den HP 2648 Terminals so - sie haben text und Grafikebene die man getrennt beschreiben und ein-/ausschalten kann.


    Vieles kennen die Atari ST Programmierer aus GEM/VDI, dem Enkel von GSX.


    Martin

    • Offizieller Beitrag

    Wenn du eine kurze Zusammenstellung macht, welche Steuerbefehle du noch brauchst, kann ich ja mal schauen, wie sich die implementieren lassen.

  • ... bevor ich hier große Entwicklungsansprüche anmelde, mache ich erst mal einen Basistreiber mit den vorhandenen Funktionen um zu sehen, ob das jemand nutzen möchte.


    Grundsätzlich wäre wohl eine Textausgabefunktion an einer beliebigen x-y Position (in Pixeln) eine sinnvolle Ergänzung.


    Ein Vorschlag:

    Esc [Z6;<x>;<y>;Text...ETX

    Das ETX als klassische Ende-Kennung, damit im Text "alle" sinnvollen (32...127) Zeichen vorkommen können.

    Alternativ könnte auch ein CR (13) den Text abschließen.

    <x> und <y> im Pixelsystem, d.h. 1-3 stellig - wie bei der Escapesequenz für die Linie.


    (Die nächste Stufe wären 2-5 Linienarten, das wird aber schnell kompliziert, wenn es schön sein soll, da dann die Linienmuster "um die Ecke" mitgehen müssten, was dann wieder Fließkommaberechnungen erfordert).

    • Offizieller Beitrag

    Ein Vorschlag:

    Esc [Z6;<x>;<y>;Text...ETX

    Hoert sich gut an.

    Schau ich mir die Tage an.


    Die nächste Stufe wären 2-5 Linienarten, das wird aber schnell kompliziert,

    Mal schnell aus dem Bauch raus.

    Beim normalen Linien zeichnen wird jeder Pixel einzeln gezeichnet. Mit einer Bitmaske koennte ich das Plotten des Pixels unterdruecken.

    Das kann am Ende der Linie allerdings doof aussehen.

    Sollten 2 Linien direkt nacheinander gezeichnet werden, kann ich die Bitmaske auch weiter benutzen, d.h. die z.B. gestrichelte Linie faengt nicht neu an, sondern geht weiter.

    Fuer einfache Sachen sollte das erstmal ausreichen.

  • Zu den Linienarten: ah ja, das wäre mit einer rotierenden Maske zu machen - ich hatte Vektorgrafik (Plotter) im Kopf, wo man mehr rechnen müsste.

    Sinnvolle Linientypen wären zum Beispiel:

    1. durchgezogen 11111111b = FFh
    2. strichliert 11111000b = F8h
    3. gepunktet 10101010b = AAh
    4. strichpunktiert 11110110 = F6h

    Könnte direkt in einen DDA/Bresenham eingebaut werden.

    Oft werden ja fortlaufende Linien gezeichnet. dann sollte das Muster fortgesetzt werden.

  • ... ich habe da zufällig mal was vorbereitet ...


    gsx-mfa-test.zip


    ... nur zum testen, noch nicht final.


    Nicht klar war mir:

    • sind die Koordinaten z.B. für das Linienziehen 0- oder 1-basiert?
    • Wo liegt das Koordinatensystem? Es kann sein, dass die Grafik "über Kopf" erscheint, dann wenn der Ursprung oben links liegt.
  • Falls ihr nochwas zum "Spielen" braucht, ich habe auf dem Schwung Disketten, den ich neulich bekommen habe, Persoft Smarterm 2.20 für MS-DOS gefunden, das kannn VT52, VT100, VT220, 7/8 Bit usw. auf CGA, Hercules und EGA-Modis und unterstützt sogar am PC angeschlossene Drucker mit eigenen Anpassungen.

    1ST1

    • Offizieller Beitrag

    Nicht klar war mir:

    sind die Koordinaten z.B. für das Linienziehen 0- oder 1-basiert?
    Wo liegt das Koordinatensystem? Es kann sein, dass die Grafik "über Kopf" erscheint, dann wenn der Ursprung oben links liegt.

    Der Koordinatenursprung ist links, oben.

    Die Cursorpositionierung faengt mit 1;1 an.

    Bei den Linien weiss ich es nicht genau. Ich vermute aber es faengt mit 0;0 an.



    Mein Rechner hat seit heute Corona und startet nicht. Da muss ich mich erstmal drum kümmern.

  • oh schade, hat sich wohl mit MS-DOS infiziert, der Arme.


    Ich habe mal in den Original PIC Quellen gestöbert:

    • Der Grafik-Ursprung ist dort bei (0,0) links oben. Das muss ich noch spiegeln im GSX Treiber.
    • Cursorpositionierung muss ich bei mir nochmal überprüfen, ist aber, glaube ich, schon bei (1,1) für Home links oben .
    • Offizieller Beitrag

    Cursorpositionierung muss ich bei mir nochmal überprüfen, ist aber, glaube ich, schon bei (1,1) für Home links oben .

    Hab ich gerade getestet.

    Bei VT100 ist 1;1 die Home-Position.


    Zur Info: Bei VT52 ist es 32+0;32+0 die Home-Position.

  • [...]

    • Der Grafik-Ursprung ist dort bei (0,0) links oben. Das muss ich noch spiegeln im GSX Treiber.
    • Cursorpositionierung muss ich bei mir nochmal überprüfen, ist aber, glaube ich, schon bei (1,1) für Home links oben .

    Im GSX-Treiber ist nun das Koordinatensystem nach links oben korrigiert und eine aktualisierte Version unter GSX-80-DDMFA.zip abgelegt.

    Außerdem haben ich ein GEMView Programm dort abgelegt, mit dam man GEM Metafiles lesen und dann über GSX-80 auf einen anderen Gerät wieder ausgeben kann. Man kann damit z.B. Clipart von DR-Draw auf Tektronix oder HP Terminals ansehen oder auf einem Plotter ausgeben. Noch ein wenig rudimentär, aber nützlich.


    Martin