Arbeitsweise von OVERSCAN.PRG
-----------------------------

  Installation
  ------------
  Zuerst testet das Programm, ob ein gltiges TOS vorliegt, ob der Schalter
  umgelegt ist und ob das OVERSCAN.PRG nicht doch schon installiert ist.
  Dann wird der ntig Bildschirmspeicher beschafft, indem man den zustzlich
  bentigten Speicherplatz aus der MemoryAllocatedList austrgt. Damit wird
  er auch bei Programmende nicht mehr freigegeben.
  Bei einem RAMTOS wird der Fehler beim Scrollen von TOS-Texten gepatched.
  Dieser Fehler beruht darauf, da davon ausgegangen wird, das die Breite
  des Bildschirms in Bytes immer durch 16 teilbar ist.
  Danach werden der AES/VDI-Trap ,der GEMDOS-Trap, der XBIOS Trap und der
  IKBD-Vektor und der VBL-Vektor umgehngt. Bei BlitterTOS wird zustzlich
  der Mouse_Vektor umgesetzt, da die Orginal-Routinen zum Zeichnen der
  Maus nicht mit Bildschirmen grer 32K zurechtkommen.
  Danach werden die LineA-Variablen auf die neuen Werte gesetzt und die
  TOS-Ausgabe neu initialisiert.Der Bildschirmspeicher wird komplett auf
  Schwarz gelscht, da man sonst die Rcklaufstrahlen sehen wrde.
  Nun wird getestet, ob eine SonderTaste gedrckt ist und gegebenenfals zur
  BenutzerInstallation geprungen, wo man das Programm auf seinen Bildschirm
  anpassen kann.
  Wurde keine SonderTaste gedrckt folgt ein kleines Intro, der Bildschirm
  vergrert sich (symbolisch) von seiner alten Gre bis zur neuen Gre.
  Auerdem wird der alte BildschirmInhalt der ja nicht lesbar war in den
  neuen OVERSCAN-Bildschirm kopiert.
  Je nachdem welcher Fall vorlag, beendet sich OVERCAN.PRG mit der Meldung
  'OVERCAN installed' und bleibt resident im Speicher oder mit einer der 
  Fehlermeldungen und bleibt nicht im Speicher.

  Warum Traps & Vektoren
  ----------------------
  Es reicht nicht aus, den OVERSCAN-Modus einmal einzustellen, weil z.B.
  das GEM beim Starten alle LineA-Werte berschreibt und auch gleich noch
  32K des Bildschirms auf Wei setzt, die sich beim SchwarzWei-Monitor als
  strende Rcklaufstreifen bemerkbar machen.Ausserdem gibt es Programme,die
  direkt in den Bildschirmspeicher schreiben oder den Bildschirmspeicher mit
  SetScreen an eine andere Stelle verlegen, und dabei den notwendigen Offset
  zwischen v_bas_add und dem VideoAddresszhler vernichten. (Zum Aufbau des
  Bildschirmspeicher siehe weiter unten).

  AES/VDI-Trap
  ------------
  Es werden folgende Funktionen abgefangen :
  v_opnwk     :	Es wird testet, ob GEM seinen Bildschirm anmelden will.
                Wenn ja, wird die OrginalRoutine ausgefhrt und danach
                wird der OVERSCAN-Modus neu installiert und die Rnder des 
                Bildschirms auf Schwarz gelscht.
		Diese Routine wird auch beim Wechsel der Auflsung aufgerufen.
  v_clrwk     : Bei einer BildschirmWorkstation wrden 32K des Bildschirm-
  		Speichers auf wei gesetzt, so da diese Routine ersetzt werden
  		mu.
  v_opnvwk    :
  v_clsvwk    : Werden abgefangen, um mitprotokollieren zu knnen, welcher
   		vdi_handle zu einer BildschirmWorkstation gehren. Es wre
   		sehr ungnstig, wenn statt eines Druckblattvorschubes mit
   		v_clrwk pltzlich der Bildschirm gelscht wrde ! 
  vs_color    : Beim Monochrom-Monitor wird getestet, ob die HintergrundFarbe
  		gendert werden soll. Wenn ja, werden die Bereiche im rechten
  		Rand auf den Wert gesetzt, der nun Schwarz darstellt, damit
  		die RcklaufStrahlen nicht zu sehen sind.
  GEMDOS-Trap
  -----------
  Bei den Aufrufen Pterm und Pterm0, also dem Ende eines Programms,wird
  vorsichtshalber (s.o.) der OVERSCAN-Modus wieder eingestellt und die
  BildschirmRnder gelscht.
  
  XBIOS-Trap
  ----------
  Physbase    :	Im Normalfall wird der Wert von Logbase zurckgeliefert,
  		weil manche Programme diese Funktion benutzen um die
  		BildschirmAnfangsAddresse zu ermitteln und unter
  		OVERSCAN ein Offset zwishen Logbase und Physbase 
  		existiert.
  Setpallette :
  Setcolor    : Werden wie vs_color so gepatched, da auf dem RcklaufStrahlen
  		beim MonochromMonitor immer schwarz sind.
  Vsync       : Die OrginalRoutine orientiert sich am alten HardwareSignal und
                meldet so nach 200/400 Zeilen, da der Rcklauf begonnen hat,
                obwohl noch mehr Zeilen ausgegeben werden.
                Die neue Funktion wartet wirklich auf den Rcklauf.
  Setscreen   : Normalerweise ist Setscreen nicht mehr erlaubt und so
  		passiert garnichts. Speziell an OVERSCAN angepate Programme
  		knnen diese Funktion aber doch benutzen.
		Da die OrginalRoutine beim Wechsel der Auflsung 32K Bildschirm-
		Speicher lscht, die LineA-Variablen neu initialisiert und sich
		auerdem auf die alte Vsync-Funktion verlt (somit mitten im 
		Bild die Auflsung wechselt und dabei den Shifter irritiert) 
		mu fr dem Fall eines AuflsungsWechsels ersetzt werden.
 		Zuerst wird mit der neuen Vsync-Funktion auf den Bildanfang
 		gewartet, dann die Auflsung gewechselt. Nun darf die Orignal-
 		funktion die LineA-Werte und die Fonts neu initialisierung. 
 		Danach werden die fr OVERSCAN notwendigen Werte wieder gesetzt
 		und der Bildschirm korrekt gelscht.
 		 
  Und zum Schlu werden noch die neuen Xbios-Funktionen abgefangen und
  bearbeitet, als da wren :
  Oscanis()   : Liefert die OVERSCAN-VersionsNummer oder aber 84 wenn
 		kein OVERSCAN installiert ist.
  Oscantab(r) : Liefert die einen Zeiger auf die BildschirmWerte einer
 		bestimmten Auflsung 'r'. Ist r negativ, so werden die 
 		aktuellen Werte zurckgeliefert.
  Oscanphy(m) : Erlaubt es, den PhysbaseEmulator umzuschalten, damit man
                den Offset zwischen Logbase und Physbase feststellen kann.
                Bei 0 wird er aus, bei 1 wird er angeschaltet. Bei -1 wird
                der aktuelle Zustand zurckgeliefert. 	
  Oscanscr(m) : Erlaubt es die Setscreen-Funktion wieder anzuschalten.
  		Normalerweise kann man unter OVERSCAN-Modus die Auflsung
  		nicht wechseln oder den Bildschirm verlegen.
  		Bei 0 ist Setscreen nicht erlaubt, bei 1 ist Setscreen
  		mglich. Bei -1 wird der aktuelle Zustand zurckgeliefert.
  Oscanvb(m)  : Erlaubt es die VB-RnderTestRoutine auszuschalten, da diese
                3% Rechenzeit bentigt, was bei zeitkritischen MidiRoutinen
                aber schon zuviel wre.  ( Hallo Steinberg Research... 
                    die Routine ist extra fr Euch eingebaut worden !)

  Diese Funktionen sollten nur von speziell auf OVERSCAN angepaten
  Programmen benutzt werden !
  
  LINE-A_Vektor
  -------------
  Hier werden die Parameter von BIT_BLT und COPY_RASTER auf Gltigkeit
  untersucht und ggf gendert.
  
  IKBD-Vektor
  -----------
  Hier wird die Tastenkombinationen Shift/Shift/Clear abgefangen. Da
  das Lschen des Bildschirms zu lange dauern  wrde, wird hier
  nur ein Flag gesetzt, das vom VB-Vektor ausgewertet wird. 

  VB-Vektor
  ---------
  Hier ist eine TestRoutine installiert, die in jedem VB eine
  Speicherstelle berprft. Ist das BildschirmlschFlag gesetzt, oder
  die TestRoutine hat 'Dreck' gefunden, so werden die BildschirmRnder
  gelscht. Bei BlitterTOS wird auerdem noch der Mouse-Vektor berwacht.
  
  Mouse-Vektor
  ------------
  Dieser Vektor ist nur bei BlitterTOS installiert. Es werden alle alten
  MausRoutinen durch die des TOS 1.4 ersetzt.

  Hardcopy-Vektor
  ---------------
  Auf Wunsch wird im MonochromModus eine Routine Routine installiert, die
  den Bildschirm als IMG-Datei auf dem aktuellen Laufwerk ablegt.
  Ansonsten wird die alte HardcopyRoutine gepatched, so da sie 
  zumindest 640 Pixel pro Zeile ausgibt. Die HardcopyRoutine klinkt sich
  entweder an das Ende einer XBRA-Liste und testet dann keine
  SonderTasten mehr ab oder wenn es am Anfang in der Liste steht
  reagiert diese Routine nur auf ALT-HELP ohne SonderTasten.

