|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.10.2004, 11:50 Titel: RGB-Werte für SCREEN 7 setzen |
|
|
Hallo
Ich habe versucht, die RGB-Werte der 16 Farben von Screen 7 mit
OUT 968, adresse
OUT 969, r
OUT 969, g
OUT 969, b
zu ändern und mir so eine eigene Farbpalette zu basteln. Bei Screen 9 klappt das wunderbar, die Farbnummer entspricht immer der Adresse der RGB-Einträge.
In meiner Naivität dachte ich nun, dass die 16 Farben von Screen 7 genauso funktionieren, zumal es dieselben sind, wie die ersten 16 von Screen 9. Nun scheint es aber so, dass die Einträge für die Farben 1-7 zwar auch unter dieser Adresse zu finden sind. Die RGB-Werte für die Farben 8-15 liegen aber unter den Adressen 16-23, also um 8 verschoben.
Die Hintergrundfarbe lässt sich garnicht ändern. Sie bleibt immer Schwarz. Andert man die Einträge unter der Adresse 0, ändern sich ALLE Farben - ausser der Farbe 0 ???
Weiss jemand von euch, warum das so ist ?
Gruss
Skilltronic |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.10.2004, 19:57 Titel: |
|
|
Siehe dazu den Quelltext in meiner .BMP-Bibliothek
http://www.dreael.ch/Deutsch/Download/WindowsBitmapBibliothek.html
speziell die Prozedur LiesPalette(), denn dort habe ich das Kunststück vollbracht, dass man in jedem SCREEN-Modus sowie jeder nur erdenklichen VGA-Registereinstellungen die Farben auslesen kann.
IBM hatte seinerzeit den Palettenregister-Design recht kompliziert angesetzt, aber dies hängt wahrscheinlich damit zusammen, dass ein Mechanismus gefunden werden musste, um die Rückwärtskompatibilität zu EGA und CGA möglichst gut nachahmen zu können.
Zuerst einmal muss man den Farbmodus auslesen (INT 10h, AX=101Ah), anschliessend noch die sog. PEL-Maske (INT 10h, AX=1019h) ermitteln. Schlussendlich muss man den eigentlichen Palettenindex mit INT 10h, AX=1007h auslesen, erst dann bekommst Du das entsprechende DAC-Register, welches Du lesen oder beschreiben kannst.
Seinerzeit hatte ich mit diesen VGA-BIOS-Routinen recht intensiv experimentiert. Bestimmt gibt es auch I/O-Register für Dich als OUT/INP()-Fan zu all diesen Dingen. Weiss jedoch nicht, ob diese 100% überall identisch sind... _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.10.2004, 22:05 Titel: Experimentierprogramm |
|
|
Habe noch aus der Vorphase das zugehörige VGA-Farben-Herumspielprogramm hervorgegraben:
http://beilagen.dreael.ch/QB/VGA_TEST.BAS
am besten starten und mit den Werten kräftig einmal herumspielen, bis man den Aufbau gut verstanden hat! Bedienung mit Pfeiltasten und <Tab>. Übrigens sieht man auch dort die entsprechenden VGA-BIOS-Routinen, um Werte setzen zu können. Bestimmt gibt es zu jedem verwendeten Register auch ein OUT/INP()-Pendant. :-)
In diesem Programm kann man den Farbgruppenmodus einmal testen, ebenso die PEL-Maske verändern und mit dem Farbindex spielen. Aufgrund einer längeren Spielphase mit diesem Programm entstand dann LiesPalette() in meiner Windows Bitmap Bibliothek. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 05.10.2004, 22:51 Titel: |
|
|
Hallo !
Danke für den Versuch, aber wenn ich mir das so ansehe werde ich die Tatsache, dass es so ist wohl einfach hinnehmen
OUT und INP() sind cool !
Ach ja - ist dir zum Timer noch was eingefallen ?
Gruss
Skilltronic |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 06.10.2004, 21:32 Titel: |
|
|
Aus dem selben Buch, wo ich einst für Sebastian die Details zum PSET in Assembler für SCREEN 12 einen Artikel einscannte, befindet sich folgende Zeichnung dazu:
http://beilagen.dreael.ch/QB/VGA_PAL.JPG
Wichtig ist, dass Du den Aufbau des Color Select- und Palettenregisters gut versteht - mit genau diesen Dingen kann man mit meinem letzten Programm herumspielen.
Selbstverständlich kannst Du Deine Farben wie ursprünglich beabsichtigt in den DAC-Registern setzen. Nur sind sie bei SCREEN 7 nicht schön der Reihe nach abgelegt! So sehe ich gleich in meinem Testprogramm, dass beim SCREEN 7-Modus 4 Gruppen à 64 Farben aktiviert werden. Standardmässig ist Farbgruppe 0 (=DAC-Register 0-63) selektiert. Dabei befinden sich im Palettenindex die Werte 0-7 und 16-23 in diesen 16 Registern => Folglich musst Du bei Deinem OUT-Befehl also SCREEN 13-mässig gesprochen die Farben 0-7 und 16-23 setzen!
Ob allerdings diese Palettenindex-Voreinstellung auf jedem PC vorhanden ist, kann ich nicht einmal sagen => am besten einmal mein Programm auf möglichst vielen verschiedenen Maschinen laufen lassen und die abgefragten Werte notieren. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 07.10.2004, 12:31 Titel: |
|
|
Hallo, dreael
Erst mal Danke für deine Hilfe. Das mit ColorSelect- und Palettenregister habe ich (hoffe ich zumindest) einigermassen verstanden. Ich habe mir auch schon einen eigenen .bmp-Lader für verschiedene Bildschirmmodi geschrieben und auch mit Palettenrundung usw. habe ich schon herumexperimentiert. Aber jetzt eben zum ersten mal unter SCREEN 7. Das dort die Farben unter 1-7 bzw. 16-23 liegen hatte ich ja schon durch ausprobieren herausgefunden. Am meisten wundert mich, dass der Eintrag 0 die gesamte Palette bis auf seinen eigenen Eintrag ändert.
Am ehesten hat mich deine Antwort mit der Kompatibilität zu EGA/CGA überzeugt. Könnte es sein, dass da irgendwie ein Bit weniger benutzt wird ? Denn die Zahlen von 0-7 und 16-23 erhält man ja auch, wenn man binär zählt, und dabei das 4. Bit "überspringt".
Ich komme mehr aus der Elektronikbastelecke, deshalb benutze ich gern Bitmanipulationen etc. Die Vorstellung mit Registern zu arbeiten erschliesst sich meinem Vertändnis vielleicht aus diesem Grund auch besser, als andere Methoden.
Gruss
Skilltronic |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|