Tektronix Grafikansteuerung kl. Fortran Source

  • Hi.


    Hatte irgendwo mal eine kleines (30-40 Zeilen) Fortran Programm/Source gesehen, um Grafikausgaben auf einem Tek4010 etc. auszugeben.

    Finde es nur nicht wieder..? Habe jetzt schon 2 Tage mal 2h gesucht. Könnte sogar sein, das es von Martin Hepperle war?


    Suche ager gerne auch weitere ältere, kleine Fortran Source Codes. Muss aber auf älteren Fortran / CP/M Compilern laufen!

    (Fortran-IV; Fortran-77)


    Peter

    github.com/petersieg

  • ... muss ich heute abend mal raussuchen ...


    Ich hatte für MS-Fortran 3.44 unter (AVR-)CP/M eine kleine Bibliothek von Routinen geschrieben mit dern man Fensterdefinitionen mit Clippung, Skalierungen, Move und Draw für Tektronix ausgeben kann.

    Es gibt im Internet auch fertige Tektronix Demodateien die man als Binärdaten auch an einen Tektronix-Emulator senden kann (z.B. Teraterm oder andere hardware-basierte Projekte). Ich habe mir mit einem STM-32 Blue-Pill Board einen Emulator mit einem kleinen 2,4 Zoll TFT Bildschirm gebastelt. Sozusagen Tektronix für's Puppenhaus, wenn man keinen Platz für Großrechner hat.


    Martin

  • Hier kommen zwei Archive mit Fortran Programmen für Tektronix-Ausgaben.


    Die erste Datei ist eine Minimallösung und gut zum Ausprobieren geeignet:

    TEKTEST.zip

    Das zweite Archiv enthält eine Bibliothek von Routinen mit der sich auch komplexere Sachen darstellen lassen, inklusive eines Vektor-Zeichensatzes

    TEKLIB.zip

    So sieht dann ein AVR-CP/M Stick mit serieller und paralleler Schnittstelle und Echtzeituhr aus:

    Etwas Drahtverhau, aber das Gerät funktioniert sehr schön.


    PS: Unser Freund, der Max Pollin, hat gerade SD (nicht SD-HC) Karten mit 128 MB im Angebot (724115 und 724116) - die sind eigentlich genau richtig in der Größe für solche Projekte, kosten aber satte 60 Cent pro Karte.

  • Danke! Auch für die I2C Erweiterungen zum AVRCPM!

    Und nochmal Danke für den SD Karten Tipp bei Pollin - gerade bestellt ;)


    Unter Linux (Mint 19.1) ist mein xterm nur Schwarz/Weiß - bekomme da keine Farbe(n) angezeigt?

    Gibt es dazu eine Lösung/etwas anderes - besseres?

    Hatte glaube ich auch mal Teraterm unter Wine an laufen - das hatte Farben angezeigt.


    Links zu (Arduino) Beispielen/Code:

    https://www.stm32duino.com/viewtopic.php?t=2336

    https://github.com/topics/tektronix-4010

    https://forum.arduino.cc/index.php?topic=523751.0


    Peter

    github.com/petersieg

  • Peter,


    Teraterm funktioniert recht gut und man bekommt ein zweites Fenster mit Tektronix Anzeige. Bei geschickter Programmierung kann man zwischen Textfenster und Grafikfenster wechseln und hat dann ein "Dual-Screen" System - all das mit CP/M.

    Allerdings kann es nicht die Grünstufen-Darstellung, die in einzelnen Demos verwendet wird.


    Es gibt da auch ein relativ neues Projekt das einen Raspberry Pi zum Tektronix Terminal umfunktioniert:

    Github Projektseite.

    Dabei wird versucht, auch den hellen Leuchtpunkt zu simulieren. Die Videos sehen recht gut und vorbildgetreu aus. Ausprobiert habe ich das noch nicht, wäre aber einen Versuch wert und die Software könnte wohl auch auf einem anderen Linux System zum Laufen gebracht werden.


    Martin

  • Ausgaben sehen super aus! Siehe Screen Shots.

    gtk+-3.0 musste noch installiert werden unter Linux Mint 19.1.


    Aber: Farben aus dem einen Arduino Demo gehen nicht.

    Und GIN aus dem zweiten Demo (Bild 3) geht nicht.

    ??


    Trotzdem. Für Ausgaben klasse! Das Programm und Demos sind recht klein (1,3MB als ZIP). Wird durch die Tek-Manuals so 'riesen' groß.


    Peter

  • Hmm.. TEKTEST.FOR gibt mir:


    ??


    ---


    tek4014 löscht nicht den Bildschirm beim scrollen. Auch fängt er nach links unten dann rechts oben - quasi auf der 2ten Bildschirmhälfte - weiter mit Zeichenausgabe (avrcpm hängt da dran). xterm macht das 'richtig'.


    Peter

    github.com/petersieg

  • Zum Fortran Programm: Hmmm ... geht denn prinzipiell die Textausgabe von Fortran?


    Füge mal dieses Zeilen irgendwo ins Hauptprogramm vor CALL TINIT(1) ein:

    Code
          IDEV = 1
          WRITE(IDEV,1000) 
    1000  FORMAT(' Hello Tektronix')


    Zum Tektronix: Ein Tektronix 40xx im Textmoduls schreibt immer zunächst von links oben nach links unten, bricht dann in eine zweite Spalte um und schreibt die dann von oben-Mitte bis unten Mitte voll. Dann beginnt es wieder links oben und überschreibt.

    Scrollen kann es nicht - dafür löschen entsprechende Programme den Bildschirm - FLASH!

    Das war auch damals™ so und xterm macht das eventuell falsch.


    Martin

  • Hi. Ein Hallo Welt Programm funktioniert:


    Code
    C     FORTRAN IV WAS ONE OF THE FIRST PROGRAMMING
    C     LANGUAGES TO SUPPORT SOURCE COMMENTS
          WRITE (5,7)
        7 FORMAT(13H HELLO, WORLD)
          STOP
          END


    Muss ich dann wohl mal schauen.. aber d.h. bei dir läuft es genau so?

    (Ich habe z.Z. nur die USB-TTL Schnittstelle dran - keine I2C Erweiterungen)

    Ich hatte die Unit 1 auch mal auf 5 geändert - identische Fehlermeldung.


    'Strange' fand ich auch, das IDEV in TINIT gesetzt/definiert wird und trotzdem sonswo genutzt werden kann (global).

    Und das WRITE ohne FORMAT auskommt:



    tek4014: ok. Ja, dann macht es offensichtlich xterm falsch! Schade. Das bedeutet, das mal es wirklich 'nur' als zweites Grafikterminal nutzen kann. Die Haupt-Konsol-Schnittstelle muss dann immer woanders sein (die scrolling etc. autom. macht).


    Peter

    github.com/petersieg

  • O.K. ich habe das gestern Abend nur aus meinem AVR-CP/M Backup Quellcode-Verzeichnis kopiert - ich schau heute Abend nochmal nach, ob das wirklich so funktioniert, da bin ich aber ziemlich sicher ("famous last words").


    "Globale Variablen"

    In Fortran kann man Variablen in COMMON Blöcken zusammenfassen und dann in Unterprogrammen verwenden. Das sind sozusagen globale Speicherblöcke mit Namen (es gibt auch einen unbenannten). In jedem Unterprogramm taucht deshalb der COMMON Block SCALE auf, in dem diese "globalen" Variablen deklariert werden. Man kann das auch ähnlich wie eine global definierte "Struktur" in anderen Sprachen sehen.

    In manchen Basic Dialekten gibt es auch COM Blöcke, die genauso funktionieren (z.B. HP Rocky Mountain Basic).


    Die Variable IDEV wird also einmal in TINITmit IDEV = NDEV besetzt und kann dann in Unterprogrammen, die die folgende COMMON Anweisung enthalten, verwendet werden:

    Code
          COMMON /SCALE/IDEV,SCALX,SCALY,XMIN,YMIN


    WRITE Anweisungen gibt es formatiert und unformatiert.

    Code
          DATA SEQ /27,'[','?',38,'h'/
          IDEV = NDEV
          WRITE(IDEV) SEQ

    ist unformatiert, d.h. wird direkt binär die Folge der 5 Bytes in SEQ ausgegeben. Bei formatierter Ausgabe wird eine FORMAT Anweisung verwendet um das ... Format festzulegen. Da können dann genaue Angaben zu Vor- und Nachkommastellen etc gemacht werden. Die wird üblicherweise für Textausgaben (ASCII) verwendet. Das ist ähnlich wie in BASIC mit den PRINT und PRINT USING Anweisungen.

    Es müsste auch funktionieren:

    Code
          LOGICAL*1 HELLO(5)
          DATA HELLO /'H','e','l','l','o'/
    
          WRITE(1) HELLO

    (LOGICAL*1, weil der MS-Fortran Compiler noch keine CHARACTER kennt).


    Martin

  • In dem ZIP Archiv ist eine image Datei für den CP/M Stick - Disk "C".

    Unter USER 7 liegen meine Tektronix Programme als Fortran Quellen und auch kompiliert.

    Diese (TEK1, TEK2, TEKTEST) laufen bei mir über die normale serielle Schnittstelle des AVR und Teraterm.

    Unter USER 1 sind übrigens auch die angepassten CP/M Quellen mit IOBYTE und den I2C Geräten, wie ich sie verwende. Dieser Stand sollte auch in die verfügbaren Quellen im Git integriert sein.

    Das Ergebnis sollte dann so aussehen (ist nicht genau das Einfachst-Programm, das ich geschickt hatte, aber das müsste auch funktionieren).




    Im nachhinein sieht die Fehlermeldung **IO... aber eher aus wie wenn sie aus dem Emulator kommt, also nicht aus Fortran oder CP/M. Hatte leider keine zeit da nach zu suchen (mit grep im Quellcode oder so...).