Der flimmernde Falcon030

ATARIs neue Wundermaschine, der Falcon030, ist von Haus aus darauf ausgerichtet, auf RGB-Monitoren nur eine Bildwechselfrequenz von 50Hz einzustellen. Das muß nicht so sein, mit einem Trick kann er auch 60Hz erzeugen.

Da stand er nun, mein nagelneuer Falcon030 im schönen dunkelgrauen 1040er-Gehäuse. Da der Preis dieser Wunderwaffe mein gesamtes Gespartes geschluckt hatte, mußte ich mich mit einem alten Philips CM 8802 als Falcon-Farbmonitor begnügen. Aber was war das? Der Falcon030 war eine Flimmerkiste! Richtig augenschädigend war die Bilddarstellung. Natürlich nur 50Hz Bildwechselfrequenz. Und dann noch Interlace-Modus! Da kam bei mir schon richtiges Amiga-Feeling auf. Ich versuchte Abhilfe zu schaffen, indem ich eines dieser berühmten 50/60Hz-Umschaltprogramme für die alten STs startete - und ... nichts tat sich. Der Falcon030 blieb weiterhin im 50Hz-Modus.

Des Rätsels Lösung

Unverschämterweise hat ATARI das Bit, das bei den STs für die Umschaltung der Bildwiederholfrequenz verantwortlich war, im Hardware-Register $FFFF820A des Falcon einfach gestrichen. So ist auf dem Falcon die Möglichkeit nicht mehr gegeben, ST-kompatibel zwischen 50 - und 60Hz umzuschalten.

Die Rettung

Glücklicherweise wurde dem Falcon diese Möglichkeit nicht gänzlich entzogen: es gibt doch noch Hardware-Register, mit denen die Frequenz geändert werden kann. Doch ATARI ist natürlich so schlau, diese Register nicht zu dokumentieren, so daß man besser die Finger davon lassen sollte. Nehmen wir doch stattdessen die XBIOS-Funktion 88 (setmode). Mit dieser im Falcon neuen Funktion ist es möglich, verschiedene Videomodi einzustellen. Der Funktion wird ein 16-Bit-Wort als Parameter übergeben, in dem bitweise der einzustellende Videomodus kodiert ist. Die untersten 3 Bits kodieren dabei die Anzahl der Farb-Planes, die dargestellt werden sollen. Bit 3 schaltet zwischen dem 40 und dem 80-Spaltenmodus um. Das 4. Bit gibt an, ob ein VGA-Monitor angeschlossen ist, das 6. Bit schaltet den Overscan-Modus ein, Bit 7 ist das ST-Kompatibilitäts-Bit, und Bit 8 schaltet den Interlace-Modus auf RGB-Monitoren ein.

Doch um die Bildqualität auf RGB-Monitoren (das sind z.B. alle ATARI-SCxxxx-Monitore) zu verbessern, müssen wir das 5. Bit betrachten. Ist es gesetzt, wird das Bild mit 50Hz aufgebaut, d.h. der Bildaufbau beginnt jede 50tel Sekunde von neuem. Ist dieses Bit aber gelöscht, wird der Bildaufbau des Monitors schon jede 60tel Sekunde begonnen, d.h. der Monitor hat dann eine Bildwiederholfrequenz von 60Hz.

Das Programm

Gesagt, getan! Das Programm tut nun nichts anderes, als dieses Bit umzudrehen, so daß von 50Hz auf 60Hz geschaltet, oder eben umgekehrt von 60Hz auf 50Hz zurückgeschaltet wird, je nachdem, welchen Status Bit 5 vorher hatte. Vor der Umschaltung dieses Bits testet das Programm noch die Art des angeschlossenen Monitors mittels derXBIOS-Funk-tion 89 ab. Eine Umschaltung der Frequenz sollte auf einem ATARI-Schwarzweiß-Monitor oder einem VGA-Monitor besser unterlassen werden, denn es hat ja schlicht und einfach keinen Sinn. Abgesehen davon, daß sich beide Arten von Monitoren sowieso nicht umschalten lassen, laufen sie doch von vorneherein mit höheren Bildwiederholfrequenzen als RGB-Monitore. Aus diesem Grunde bricht das Programm ab, wenn es bemerkt, daß einer dieser Monitore angeschlossen ist.

Fernseher sind nun wieder anders zu behandeln. Es gibt manche Geräte, vor allem die neueren, denen es sehr gut bekommt, mit 60Hz betrieben zu werden. Manche anderen wiederum mögen es gar nicht, von ihren gewohnten 50Plz abzuweichen, und zeigen dies, indem sie das Bild nicht mehr richtig darstellen oder sie weigern sich, auch nur einen Teil des Bildes darzustellen. Deshalb fragt das Programm den Benutzer, ob er die Frequenz umschalten will, wenn er einen Fernseher angeschlossen hat. Damit bleibt es jedem User selbst überlassen, ob er seinem Fernseher das Risiko (oder Vergnügen) auferlegt, mit erhöhter Bildwiederholrate zu laufen.

Das Listing

Diejenigen Leser, die noch einige technische Details klären möchten, verweise ich auf das Listing, das wohl ausführlich genug kommentiert ist. Das Programm ist in Assembler verfaßt und kann mit jedem beliebigen Assembler übersetzt werden, selbst mit dem Turboass v1.7, da nur Befehle des 68000er-Befehlssatzes verwendet werden. Eine Übersetzung des Programmes in C, BASIC oder andere Hochsprachen bleibt jedem selbst überlassen, da sie keinerlei Probleme bereiten dürfte. Am besten kopiert man sich das Programm in den AUTO-Ordner der Boot-Partition. Fortan stellt der Falcon030 ein wesentlich ruhigeres Bild dar. Viel Spaß damit.


