VGA- und TV-Text-Mode vereinheitlicht

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

VGA- und TV-Text-Mode vereinheitlicht

Beitrag von U-Held »

Hallo zusammen,

im Anhang gibts die aktuelle Version des Bella-Codes, basierend auf Trios r51. Ich habe den VGA- und den TV-Textmodus zusammengeführt. Man wählt per Compile-Schalter, welches Binary erzeugt wird. Ein Umschalten ohne Neuladen des Codes, wie PIC es sich gewünscht hat, wurde nicht realisiert.

Schaut Euch einfach mit dem beltest aus dem Anhang an, was TV- und VGA-Text-Modus können.

Wenn keiner etwas einzuwenden hat, checke ich den Code in die Trios-Code-Verwaltung ein. Dann wird auch das vorhandene tv.bel ersetzt!

Ich brauche aber noch etwas Hilfe:

1. Es gibt noch kein schönes Logo für den TV-Modus. Das war mir zu anstrengend.

2. Die Color-Funktion setzt im TV-Modus auch die Hintergrundfarbe. Auch hier war ich froh, dass die Farbumschaltung überhaupt funktionierte.

3. Die Tab-Funktion ist immer noch dieselbe wie vor 1/2 Jahr: Tabulatoren gelten für alle Screens und alle Windows, wenn auch relativ zu den Fenstergrenzen (Oh - das habe ich nicht getestet!).


Vielleicht nützt der überarbeitete TV-Modus den Freunden des Rückfahrmonitors mit Ambitionen auf einen Hive-Laptop.


Weihnachtliche Grüße vom U-Held
Dateianhänge
bellatrix.zip
zum Übersetzen ist Hive Trios nötig. make.bat evtl. anpassen
(65.95 KiB) 520-mal heruntergeladen
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von U-Held »

Änderungen sind eingecheckt und grob getestet: Rev. 52. Bitte prüft mal, ob mir noch Fehler unterlaufen sind (bestimmt...).

Grüße vom U-Held
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

Bin aktuell gerade dabei die neue Version etwas intensiver zu testen. Klasse das die Funktionen für die Fenster schon eine kleine Testroutine in beltest haben! :) Erstaunlich wie flott dabei das Scrolling bei drei verschiedenen Fenstern noch ist.

Da zwei der Fenster in der Testroutine rechts und unten über den Bildschirm standen, habe ich die Koordinaten etwas angepasst. Nachher ist mir dann eingefallen, dass diese Überlappung des Bildschirms Absicht sein könnte, um eventuelle Kollisionen oder Abstürze der Scrollfunktion zu testen!? Kann das sein?

Im wesentlichen funktionieren alle Programme korrekt. Einziger Unterschied der mir bisher aufgefallen ist: Die Funktion ios.screeninit funktioniert nicht mehr korrekt. Die Programme können damit ja die obere "Statuszeile" mit einem String oder dem Hive-Logo versehen und es wird zusätzlich die Variable sline gesetzt, um die obere Scrollzeile festzulegen. Wenn ich es richtig gesehen habe, erscheint der String aber jetzt um ein halbes Zeichen nach unten versetzt und wird dann gelöscht. (Habe das einfach mit waitcnt-Befehlen in der ios-Funktion verzögert und beobachtet.) Momentan kann ich aber noch nicht genau sehen, wo genau das Problem entsteht.

Eventuell können wir ios.screeninit auch umgestalten - ist ja irgendwie eine Funktionen, die noch ihre Wurzelm im Hive-Urschlamm hat. Mittlerweile gibt es ja durch die Fenster und verschiedene Screens eine deutlich veränderte Umgebung. Die Idee war eine handliche Funktion um den Screen zu initialisieren für Programme welche Vollscreen laufen. Damals mit einem Statusbereich am oberen Bildschirmrand und einem darunter befindlichen Scrollbereich über die gesamte Screenbreite.

Ansonsten kann ich momentan keine weiteren Differenzen erkennen. :)
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von U-Held »