Der Aufbau des BildschirmSpeichers
----------------------------------

 freier Speicher        |                                                   |
                        |                                                   |
 memtop             ->  +---------------------------------------------------|
                        |      SicherheitsPuffer fr den Rcklauf zum       |
                        |      Bildschirmanfang, mu schwarz sein, da       |
                        |      man sonst den Rcklaufstrahl sieht.          |
 VideoAddressZhler ->  +---------------------------------------------------+
                        | Das Signal, was durch die kleine Schaltung erzeut | 
                        | wird setzt leider schon im Rcklauf ein, also wird|
                        | einfach ein Offset angebracht, der dieses wieder  |
                        | ausgleicht.                                       |
 v_bas_add          ->  +-------------------------------------------+-------+
                        | Beginn des eigentlichen                   |       |
                        | BildschirmSpeichers. Das Signal der       |       |
                        | Schaltung dauert leider zu lange und      |Unge-  |
                        | reicht in den Zeilenrcklauf hinein.      |nutzter|
                        | Deswegen existiert rechts ein ungenutzter |       |
                        | Bereich, der schwarz sein mu, damit man  |Bereich|
                        | ihn nicht sieht.Die Breite des Bereiches  |       |
                        | hngt davon ab, wieviele Pixel auf dem    |       |
                        | Monitor dargestellt werden und ab wann der|       |
                        | Strahlrcklauf beginnt. Die ganze Breite  |       |
                        | des BildschirmSpeichers ist durch das     |       |
                        | HardwareSignal vorgegeben.                |       |
                        +-------------------------------------------+-------+
                        | Ein kleiner Bereich hinter dem Bildschirm mu auch|
                        | Schwarz sein . Siehe oben.                        |
  phystop            -> +---------------------------------------------------+

  Wie man sieht, hngt alles von dem Signal ab, das Stefan zusammengebraut hat.
  Dieses ist leider frequenzabhngig, deswegen geht es nicht bei 60 Hz
  (ungerade Anzahl Bytes) und im Monochrom Betrieb gibts nicht dieselbe
  Breite wie in Farbe.

  Das es berhaupt im ATARI ein SignalGemisch gab, da den Shifter eine so genau
  definierte Zeitdauer ansteuert, das der Shifter eine durch 8 teilbare
  Anzahl von Bytes rausschreibt, grenzt eigentlich an ein kleines Wunder.

  Stefan hat sehr lange gesucht, aber es ist kein Signal vorhanden, bei dem der
  ungenutzte Bereich rechts kleiner wre. Das benutzte Signal ist also 
  ein Kompromiss zwischen Speicherplatz-Vergeudung und maximaler Pixelbreite
  auf dem Monitor. 
  ( Das Signal kann man brigens ganz auf High legen, dann wrde der Shifter
    immer den BildschirmSpeicher auslesen, also auch im ZeilenRcklauf und im
    StrahlenRcklauf. Somit htte man nochmehr BildschirmSpeicher verschenkt...)

  Der neue Bildschirmspeicher hat eine Lnge von 68 KB, bei BlitterTOS 100KB,
  davon werden auf dem Monitor ca 55KB in niedriger , 58KB in mittlerer und
  40KB in hoher Auflsung dargestellt, hngt natrlich alles von der Einstellung
  ab.

  Die Gre wurde konstant gewhlt, weil beim Wechseln des Monitors von Schwarz/
  Wei auf Farbe( und umgekehrt) geschaltet werden kann, und dann eine andere
  Bildschirmspeichergre notwendig wre. 
  Den richtigen Zugewinn an Bildpunkten hat man also in der mittleren
  Auflsung !


Karsten Isakovic