; 50/60 hz-Umschaltungsprogramm 
; für RGB-Monitore oder Fernseher 
; nur fur den FALCON 030!
; geschrieben von:
; (c)1993 by MAXON-Computer 
; Autor: Daniel Richter
;        Bergische Str. 54
;        W-5620 Velbert 1

            TEXT
; Anfangsmeldung ausgeben:

            lea     anfangstext(pc),a0 
            bsr.s   print

; Testen des Monitortyps:
; mon_type gibt in d0.w die Art des Bildschirms 
; zurück:
;
; d0.w= 0: ST-Monochrommonitor (SM 124)
; d0.w= 1: ST-Farbmonitor = RGB-Monitor
; d0.w= 2: VGA-Monitor
; d0.w= 3: Fernseher

            bsr.s   mon_type

; nur auf RGB-Monitoren oder Fernsehern 
; lohnt sich eine Umschaltung der Frequenz;

            cmp.w   #1,d0           ;RGB-Mon
            beq.s   stmonitor 
            cmp.w   #3,d0           ;TV
            beq.s   fernseher

; auf VGA-Monitoren braucht nicht umgeschaltet 
; zu werden, also Ausgabe eines Abbruchtextes:

            lea     nosensetext(pc),a0
            bsr.s   print

; auf Taste warten:

            bsr.s   getkey

programmende:

;Programm beenden:
            clr.w   -(sp) 
            trap    #1

;***********************************************
stmonitor:

; Herausholen des alten Videomodus 
; mittels setmode und Ubergabeparameter -1.
; setmode liefert in d0.w den alten Videomodus 
; zurück:

            moveq   #-1,d0 
            bsr.s   setmode

; Bit 5 legt fest, welcher Videomodus benutzt 
; werden soll:
; Bit 5=0: PAL-Modus (50 Hz)
; Bit 5=1: NTSC-Modus (60 Hz)
; Umschalten des Modus:
; Aus 0 wird 1 oder umgekehrt.
; Der neue Videomodus wird mittels setmode an 
; die Videohardware ubergeben:

            bchg    #5,d0
            bsr.s   setmode 
;und Sprung zum Programmende:

            bra.s   programmende 
;***********************************************
fernseher:
; Textausgabe, ob auf dem Fernseher die Frequenz 
; umgeschaltet werden soll:

            lea     evtltext(pc),a0
            bsr.s   print

; Warten auf Taste,
; wenn J oder j eingegeben wird, wird in die 
; Routine gesprungen, die den Videomodus
; umschaltet. Ansonsten wird zum Programmende 
; gesprungen:

            bsr.s   getkey 
            cmp.b   #"J",d0 
            beq.s   stmonitor 
            cmp.b   #"j",d0 
            beq.s   stmonitor

            bra.s   programmende 
;***********************************************
print:

; Diese Unterroutine druckt einen Text aus,
; dessen Adresse in a0.l angegeben wird: 
            pea     (a0)
            move.w  #9,-(sp) 
            trap    #1
            addq.l  #6,sp 
            rts
;***********************************************
getkey:

; Diese Unterroutine liest ein Zeichen von der 
; Tastatur ein, und gibt es in d0 zurück:

            movem.l d1-d3/a0-a3,-(sp)
            move.w  #8,-(sp)
            trap    #1
            addq.l  #2,sp
            movem.l (sp)+,d1-d3/a0-a3
            rts

;***********************************************
mon_type:

; Diese Unterroutine gibt die Art des ange-
; schlossenen Monitors in d0 zurück:

            movem.l d1-d3/a0-a3,-(sp) 
            move.w  #39,-(sp)           ;mon_type
            trap    #14
            addq.l  #2,sp

            movem.l (sp)+,d1-d3/a0-a3 
            rts

;***********************************************
setmode:

; Diese Unterroutine setzt einen neuen Videomodus. 
; Eingabeparameter:
; d0.w: neuer Videomodus
; Wenn d0.w=-1, dann wird nur der aktuelle 
; Videomodus zuruckgegeben.
; Ausgabeparameter:
; d0.w: alter Videomodus

            movem.l d1-d3/a0-a3,-(sp) 
            move.w  d0,-(sp)
            move.w  #83,-(sp)           ;setmode
            trap    #14 
            addq.l  #4,sp

            movem.l (sp)+,d1-d3/a0-a3 
            rts
;***********************************************
            DATA
anfangstext: DC.B "50/60 hz Umschaltungsprogramm", 13,10 
            DC.B "für FALCON 030 von D.Richter.",13,10,0
nosensetext: DC.B "Dieses Programm macht keinen Sinn auf",13,10 
            DC.B "Ihrem Monitor.", 13,10,0 
evtltext:   DC.B "Sie haben einen Fernseher angeschlossen",13,10 
            DC.B "Evtl, verträgt er die Hertzumschaltung",13,10 
            DC.B "nicht. Bitte ",27,"pJ",27 
            DC.B "q drücken zum Umschalten", 13,10
            DC.B "der Frequenz.",13,10,0
            EVEN
            END

Daniel Richter
Aus: ST-Computer 05 / 1993, Seite 68

Links

Copyright-Bestimmungen: siehe Über diese Seite