Hallo drohne235!
drohne235 hat geschrieben:Da zwei der Fenster in der Testroutine rechts und unten über den Bildschirm standen, habe ich die Koordinaten etwas angepasst. Nachher ist mir dann eingefallen, dass diese Überlappung des Bildschirms Absicht sein könnte, um eventuelle Kollisionen oder Abstürze der Scrollfunktion zu testen!? Kann das sein?
Sieht zwar hässlich aus, war aber Absicht. Anfangs waren noch mehrere 1-daneben-Fehler enthalten, wodurch der eigentlich unsichtbare rechte Rand am linken Bildschirmende und der unsichtbare untere Rand auf dem nächsten Screen angezeigt wurden.
drohne235 hat geschrieben:Die Funktion ios.screeninit funktioniert nicht mehr korrekt.
...Na super. Und ich hab's nicht gemerkt.
drohne235 hat geschrieben:Die Programme können damit ja die obere "Statuszeile" mit einem String oder dem Hive-Logo versehen und es wird zusätzlich die Variable sline gesetzt, um die obere Scrollzeile festzulegen. Wenn ich es richtig gesehen habe, erscheint der String aber jetzt um ein halbes Zeichen nach unten versetzt und wird dann gelöscht. (Habe das einfach mit waitcnt-Befehlen in der ios-Funktion verzögert und beobachtet.) Momentan kann ich aber noch nicht genau sehen, wo genau das Problem entsteht.
Gut. Ich werde mal nach der Fehlerursache suchen. Wo hast Du die Waits eingefügt? Wie hast Du getestet?

Meine Idee war, auf dem kleinen TV-Bildschirm die Logo-Zeile wegzulassen. Wenn die Zeile wieder da sein soll, muss in belf-tv.spin die Konstante DEFAULT_Y0 auf 1 gesetzt werden.
drohne235 hat geschrieben:Eventuell können wir ios.screeninit auch umgestalten - ist ja irgendwie eine Funktionen, die noch ihre Wurzelm im Hive-Urschlamm hat. Mittlerweile gibt es ja durch die Fenster und verschiedene Screens eine deutlich veränderte Umgebung. Die Idee war eine handliche Funktion um den Screen zu initialisieren für Programme welche Vollscreen laufen. Damals mit einem Statusbereich am oberen Bildschirmrand und einem darunter befindlichen Scrollbereich über die gesamte Screenbreite.
screen_init (in belflash) soll z.Z. alle Windows von Screen i (=Parameter) auf Standardgröße setzen, Window 1 wählen, den gesamten Screen löschen und den Cursor anschalten und auf Home-Position setzen. screeninit (in reg.ios) ruft erst print_logo auf und dann curhome. Das ist im TV-Modus ungünstig, wo Window 1 den gesamten Bildschirm belegt. Print_logo schreibt immer in Window 0 (absolute Position). Screeninit muss dann herausfinden, welche Zeile in Window 1 der 2. Zeile von Window 0 entspricht. Genau auf den Anfang dieser Zeile ist der Cursor zu setzen.

Der Bug in print_logo (Verschiebung um 1/2 Zeile) ist unabhängig davon zu beheben.

Wer macht's? Du oder ich?

Grüße vom U-Held
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

...Na super. Und ich hab's nicht gemerkt.
Na jetzt mal ehrlich: bei so einer masiven Änderung wie mit den Fensterroutinen ist doch so ein winziger Fehler absolut super. Ich hab da immer mehr Bugs drin... :)

Ist ja auch keine lebenswichtige Funktion, fällt kaum auf.
Wo hast Du die Waits eingefügt? Wie hast Du getestet?
Hab in der ios.screeninit die Warteschleifen eingebaut:

Code: Alles auswählen

PUB screeninit(stradr,n)                                'screen: löschen, kopfzeile ausgeben und setzen
{{screeninit(stradr,n) - screen löschen, kopfzeile ausgeben und setzen}}
  curoff
  printctrl(BEL_SINIT)
  if stradr > 0
    waitcnt(cnt+clkfreq*3)
    print(stradr)
    waitcnt(cnt+clkfreq*3)
    printnl
  else
    printnl
    printlogo(0,0)
  waitcnt(cnt+clkfreq*3)
  sline(n)
  curhome
  curon
  ram_wrbyte(0,0,SIFLAG)
Die Funktion wird ja in "beltest" getestet und beim starten von "beltest" wird ja gleich screeninit verwendet - habs einfach immer mit F10 rübergeschoben zum schauen.
Wer macht's? Du oder ich?
Also im ios den Modus abfragen (TV oder VGA?) und nur im VGA-Modus Status und Logo ausgeben? Kann ich einbauen, ist kein Problem.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

Ich glaube ich hab was relevantes verstellt: Bei der relativen Positionierung (beltest) ist der Punkt bei 1,1 quasi in der zweiten Zeile. Bin mir aber sicher, das es vorer korrekt funktioniert hat. Kannst du mal schauen wie das bei dir aussieht? Hier im Video zu sehen:

