wiki:PlotLib

PlotLib - Erweiterte Grafik-Routinen

Achtung: Mit BASIC 2.3 obsolet, da Funktionen nun als Befehle vorhanden sind. Hier nur noch zur Dokumentation für ältere Versionen.

Mit den eingebauten Grafik-Funktionen (PLOT MOVE, PLOT LINE, PLOT PIXEL, PLOT RECT, PLOT FILL) lassen sich in ct-BASIC einfache Grafiken zeichnen. Für die Darstellung von Kreisen, Messinstrumenten, Balkenanzeigen und vektorisierten, skalierbaren Zahlen in Großdarstellung ist allerdings schon ein erhöhter Programmieraufwand nötig. Um diesen zu umgehen, habe ich die Grafik-Library PLOTLIB.BIN (Sourcen in plotlib_cm.asm) geschaffen. Sie beherrscht derzeit folgende Funktionen:

  • Anzeige von Zahlen als Grafik, skalierbar
  • Zeichnen von Kreisen und Kreissegmenten
  • Zeichnen einer skalierbaren Liste von 4-Byte-Grafikbefehlen in der Form X, Y, COLOR, MODE
  • Einstellung der Skalierung in X- und Y-Richtung
  • Darstellung einer Speicherseite (256 Bytes) als Wellenform mit anschließendem Verschieben um gewünschte Pixelzahl nach links für fortlaufende Anzeige
  • Synchronisation mit Grafik-Timing für flickerfreie, kontinuierliche Anzeige
  • Darstellung von größenmäßig skalierbaren (einfachen) Messinstrumenten mit Zeiger und Skala
  • Darstellung von skalierbaren Balkenanzeigen horizontal und vertikel (in Arbeit)

Die Library wird bei BASIC-Programmbeginn mit LOAD "PLOTLIB.BIN",$8000 ab Adresse $8000 in den Speicher geladen. Vorher muss das BASIC-Speicherende mit DOKE $85,$8000 auf $8000 heruntergesetzt werden, auch der Variablenspeicher ist mit CALL $C006 neu zu initialisieren:

10 DOKE $85,$8000:CALL $C006
20 LOAD "PLOTLIB.BIN",$8000

Sollen im späteren Verlauf Zahlen in Form von Grafik dargestellt werden, ist die Library zu initialisieren. Dieser CALL verbiegt den WriteAcc-Vector so, dass mit einem einfachen PRINT-Befehl auch skalierbaren Zahlen (sowie die Symbole +,-, E, Punkt und Leerzeichen) als Grafik geplottet werden können. Beispiel:

30 CALL $8000:REM Write-Vektor setzen
40 CALL $8015,1,1:REM Skalierung X,Y (0=einfach, 1=doppelt, 2=vierfach usw.)
...
100 LABREQ 0,0,MW:GOSUB 1000
...
1000 PLOT MOVE 10,100
1010 PRINT CHR$(1);MW,CHR$(0)
1020 RETURN

Wenn plotlib.bin nicht auf der Speicherkarte gefunden wird, kracht es allerdings. GGf. Speicherstelle $8000 auf den Wert $4C überprüfen (6502-JMP).

Die Subroutine 1000..1020 stellt den in Zeile 100 ermittelten Messwert MW in Form einer geplotteten (und nicht in den Video-Textspeicher geschriebenen) Zahl, linke obere Ecke bei 10,100 Pixeln, dar. Das von der Zahl eingenommene Rechteck wird vorher automatisch gelöscht. CHR$(1) leitet den Write-Vektor auf die Plot-Routine um, CHR$(0) - oder auch das Zeilenende - setzt ihn wieder auf die normale Text-Bildschirmroutine zurück. Vollständige Beispiele finden Sie im BASIC-Programm PLOTLIB.BAS (Textform in PLOTLIB.TXT)

Last modified 7 years ago Last modified on Dec 22, 2009, 10:17:21 AM