http://youtu.be/Dg0iEim40Jw

Den überlappenden Test bauen wir wieder ein, das ist sinnvoll zu testen. Dann sind halt zwei Testphasen in beltest - einmal mit mittigen und einmal mit den Rand überlappenden Fenstern.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

Hab mal beltest mit einem Menü für eine Einzeltestauswahl und die Fenstertests um einen zweiten Part mit Randkollision (wie von dir angedacht) erweitert. Geht schneller bei der Fehlersuche.
Dateianhänge
beltest.spin
(29.02 KiB) 512-mal heruntergeladen
IMG_0851.JPG
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
U-Held
Beiträge: 69
Registriert: Mi 14. Dez 2011, 22:05

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von U-Held »

Hallo!
drohne235 hat geschrieben:Ich glaube ich hab was relevantes verstellt: Bei der relativen Positionierung (beltest) ist der Punkt bei 1,1 quasi in der zweiten Zeile. Bin mir aber sicher, das es vorer korrekt funktioniert hat. Kannst du mal schauen wie das bei dir aussieht?
Bei mir (Trios R52) sieht es genauso aus. Das war eine einsame Entscheidung von mir: Ich wollte noch das Feature "negative Positionswerte für Positionierung relativ zur rechten/unteren Kante" einbauen. Bei einem Byte für die Position kommt man aber nur noch von -128 bis +127. Um noch für VGA-Treiber mit 128 Spalten brauchbar zu sein (z.Z. nicht für den Hive portiert), habe ich einfach bei (0,0) angefangen. Und die Berechnung der Position wird auch geringfügig einfacher.

Es ist aber gar kein Problem, (1,1) in die linke obere Ecke zu setzen. (0,0) würde dann einfach ignoriert oder wie (1,1) interpretiert werden. In belflash.spin aus r52 müsste auf den Zeilen 854 und 867 ein " - 1" ergänzt werden, und aus dem davorstehenden "else" wird "elseif..." (für's Ignorieren - ungetestet):

Code: Alles auswählen

      elseif code > 0
        ccol += cx0 - 1
und

Code: Alles auswählen

      elseif code > 0
        crow += cy0 - 1
Wird Clipping gewünscht, lässt man das else an beiden Stellen stehen und schreibt (ebenfalls ungetestet):

Code: Alles auswählen

        ccol += (cx0 - 1) #> 0
Grüße vom U-Held
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

Bei mir (Trios R52) sieht es genauso aus. Das war eine einsame Entscheidung von mir: Ich wollte noch das Feature "negative Positionswerte für Positionierung relativ zur rechten/unteren Kante" einbauen. Bei einem Byte für die Position kommt man aber nur noch von -128 bis +127. Um noch für VGA-Treiber mit 128 Spalten brauchbar zu sein (z.Z. nicht für den Hive portiert), habe ich einfach bei (0,0) angefangen. Und die Berechnung der Position wird auch geringfügig einfacher.
Ist ok, dass lassen wir so. Hab mich nur getäuscht. :? Wenn ich dran denke, werd ich einfach den Test in beltest bei 0,0 beginnen lassen.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: VGA- und TV-Text-Mode vereinheitlicht

Beitrag von drohne235 »

Irgendwie blicke ich es gerade nicht: Kann man bel-tv.spin analog zum VGA-Treiber auf sechzehn Farben erweitern? :?:
'' tv_colors
''
'' pointer to longs which define colorsets
'' number of longs must be 1..64
'' each long has four 8-bit fields which define colors for 2-bit (four color) pixels
'' first long's bottom color is also used as the screen background color
'' 8-bit color fields are as follows:
'' bits 7..4: chroma data (0..15 = blue..green..red..)*
'' bit 3: controls chroma modulation (0=off, 1=on)
'' bits 2..0: 3-bit luminance level:
'' values 0..1: reserved for sync - don't use
'' values 2..7: valid luminance range, modulation adds/subtracts 1 (beware of 7)
'' value 0 may be modulated to produce a saturated color toggling between levels 1 and 7
Aktuell sind acht Farbkombinationen Vordergrund/Hintergrund definiert. Wenn die Tabelle nicht erweitert werden kann, müssen an diversen Stellen (sysconf/beltest) Fallunterscheidungen durchgeführt werden für die korrekte Anzahl Farben.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Antworten