;*******************************************************************************
;* Patchfile fr das deutsche TOS 3.06 V2.0 (TosPatch V2.9.2 erforderlich)
;*
;* Das Format dieser Datei kann man wohl den Zeilen selbst entnehmen.
;* Mit dem ";" beginnt eine Kommentarzeile (wer h„tte es gedacht?), damit
;* kann man sehr sch”n einzelne Patches auslassen. Die meisten Patches haben
;* jetzt jedoch eine Variable am Anfang, die bestimmt, ob der Patch eingebunden
;* wird oder nicht. Zus„tzlich kann in einigen F„llen mit dieser - oder auch
;* einer darauf folgenden Variablen - der Patch konfiguriert werden.
;*
;* Ich hoffe, daž durch dieses Patchprogramm das Žndern des TOS nun endlich
;* auf geregelten Bahnen verl„uft, denn jeder kann relativ einfach Patches
;* ver”ffentlichen und auch nicht so erfahrene User k”nnen diese bernehmen.
;*
;* Wer eigene Patches hinzufgen will, sollte eine eigene Kennung w„hlen,
;* und diese im folgenden Kopf eintragen. Patches von anderen NIEMALS „ndern!
;* Vielleicht hat sich derjenige doch was dabei gedacht! Wenn doch, so ist
;* die Žnderung genau zu dokumentieren! Es muž herausgestellt werden, wie
;* der Patch vorher aussah und was ge„ndert wurde.
;*
;* Nochwas zu Weitergabe: Es sollten nur die Patches aktiviert sein, die fr
;* JEDEN etwas bringen. Also NUR FEHLERKORREKTUREN. Alle "Verbesserungen" sind
;* besser zu deaktivieren. Wer sie will, kann sie immer noch bernehmen.
;*
;* Kennung: | Name des Urhebers bzw. desjenigen, der den Patch gesammelt hat
;* -------------------------------------------------------------------------
;*   MRF    | Markus Fritze, ä-soft
;*  HUCKY   | ???
;*   TFR    | Jrgen Meyer
;*   MH     | Markus Heiden
;*   TRK    | Tracker
;*   RB     | Ralf Biedermann
;*   SE     | Steffen Engel
;*
;* Bei Fehlermeldungen und Erweiterungen bitte ich um eine Mitteilung an meine
;* InterNet-Adresse:
;*
;* Markus_Heiden@public.uni-hamburg.de
;*
;* Oder ”ffentlichen Messages in folgende Box:
;* D-Box Hamburg (040)72910042 (NUR eigenes Tauschsystem: DTAUSCH)
;*
;* TosPatch: ½ 1990    ä-soft, Markus Fritze (MRF)
;*           ½ 1992-97 Markus Heiden (MH)
;*
;* Bitte wendet Euch nicht mehr an Markus Fritze, wenn Ihr Probleme habt,
;* sondern ausschliežlich an mich (Markus Heiden) !!!

;*******************************************************************************
;* MH:
;* TOS-Daten festlegen.
;* >>> Achtung: TOS-L„nge (.LENGTH) MUSS durch 16 teilbar sein!

.BASE   = E00000    ;TOS-ROM-Adresse (TOS 3.06: $E00000)
.LENGTH =  80000    ;TOS-L„nge       (TOS 3.06:  $80000)
.WIDTH  =    .32    ;TOS-Breite      (TOS 3.06:     .32)

.NATION = .FRG      ;TOS-Nationalit„t (Federal Republic of Germany)

;*******************************************************************************
;* MRF:
;* Einleseformat des Patchprogramms

<TT_TOS.IMG         ;Ungepatches TOS 3.06 aus File TT_TOS.IMG lesen.
;<*                  ;ROM auslesen (.LENGTH muž gleich der TOS-L„nge sein).

=24.09.1991,.NATION ;Muss die Version vom 24.9.1991 sein und die
                    ;TOS-Nationalit„t muss stimmen! (sonst Message)

;*******************************************************************************
;* MRF:
;* Ausgabeformat des Patchprogramms:
;* >[Anzahl der TOS-Files] [Obere Ramgrenze des Rechners - .LENGTH]

;>1 01F80000 ;  16MB-TT-RAM / 1 File ;Im TT-Ram l„uft das TOS schneller!
;>1 01780000 ;   8MB-TT-RAM / 1 File ;Dies ersetzt (fast) ROMRAM
;>1 01380000 ;   4MB-TT-RAM / 1 File ;oder „hnliche TOS-Beschleuniger!
>1 00380000 ;   4MB-ST-RAM / 1 File ;(FastVar nicht implementiert)
;>1 00280000 ;   3MB-ST-RAM / 1 File
;>1 00200000 ; 2,5MB-ST-RAM / 1 File ;Mit weniger als 2MB Speicher macht es
;>1 00180000 ;   2MB-ST-RAM / 1 File ;kaum Sinn TOS 3.06 im Ram zu halten,
;>1 00080000 ;   1MB-ST-RAM / 1 File ;aužer vielleicht zum Testen der Patches.

;>1          ; 1 nicht relozierte Datei   (TOS.IMG) erzeugen, z.B. fr ROMRAM.
;>2          ; 2 nicht relozierte Dateien (TOS.LO/HI) erzeugen.
;>4          ; 4 nicht relozierte Dateien (TOS.EE/EO/OE/OO) erzeugen.

;*******************************************************************************
;* MH:
;* Reloc-Korrekturen NUR (!!!) fr das TOS 3.06 vom 24.9.1991
;* nach einer Idee von Andreas Kromke (KAOS 1.2 bzw. KAOS 1.4).
;* Die Reloc-Korrekturen untersttzen TOS-L„ngen bis $100000.
;* [FRG]

_SWITCH .NATION
_CASE .FRG:
!1D6,1514,1CE6,1E88,28D8,38B2,650E,73B4,E5BC,14126,1561C,15676,15D70,163C8
!169D6,16B24,1738E,173A2,1B5B0,1C6C2,1CB62,1CCDA,1D7CA,1ECAA,1FE62,204CA
!20730,207FE,20A24,21290,242BA,24C76,26642,2665E,2A01E,2A10C,2A3CA,2F268
!2F290,2F47E,3091C,362AC,36518,36B18,36B1A,371E0,371E2,377AA,383AA,38C7A
!39580,395D4,3969C,39876,39956,39964,399A0,399A2,399A4,399A6,39AB0,39F6A
!39F74,39F7A,3A1FE,3A4BE,3A6BE,3A6CE,3A714,3A8CE,3A914,3ACC4,3B518,3B718
!3B898,3BC98,3BEB0,3BFB6,3C356,3C76E,3D062,3D41E,3D420,3D422,3D424,3D426
!3D428,3D42A,3D42C,3D42E,3D430,3D432,3D434,3D436,3D438,3D43A,3D43C,3D61E
!3D620,3D622,3D624,3D626,3D628,3D62A,3D62C,3D62E,3D630,3D632,3D634,3D636
!3D638,3D63A,3D63C,3FA66,4254C,426E6,42874,42878,43938

! 14F6.. 1516       ;Bombenimage
!36018..36420       ;Atari-Logo
!3676C..368EC       ;Keyboard-Tabelle
!36CCE..3714E       ;6x6 Fontimage
!373AA..37BAA       ;8x8 Fontimage
!37BAA..38BAA       ;8x16 Fontimage
!38E60..3CE60       ;16x32 Fontimage
!3E514..3E532       ;Desktop-Tastaturbelegung

_DEFAULT: _IF .RELOCADR <> .BASE
           _ERROR 'Nation wird nicht untersttzt'
          _ENDIF
_ENDSWITCH

;*******************************************************************************
;* MH:
;* Berechnen und Setzen der CRC-Prfsumme von TOS 2.06/3.06.
;* Beim Start des TOS  erscheint sonst die Message 'CRC-error in chip X.',
;* falls der Test nicht ausgeschaltet ist (s.u.).
;* (Auch wichtig fr den RAMRESET-Patch, da sonst bei jedem Hardreset das TOS
;* aus dem RAM entfernt wird.)

.CRC = 1            ;1: CRC berechnen, 0: CRC nicht berechnen

;*******************************************************************************
;* Ins Patchdirectory wechseln:

-PATCHFLD.306\      ;Dsetpath("patchfld.306\")

;*******************************************************************************
;* SE: (eingebunden von MH)
;* PAK III-Patches Version 2 (fr 68020- und 68030-Version). Es gibt auch noch
;* ein modifiziertes Atari-Fuji mit PAK/3-Schriftzug von SE (s.u.).
;* [FRG/USA]
;*
;* >>> Einige andere Patches werden deaktiviert (s.u.).

.PAK = 1            ;1: PAK-Patches einbinden, 0: PAK-Patches nicht einbinden

.StaticRAM = 0      ;1: TOS fr Static-RAMs, 0: TOS fr ROMs/EPROMs
.Grafik_Bombs = 0   ;1: Bomben auf Grafikkarten/Grafikerweiterungen ausgeben,
                    ;   funktioniert bei allen Systemen mit Bitplanes.
                    ;0: Nicht-Grafikkartenbesitzer oder Grafikkartenbesitzer
                    ;   mit angeschlossenem ST-Screen sollten diesen Patch
                    ;   herauszunehmen, da die Bomben dort sichtbar sind.
.BootJMP = 1        ;1: PAK-Trick, um mit FC-TOS auf Mainboard in die
                    ;   PAK-ROMs hochzukommen, einbinden. Falls Probleme
                    ;   mit diesem Patch auftauchen, sollte man den RSC-
                    ;   Patch aktivieren.
                    ;0: PAK-Trick nicht einbinden.
.Blitter = 0        ;1: Blitter erkennen, 0: Blitter nicht benutzen (Default)
.HasTTMfp = 0       ;1: Dieser ST hat einen nachgersteten TT-Mfp,
                    ;0: Kein TT-Mfp vorhanden.
.MSTE = 0           ;1: MSTE/TT-HD-Umschaltung nicht eleminieren (fr MSTEs).
                    ;0: MSTE/TT-HD-Umschaltung fr normale STs wegpatchen.
.Alt_Sync = 1       ;1: Alternative Bildschirmsynchronisierung benutzen
                    ;   (fr NEWVIDEO-Patch erforderlich!).
                    ;0: Normale Synchronisierung benutzen.

_IF .PAK
 +PAK3_TP.FIL
_ENDIF

;*******************************************************************************
;* MH:
;* NEWVIDEO-Patch.
;* Dient zum Aktivieren eines EPROM-Sequencers schon w„hrend der Bootphase.
;* [FRG]
;*
;* >>> Nur fr STs mit EPROM-Sequencer Videoerweiterung

.NEWVIDEO  = 0      ;1: Patch einbinden, 0: Patch nicht einbinden
.SWITCH    = 0      ;0: Nicht umschalten, 6,7: Umschalten mit PSG Bit 6,7

.X_ST_LOW  =  .320  ;ST-Low : Default  320 * 200
.Y_ST_LOW  =  .200
.X_ST_MED  =  .640  ;ST-Med : Default  640 * 200
.Y_ST_MED  =  .200
.X_ST_HIGH =  .640  ;ST-High: Default  640 * 400
.Y_ST_HIGH =  .400

_IF .NEWVIDEO
 +NEWVIDEO.FIL

 _IF .PAK !A! !NOT! .Alt_Sync
  /"Unbedingt alternative Bildschirmsynchronisierung aktivieren!"
 _ENDIF
_ENDIF

;*******************************************************************************
;* MH:
;* 60Hz beim Start in Farbe (Original: 2 w„re 50Hz).
;* [ALL]

.COLOR_60HZ = 0     ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .COLOR_60HZ
 _IF .PAK
  175F $00
 _ELSE
  D5   $00
 _ENDIF
_ENDIF

;*******************************************************************************
;* MH:
;* MMU-Reset verhindern, damit das TOS auch im TT-RAM lauff„hig ist.
;* Fr ROMRAM n”tig!
;* [ALL]
;*
;* >>> Achtung: Nur fr RAM-TOS!
;* >>> Dieser Patch funktioniert nicht mit den PAK III-Patches.

.NO_MMU_RESET = 0   ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .NO_MMU_RESET !A! (.PAK = 0)
 68   $4E,71,4E,71,4E,71,4E,71
 1702 $4E,71,4E,71,4E,71,4E,71,4E,71,4E,71,4E,71,4E,71
_ENDIF

;*******************************************************************************
;* MH:
;* Modifizierte Reset-Routine. H„lt RAM-TOS 3.06 auch bei Hardreset von
;* Tastatur und Resettaste (Resettaste nur bei _RAMR_S2.ABS) im RAM.
;* [FRG/USA]
;*
;* >>> Achtung: Nur fr RAM-TOS!
;* >>> Dieser Patch funktioniert nicht mit den PAK III-Patches.

.RAMRESET = 0       ;1: RAMRESET einbinden, 0: RAMRESET nicht einbinden

_SWITCH .NATION
_CASE .FRG: .HARD_RESET = 376A
_CASE .USA: .HARD_RESET = 3710
_DEFAULT: .RAMRESET = 0
_ENDSWITCH

_IF .RAMRESET !A! (.PAK = 0)

 _IF .RELOCADR>=1000000
  D8 RAMR_F2.ABS         ;kein Konfigurationstest, TT-RAM-TOS nicht l”schen,
                         ;Speicher ab $100 l”schen
                         ;Tastatur-Soft-Reset: Reset
                         ;Tastatur-Hard-Reset: CRC-Test/Speicher l”schen/Reset
                         ;Resetknopf         : Normaler Reset
                         ;Falls beim CRC-Test ein Fehler auftritt,
                         ;wird das TOS aus dem Ram entfernt.

  119 $.WIDTH/8-1.B      ;Parameter fr CRC Berechnung setzen
  120 $(.LENGTH-.WIDTH/4)/(.WIDTH/8).L
  128 $((.WIDTH/8)!A!7)*200!O!5088.W
  142 $((.WIDTH/8)!A!7)*200!O!5088.W

  .HARD_RESET $150-~.W   ;Key-Hardreset auf eigene Routine umbiegen
 _ENDIF

 _IF .RELOCADR<FA0000
  D8 RAMR_S2.ABS         ;kein Konfigurationstest, ST-RAM-TOS nicht l”schen,
                         ;Speicher ab $100 l”schen
                         ;Tastatur-Soft-Reset: Reset
                         ;Tastatur-Hard-Reset: CRC-Test/Speicher l”schen/Reset
                         ;Resetknopf         : CRC-Test/Reset
                         ;Falls beim CRC-Test ein Fehler auftritt,
                         ;wird das TOS aus dem Ram entfernt.

  119 $.WIDTH/8-1.B      ;Parameter fr CRC Berechnung setzen
  120 $(.LENGTH-.WIDTH/4)/(.WIDTH/8).L
  128 $((.WIDTH/8)!A!7)*200!O!5088.W
  142 $((.WIDTH/8)!A!7)*200!O!5088.W

  .HARD_RESET $150-~.W   ;Key-Hardreset auf eigene Routine umbiegen
 _ENDIF

_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Speicher ab $100 initialisieren und nicht ab $400. Damit hat man neben den
;* Vektoren keinen Mist mehr im Ram.
;* [ALL]
;*
;* >>> Dieser Patch funktioniert nicht mit dem RAMRESET-Patch.

.MEM_INIT = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .MEM_INIT !A! (.RAMRESET = 0)
 _IF .PAK
  1AE $0100.W
 _ELSE
  196 $0100.W
 _ENDIF
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* _shell_p wird beim RESET zurckgesetzt (wie es sich geh”rt).
;* [ALL]
;*
;* >>> Dieser Patch funktioniert nicht mit den PAK III-Patches.

.SHELL_P = 0        ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .SHELL_P !A! (.PAK = 0)
 234 $42,B8,04,F6,3E,7C,57,58,42,38,0A,12
_ENDIF

;*******************************************************************************
;* TFR: (angepasst von MH)
;* Setzt die Steprate der Laufwerke A: und B:
;* $00 = 6 ms,   $01 = 12 ms,   $02 = 2 ms,   $03 = 3 ms.
;* Adresse dieses Patches durch TRK.
;* [ALL]

.SET_STEP  = 0      ;1: Patch einbinden, 0: Patch nicht einbinden
.STEP_RATE = 03     ;Gewnschte Steprate hier eintragen.

_IF .SET_STEP
 34E $.STEP_RATE.W
_ENDIF

;*******************************************************************************
;* Harun Scheutzow: (implementiert von MH)
;* HD-Cookie installieren. Nicht fr Mega STE/TT !!!
;* Format: 0xkkkkkk / normal (Mega STE/TT): $01415443
;* kkkkkk: Kennung, wer den Cookie installiert hat.
;* x=0: normale Schreibdichte (DD 720kB/360kB)
;* x=1: Hohe Schreibdichte (HD 1.44MB)
;* x=2: Extrahohe Schreibdichte (ED 2,88MB)
;* x>2: reserviert
;* [ALL]
;*
;* >>> Achtung: Nicht fr Mega STE / TT !

.SET_COOKIE = 1          ;1: Patch einbinden, 0: Patch nicht einbinden
.FDC_COOKIE = 01000000   ;FDC-Cookie-Wert, z.B. HD: 01000000 oder ED: 02000000.

_IF .SET_COOKIE
 _FILL 426,434,$4E71.W
 43C $.FDC_COOKIE.L
_ENDIF

;*******************************************************************************
;* MH:
;* Fehler beim FPU-Test beheben.
;* [ALL]
;*
;* >>> Dieser Patch funktioniert nicht mit den PAK III-Patches,
;*     ist dort aber bereits integriert.

.FPU_TEST = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .FPU_TEST !A! (.PAK = 0)
 462 $40,00
_ENDIF

;*******************************************************************************
;* MH: (19.02.1997)
;* Logoausgabe aufl”sungsunabh„ngig.
;* [ALL]

.LOGO = 1           ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .LOGO !O! .NEWVIDEO
 750
 ~ $22,78,04,4E                     ;MOVEA.L   $44E.S,A1
 ~ $45,F8,3A,1A                     ;LEA       $3A1A.S,A2
 ~ $38,12                           ;MOVE.W    (A2),D4
 ~ $3A,2A,FF,FE                     ;MOVE.W    -2(A2),D5
 ~ $30,05                           ;MOVE.W    D5,D0
 ~ $C0,FC,00,08                     ;MULU      #8,D0
 ~ $D2,C0                           ;ADDA.W    D0,A1
 ~ $70,55                           ;MOVEQ     #$55,D0
 ~ $72,05                     ;L0000:MOVEQ     #5,D1
 ~ $24,49                           ;MOVEA.L   A1,A2
 ~ $24,04                     ;L0001:MOVE.L    D4,D2
 ~ $36,18                           ;MOVE.W    (A0)+,D3
 ~ $32,C3                     ;L0002:MOVE.W    D3,(A1)+
 ~ $53,42                           ;SUBQ.W    #1,D2
 ~ $66,FA                           ;BNE.S     -6(PC)               L0002
 ~ $51,C9,FF,F4                     ;DBF       D1,-12(PC)           L0001
 ~ $43,F2,50,00                     ;LEA       0(A2,D5.W),A1
 ~ $51,C8,FF,E8                     ;DBF       D0,-24(PC)           L0000
 _FILL ~,79E,$4E71.W                ;NOP
_ENDIF

;*******************************************************************************
;* MH:
;* CRC-Routine des TOS evtl. anpassen (z.B. fr 1024kB TOS 3.06).
;* [ALL]

7D6 $(.LENGTH-.WIDTH/4)/(.WIDTH/8).L
7DC $.WIDTH/8-1.W
7E6 $.WIDTH/8.W
7F8 $.LENGTH-.WIDTH/4.L
802 $.WIDTH/8.W

;*******************************************************************************
;* MH:
;* Nur CRC-Check ausschalten.
;* [ALL]
;*
;* >>> Dieser Patch berschneidet sich mit einem PAK III-Patch, wenn
;*     .StaticRAM = 1 ist. Das macht aber nichts, da der entsprechende Patch
;*     (Abbruch bei CRC-Fehler im TOS) komplett berschrieben wird.

.KILL_CRC = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .KILL_CRC
 _FILL 7D4,886,$4E71.W
_ENDIF

;*******************************************************************************
;* MH:
;* Boot-Device-Fehler beheben (siehe ST-Computer 1/90).
;* [ALL]

.BOOT_DEV = 1       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .BOOT_DEV
 912 $30
_ENDIF

;*******************************************************************************
;* MH:
;* Verringern der Zeitspanne, ab der - nach Systemstart - noch ein
;* Prfsummentest (ROM-Test) und ein RAM-Test ausgefhrt wird [.BOOT_WAIT].
;* Zus„tzlich kann der RAM-Test, falls er aktiviert ist, auf die Anzeige der
;* Speicherkonfiguration und den Wartebalken beschr„nkt werden [.SKIP_RAMTEST].
;* Normalwert ist 80s!
;* [ALL, .SKIP_RAMTEST: FRG/USA]

.SET_TIME     = 0   ;1: Patch einbinden, 0: Patch nicht einbinden
.BOOT_TIME    = .0  ;Gewnschte Wartezeit (in s) hier eintragen.
.SKIP_RAMTEST = 0   ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .SET_TIME
 9A4 $.BOOT_TIME*.200.L
 !9A4,9A6           ;Damit die Zeit nicht reloziert wird.
_ENDIF

_SWITCH .NATION
_CASE .FRG: 6336
_CASE .USA: 62DC
_DEFAULT: .SKIP_RAMTEST = 0
_ENDSWITCH

_IF .SKIP_RAMTEST
 ~ $60              ;RAM-Test auf Anzeige und Wartebalken beschr„nken.
_ENDIF

;*******************************************************************************
;* SE: (24.01.94)
;* Plattenscanning auf IDE ausdehnen (Booten von IGITT, „h, IDE-Platten).
;* [ALL]

.IDE_BOOT = 1       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .IDE_BOOT
 B12 $78,10
_ENDIF

;*******************************************************************************
;* GE-Soft:
;* Der Eagle-Patch. Monochrommonitorchange unterbinden.
;* [ALL]

.EAGLE = 0          ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .EAGLE
 CEA $60
 CFA $60
_ENDIF

;*******************************************************************************
;* MH:
;* Stackpointer bei Autoexec korrigieren (siehe ST-Computer 1/90).
;* [ALL]

.STACK_POINTER = 1  ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .STACK_POINTER
 13D2 $DE,FC,00,0C,4A,40,66,68,3F,3C,00,07,2F,38,0A,20
_ENDIF

;*******************************************************************************
;* Gerd Trudow, Umsetzung & Adresse SV:
;* Ersetzt Die Atari-Bomben durch die ursprnglichen Atom-Pilze...
;* [ALL]

.PILZE = 0          ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .PILZE
 14F6 $07,C0,1F,F0,3B,F8,77,F4,B7,FA,BB,FA,DF,F6,66,FC ;Pilze
 ~    $32,88,02,80,04,40,04,40,05,40,05,20,09,20,09,20
_ELSE
 ;14F6 $06,00,29,00,00,80,48,40,11,F0,01,F0,07,FC,0F,FE ;Bomben
 ;~    $0D,FE,1F,FF,1F,EF,0F,EE,0F,DE,07,FC,03,F8,00,E0
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Die Megauhr kann NICHT mehr mit dem TOS verstellt werden. Dazu muž man nun
;* ein externes Stellprogramm aufrufen. Dies hat natrlich den Vorteil, daž
;* auch fremde Programme die Uhr nicht mehr verstellen k”nnen (wenn die
;* - wie blich - das TOS verwenden).
;* [ALL]

.LOCK_CLOCK = 0     ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .LOCK_CLOCK
 158E $00E01018.L   ;Zeiger auf MOVEQ #$0,D0 / RTS setzen.
_ENDIF

;*******************************************************************************
;* MH:
;* Der Blitter wird vom TOS verleugnet und nicht benutzt.
;* [ALL]
;*
;* >>> Dieser Patch ist identisch in den PAK III-Patches integriert.

.IGNORE_BLITTER = 0 ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .IGNORE_BLITTER
 15DC $70,00,4E,75  ;MOVEQ #$0,D0 / RTS
_ENDIF

;*******************************************************************************
;* SE:
;* Initiatoridentification beim SCSI-Zugriff, TT meldet sich als ID 7
;* Damit kann auch von Quantum Empire u.„. gebootet werden.
;* [ALL]

.SCSI_ID = 0        ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .SCSI_ID
 1C40 $70,80
_ENDIF

;*******************************************************************************
;* MH:
;* Schnelle Druckerroutinen fr den Parallelport (Fastprint).
;* Ausgabe-, Eingabe- und Warteroutine werden ersetzt.
;* Entspricht FASTPRN.PRG von Ecki aus der c't.
;* Zus„tzlich wird noch die Eingaberoutine ersetzt.
;* [ALL?]

.FASTPRN = 1        ;1: FASTPRN einbinden, 0: FASTPRN nicht einbinden

_IF .FASTPRN
 310  $22F8+80+.BASE.L        ;Warteroutine auf neue Routine
 1044 $22F8+62+.BASE.L        ;bconin-Vector auf neue Routine
 1064 $22F8+80+.BASE.L        ;Warteroutine auf neue Routine

 22F8 FASTPRN.ABS

 262E $61,00,22F8+92-~.W      ;Routine zum Strobe setzen hat sich verschoben...
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Druckertimeout setzen. Originalwert ist 30s. Minimalwert ist 5s!
;* Geht beim Atari-Laser in die Hose; da ich einen habe, hier Originalwert.
;* [ALL]

.TIMEOUT = .30      ;Zeit kann hier ge„ndert werden (in Sekunden)

_IF .FASTPRN
 22F8+1E
_ELSE
 231C
_ENDIF

! ~ , ~ + 2         ;Damit Zeit nicht reloziert wird
~ $.TIMEOUT * .200.L

;*******************************************************************************
;* TRK:
;* conterm setzen: Bit 2 gesetzt: Glocke bei CNTRL-G.
;*                 Bit 1   ''   : Tastenwiederholung ein.
;*                 Bit 0   ''   : Tastenklick ein.
;* [ALL?]

.SET_CONTERM = 0    ;1: Patch einbinden, 0: Patch nicht einbinden
.CONTERM     = %110 ;Wert fr conterm, z.B. %110 fr Tastenklick aus.

_IF .SET_CONTERM
 25FB $.CONTERM
_ENDIF

;*******************************************************************************
;* MH:
;* Verdoppelt die Z„hlgeschwindigkeit des 200 Hz-Timers. Damit STonX korrekte
;* Zeiten mit dem 100 Hz-Timer simulieren kann.
;* [FRG]
;*
;* >>> Bis jetzt ungetestet!

.SIM_100HZ = 0      ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 3A9E
_DEFAULT: .SIM_100HZ = 0
_ENDSWITCH

_IF .SIM_100HZ
 ~ $54,B9,00,00,04,BA    ;ADDQ.L #2,$4BA
_ENDIF

;*******************************************************************************
;* TRK: (angepasst von MH)
;* Setzt den hdmode auf Null. Aus SEEKUP von Martin Osieka entnommen.
;* Adresse dieses Patches durch TRK.
;* Der Patch „ndert nur die Initialisierung mit drei.
;* Das brige Verhalten bleibt.
;*
;* Kurzbeschreibung:
;* SEEKUP schaltet auf STs unter TOS 3.06 die Verdoppelung der
;* Seekrate aus (erkennbar am Seek-Ger„usch der Laufwerke).
;*
;* typedef struct {
;*   char cmdbit3;   /* $00 oder $08, wird zum Positionierkommando geodert
;*                      Kann mit Flopsrate() ver„ndert/abgefragt werden    */
;*   char dummy;     /* nicht benutzt */
;*   short track;    /* Aktuelle Spur */
;*   short hdmode;   /* 0 oder 3, wird in Register $FF860E geschrieben
;*                      Dieses Register existiert auf STs nicht */
;*   short seekrate; /* hdmode=0: 0: 6ms, 1: 12ms, 2: 2ms, 3: 3ms
;*                      hdmode=3: 0,1: 12ms, 2,3: 6ms
;*                      Kann mit Flopsrate() ver„ndert/abgefragt werden */
;* } dsb3S;
;*
;* Das TOS verwaltet die Informationen zu den Floppylaufwerken in DSBs.
;* Initialisiert werden die DSBs mit { 0, 0, 0xFF00, 3, _seekrate}, damit
;* ist auf STs defaultmaessig 6ms eingestellt. Die Trackpositionierroutine
;* schaltet im Fehlerfall <hdmode> um und macht daraufhin einen weiteren
;* Versuch. Die Formatierfunktion setzt <hdmode> abhaengig von der Anzahl
;* der Sektoren pro Spur. Besser waere es wohl, wenn das TOS bei jedem
;* erkannten Diskettenwechsel <hdmode> zunaechst auf 0 setzen wuerde.
;* [FRG/USA]
;*
;* >>> Achtung: Direktbernahme aus TOS 2.06. Also: Erst testen!
;* >>> Nicht fr MSTE / TT!

.SEEK_UP = 0        ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 3BCA
_CASE .USA: 3B70
_DEFAULT: .SEEK_UP = 0
_ENDSWITCH

_IF .SEEK_UP
 ~ $0000.W
_ENDIF

;*******************************************************************************
;* (DK): (10.11.93)
;* Im Floppy-Test Track 10 ansteuern auf Track 1 ansteuern ge„ndert.
;* [FRG/USA]

.FLOP_TEST = 0      ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 4200
_CASE .USA: 41A6
_DEFAULT: .FLOP_TEST = 0
_ENDSWITCH

_IF .FLOP_TEST
 ~ $7E,01
_ENDIF

;*******************************************************************************
;* MH:
;* Fast-Load-Bit fr schnelleres Laden (siehe ST-Computer 1/90).
;* Produziert Fehler bei einigen Laufwerken.
;* [FRG/USA]

.FASTLOAD = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 42F3
_CASE .USA: 4298
_DEFAULT: .FASTLOAD = 0
_ENDSWITCH

_IF .FASTLOAD
 ~ $10
_ENDIF

;*******************************************************************************
;*
;* Warte-Pause fr Floppyzugriffe etwas erh”hen, damit die Probleme mit 50 MHz
;* behoben werden. Originalwert $119.
;* [FRG/USA]

.FLOPPY = 1         ;1: Patch einbinden, 0: Patch nicht einbinden
.DELAY = 200        ;Hier das gewnschte Delay eintragen.

_SWITCH .NATION
_CASE .FRG: 4448
_CASE .USA: 43EE
_DEFAULT: .FLOPPY = 0
_ENDSWITCH

_IF .FLOPPY
 ! ~ + 2            ;Damit .DELAY nicht reloziert wird
 ~ $30,3C,.DELAY.W  ;Verz”gerung einpatchen
_ENDIF

;*******************************************************************************
;* RB:
;* Suche nach Laufwerk 'B' unterbinden -> schnelleres Booten.
;* [FRG/USA]
;*
;* >>> Achtung: Funktioniert nicht mit 2 Laufwerken!

.SKIP_B = 0         ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 5648
_CASE .USA: 55EE
_DEFAULT: .SKIP_B = 0
_ENDSWITCH

_IF .SKIP_B
 ~ $0001.W
_ENDIF

;*******************************************************************************
;* Harun Scheutzow: (implementiert von MH)
;* Neue Bios-Routinen Getbpb und Rwabs mit ED-Untersttzung:
;* - Es werden keine nicht erfolgten Diskettenwechsel mehr erkannt.
;* - Rwabs-Schreibroutinen zerst”ren keine VDI-Zeichensatzinformationen mehr.
;* - Es k”nnen auch Disketten mit nur einer FAT genutzt werden.
;* [FRG/USA]

.ED_BIOS = 1        ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .BIOS1 = 565C          ;565C - 58AE
            .BIOS2 = 5B1E          ;5B1E - 5D38
            .ADR1  = 3C10
            .ADR2  = 3D12
            .ADR3  = 3FFE
            .ADR4  = 5918
_CASE .USA: .BIOS1 = 5602          ;5602 - 5854
            .BIOS2 = 5AC4          ;5AC4 - 5CDE
            .ADR1  = 3BB6
            .ADR2  = 3CB8
            .ADR3  = 3FA4
            .ADR4  = 58BE
_DEFAULT: .ED_BIOS = 0
_ENDSWITCH

_IF .ED_BIOS
 .BIOS1 BIOS1.ABS             ;(.594)
 .BIOS1+34  $.ADR1+.BASE.L
 .BIOS2 BIOS2.ABS             ;(.538)
 .BIOS2+118 $.ADR2+.BASE.L
 .BIOS2+144 $.ADR3+.BASE.L
 .BIOS2+174 $.ADR1+.BASE.L
 .BIOS2+1C0 $.ADR4+.BASE.L
_ENDIF

;*******************************************************************************
;* RB:
;* Ausfhren des Bootsektors der Diskette verhindern
;* (Ist ja nicht ganz so radikal schon im bootdevice-Patch enthalten).
;* [FRG/USA]

.KILL_BOOT = 0      ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 5D9C
_CASE .USA: 5D42
_DEFAULT: .KILL_BOOT = 0
_ENDSWITCH

_IF .KILL_BOOT
 ~ $60
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Wenn _bootdev >= 2 (also Laufwerk C) ist, wird der Bootsektor der Diskette
;* nach einem Warmstart nicht mehr ausgefhrt. Bis zu TOS 1.4 war dies auch
;* so, aber seit TOS 1.4 wird der Bootsektor stets ausgefhrt. Dies kostet
;* bei einem RESET nicht nur Zeit, sondern hilft auch zur Verbreitung von
;* Bootsektor-Viren.
;* [FRG/USA]

.NORM_BOOT = 1      ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 5DA0
_CASE .USA: 5D46
_DEFAULT: .NORM_BOOT = 0
_ENDSWITCH

_IF .NORM_BOOT
 ~ $BE,78,04,46,6F,2E,70,01,3E,80,42,A7,3F,00,42,67
 ~ $42,A7,2F,38,04,C6,61,00,DE,58
_ENDIF

;* In diesem Patch befindet sich ein Fehler. Es wird mit CMP.W $0446.W,D7
;* verglichen und dann mit BCC xxx verzweigt. Dies funktioniert aber nur
;* dann, wenn _bootdev auch = 2 ist. Hat man aber CBHD und bootet z.B.
;* von E: (also _bootdev = 4), dann wird trotzdem der Bootsektor von A:
;* ausgefuehrt. Was noch schlimmer ist, dass bei diesem Patch ueberhaupt
;* kein Booten mehr von A: oder B: moeglich ist, was bei manchen Spielen,
;* die durch einen Boot geladen werden, zu Probleme fuehren kann. Um
;* dies zu beheben, ist der fuenfte Wert in der ersten Reihe ($64 bzw.
;* 64) durch $6F bzw. 6F zu ersetzen.
;* Es wird dann mit BLE xxx verzweigt, wobei dann die Abfrage
;* auch das erfuellt, was man gerne moechte.
;*
;* 07.09.1990 The Frontier

;*******************************************************************************
;* MRF: (angepasst von MH)
;* VDI-Patch (neue v_opnvwk()-Routine, ersetzt VDIFIX).
;* [FRG]
;*
;* >>> Achtung: Direktbernahme aus TOS 1.04. Also: Erst testen!

.VDIFIX = 0         ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: A886
_CASE .USA: A82C
_DEFAULT: .VDIFIX = 0
_ENDSWITCH

_IF .VDIFIX
 ~ VDI.ABS          ;(.122)
_ENDIF

;*******************************************************************************
;* Karsten Isakovic (implementiert durch MRF): (angepasst von MH)
;* Beseitigt den Fehler, der beim einen Mshrink(0)-Aufruf die Memory-Listen
;* zerst”rte.
;* [FRG]
;*
;* >>> Achtung: Direktbernahme aus TOS 1.04. Also: Erst testen!

.M_SHRINK = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .ADR = E183FE
            1826C
_DEFAULT: .M_SHRINK = 0
_ENDSWITCH

_IF .M_SHRINK
 ~ $2F,2E,00,0A,4E,B9,.ADR.L,58,8F,4E,71
_ENDIF

;*******************************************************************************
;* RB: (angepasst von MH)
;* Grow- und shrinkboxen ausschalten.
;* [FRG/USA]

.DRAW_BOXES = 0     ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .GROW_ADR   = 24B92
            .SHRINK_ADR = 24BD6
_CASE .USA: .GROW_ADR   = 24B38
            .SHRINK_ADR = 24B7C
_DEFAULT: .DRAW_BOXES = 0
_ENDSWITCH

_IF .DRAW_BOXES
 .GROW_ADR   $4E,75 ;RTS
 .SHRINK_ADR $4E,75 ;RTS
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Korrektes MSDOS-Format (Statt $EB nun $EB34904E als 1. Bytes im Bootsektor).
;* [FRG/USA]

.MS_DOS = 1         ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 2A3C2
_CASE .USA: 2A368
_DEFAULT: .MS_DOS = 0
_ENDSWITCH

_IF .MS_DOS
 ~ $DE,FC,00,0C,2A,BC,EB,34,90,4E
_ENDIF

;*******************************************************************************
;* MH:
;* Atari-Anfangsfuji ersetzen. Originalfuji ist ATARI.ABS.
;* [FRG/USA]

.FUJI = 1           ;0: Kein neues Fuji einbinden.
                    ;1: modifiziertes Atarifuji mit PAK/3-Schriftzug von SE.
                    ;2: 'Gib Dos keine Chance' von Reiner Rosin/TRK.
                    ;3: 'GeTuned' von Sven Spitzmacher.

_SWITCH .NATION
_CASE .FRG: 36018
_CASE .USA: 35FE8
_DEFAULT: .FUJI = 0
_ENDSWITCH

_SWITCH .FUJI
_CASE 1: ~ FUJI\PAK3.ABS
_CASE 2: ~ FUJI\GIB_DOS.ABS
_CASE 3: ~ FUJI\GT_TOS.ABS
_ENDSWITCH

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Die Default-Keyboardtabelle (3 mal 128 Bytes fr die Scancodetabellen)
;* wurden von dem Multi-Acc JAMES entliehen (von: Pascal Fellerich,
;* 45 rue des Genˆts, L-3482 Dudelange, Luxembourg).
;* [FRG/USA]
;*
;* Folgende Keyboardtabellen sind vorhanden:
;* Fr deutsche Tastaturen im Ordner FRG (Original: GERMAN.KBD):
;* AMERICAN.KBD, FRENCH.KBD, GERFRENC.KBD, GERMAN.KBD, HEXA.KBD, SWISSFR.KBD.
;* Fr amerikanische Tastaturen im Ordner USA (Original: USA.KBD):
;* USA.KBD

.NEW_KBD = 0        ;1: Neue Keyboardtabelle einbinden, 0: Nichts einbinden

_SWITCH .NATION
_CASE .FRG: .KBD_TAB = 3676C
_CASE .USA: .KBD_TAB = 3673C
_DEFAULT: .NEW_KBD = 0
_ENDSWITCH

_IF .NEW_KBD
 -KEYBOARD\                   ;Dsetpath("KEYBOARD\")
 .KBD_TAB FRG\GERMAN.KBD      ;Hier gewnschte Keyboardtabelle eintragen
 -..                          ;Dsetpath("..") (Ein Verzeichnis zurck)
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* ž in ein IBM-á wandeln. Damit wird kein Pesata, sondern ein Beta-"á"
;* ausgegeben. Dies sieht nun mal auf den meisten Nadeldruckern besser aus.
;* Dies wirkt natrlich nur bei Texten, welche mit dem gepachten TOS eingegeben
;* werden. In den alten steht ja noch das ž drin.
;* [FRG/USA]
;*
;* >>> HUCKY: Macht Probleme bei Script... Deswegen als Kommentar.

.NEW_SZ = 0         ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .KBD_TAB = 3676C
_CASE .USA: .KBD_TAB = 3673C
_DEFAULT: .NEW_SZ = 0
_ENDSWITCH

_IF .NEW_SZ
 .KBD_TAB+00C $E1
 .KBD_TAB+10C $E1
_ENDIF

;*******************************************************************************
;* MH:
;* Žndert den Papiervorschub bei der Hardcopy ab. Somit kann sowohl auf einem
;* NEC P6, wie auch weiterhin auf einem EPSON eine Hardcopy gemacht werden
;* (siehe ST-Computer 10/90).
;* [FRG/USA]

.NEC_P6 = 1         ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 3695B
_CASE .USA: 3692B
_DEFAULT: .NEC_P6 = 0
_ENDSWITCH

_IF .NEC_P6
 ~ $1B,41,07,FF
_ENDIF

;*******************************************************************************
;* HUCKY: (angepasst von MH)
;* Fontimages „ndern (nur die Bit-Images!!!)
;* Tempus oder Stad-Fonts einbinden. Diese mssen jedoch zuerst
;* konvertiert werden.
;* [FRG/USA]

.FONTS = 0          ;1: Fonts einbinden, 0: Keine Fonts einbinden

_SWITCH .NATION
_CASE .FRG: .FONT_6X6   = 36CCE
            .FONT_8X8   = 373AA
            .FONT_8X16  = 37BAA
            .FONT_16X32 = 38E60
_CASE .USA: .FONT_6X6   = 36C9E
            .FONT_8X8   = 3737A
            .FONT_8X16  = 37B7A
            .FONT_16X32 = 38E30
_DEFAULT: .FONTS = 0
_ENDSWITCH

_IF .FONTS
 -FONTS\                           ;Dsetpath("FONTS\")
 .FONT_6X6     6X6_FONT.ABS        ;<<< 6x6 Font hier eintragen (1152 Bytes)
 .FONT_8X8     8X8_FONT.ABS        ;<<< 8x8 Font hier eintragen (2048 Bytes)
 .FONT_8X16    NEU.ABS             ;<<< 8x16 Font hier eintragen (4096 Bytes)
 .FONT_16X32                       ;<<< 16x32 Font hier eintragen (16384 Bytes)
 -..                               ;Dsetpath("..") (Ein Verzeichnis zurck)
_ENDIF

;* Der Zeichensatz NEU.ABS, der diesem Archiv beiliegt, wurde von
;* SkyVox erstellt. Danke

;*******************************************************************************
;* TRK: (angepasst von MH)
;* Standardtastaturbelegung fr die Desktopfunktionen „ndern.
;* ASCII-Werte der Standardtastenbelegung (aus dem NEWDESK.INF bernommen).
;* Nicht belegte Tasten erhalten den Wert 00.
;* Diese Tastenbelegung wurde von SkyVox 'entworfen'. Danke.
;* [FRG/USA]

.DESK_TAST = 0      ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 3E514
_CASE .USA: 3E4E4
_DEFAULT: .DESK_TAST = 0
_ENDSWITCH

_IF .DESK_TAST
 ~ 'OISLVCWNAXFBT12340EH5678MRKDP.'
_ENDIF

;*******************************************************************************
;* HUCKY: (angepasst von MH)
;* Nun noch was, wenn man das Aussehen vom AES ver„ndern will...
;* [FRG]
;*
;* >>> BESSER: Gleich neue RSC-Files schaffen und einbinden (s.u.)!
;* >>> Dieser Patch funktioniert nicht mit dem RSC/NEWDESK-Patch.

.ICONS = 0          ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .IMAGES1 = 3F4E6
            .IMAGES2 = 420D8
_DEFAULT: .ICONS = 0
_ENDSWITCH

_IF .ICONS
 -ICONS\                           ;Dsetpath("ICONS\")
 ;* die Images sind jeweils 128 Bytes (4 Byte / Zeile => 32 Zeilen) lang.
 .IMAGES1        TOSFACES.IMG      ;Ausrufezeichen
 .IMAGES1+ 80                      ;Fragezeichen in form_alert()
 .IMAGES1+100                      ;Stopschild
 .IMAGES2                          ;i-Image in der Infobox des Desktops
 ;* die folgenden Icons bestehen jeweils auf 256 Bytes. 128 Bytes Maske,
 ;* 128 Byte Image fr das Icon
 .IMAGES2+ 80   TOSICONS.IMG       ;Diskettenlaufwerk
 .IMAGES2+180   ORDNER.IMG         ;Ordner
 .IMAGES2+280                      ;Papierkorb
 .IMAGES2+380   PROGRAMM.IMG       ;Programm
 .IMAGES2+480   DATEI.IMG          ;Datei
 -..                               ;Dsetpath("..") (Ein Verzeichnis zurck)
_ENDIF

;*******************************************************************************
;* SV:
;* Eingabe eines individuellen Textes ins Info-Men.
;* Hierzu kann der Text mittels ASCII-Code eingeben werden, darf dabei
;* jedoch nicht l„nger als 29 Zeichen sein.
;* [FRG]
;*
;* >>> BESSER: Gleich neue RSC-Files schaffen und einbinden (s.u.)!
;* >>> Dieser Patch funktioniert nicht mit dem RSC/NEWDESK-Patch.

.INFO_TXT = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: 40778
_DEFAULT: .INFO_TXT = 0
_ENDSWITCH

_IF .INFO_TXT
 ~ $'-----------------------------'
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Die Mausformen (Aufbau der Struktur gem„ž der AES-Funktion "graf_handle").
;* [FRG]
;*
;* >>> BESSER: Gleich neue RSC-Files schaffen und einbinden (s.u.)!
;* >>> Dieser Patch funktioniert nicht mit dem RSC/NEWDESK-Patch.

.MOUSE = 0          ;1: Patch einbinden, 0: Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .IMAGES = 3F666
_DEFAULT: .MOUSE = 0
_ENDSWITCH

_IF .MOUSE
 -MFORM\                           ;Dsetpath("MFORM\")
 .IMAGES       MFORM0.ABS          ;ARROW
 .IMAGES+ 4A   MFORM1.ABS          ;TEXT_CRSR
 .IMAGES+ 94   MFORM2.ABS          ;BUSY_BEE
 .IMAGES+ DE   MFORM3.ABS          ;POINT_HAND
 .IMAGES+128   MFORM4.ABS          ;FLAT_HAND
 .IMAGES+172   MFORM5.ABS          ;THIN_CROSS
 .IMAGES+1BC   MFORM6.ABS          ;THICK_CROSS
 .IMAGES+206   MFORM7.ABS          ;OUTL_CROSS
 -..                               ;Dsetpath("..") (Ein Verzeichnis zurck)
_ENDIF

;*******************************************************************************
;* MH:
;* Das Default-NEWDESK.INF und die Resourcen zum Includen!!!
;* Hier nun die ultimative M”glichkeit, sich das TOS nach seinen Wnschen
;* zu gestalten. Originalfiles: RSC_1.RSC,RSC_2.RSC,NEWDESK.INF.
;*
;* Vorsicht: Alle 3 Files drfen jeweils max. 64kB lang sein, da die
;*           Pointer auf dieselbigen Words sind.
;*
;* Diese Dateien von TOS 2.06 und TOS 3.06 sind identisch(!), d.h. sie
;* k”nnen fr beide TOS-Versionen zum Patchen genutzt werden.
;*
;* Wenn man mehr Icons gleichzeitig auf dem Desktop haben m”chte, muž man
;* in der 2.RSC-Datei (RSC_2.RSC) im 13. Formular (ICONS) einfach mehr Boxen
;* reinsetzen. Ich habe in der Datei RSC_2X.RSC die Anzahl der Icons
;* schon von 48 auf 160 vergr”žert.
;*
;* Man kann nun auch neue und mehr Icons in sein TOS einbinden (anstatt
;* DESKICON.RSC zu verwenden). Die Icons findet man in der 2. RSC-Datei
;* (RSC_2.RSC) im 11. Formular (DESKICON). Hier einfach neue oder andere
;* Icons eintragen.
;*
;* Wenn man den PAK III-Patch zum automatischen Booten mit den auf der
;* PAK befindlichen Eprom-TOS benutzt, sollte man diesen Patch einschalten,
;* wenn Probleme mit den Alerts auftauchen, da die 1. RSC Datei besch„digt
;* wird!
;* [FRG/USA]

.RSC = 0            ;1: RSC-Patch einbinden, 0: RSC-Patch nicht einbinden

_SWITCH .NATION
_CASE .FRG: .INSTALL_RSC = 20336
            .RSC_TAB     = 3ED2E
            .RSC_END     = 46232
            .GEMDOS      = 19916   ;Fr NEWRSC.ABS
            .MALLOC      = 25B62
            .BIOS        = 26310
            .UNABLE_TXT  = 3E11E
_CASE .USA: .INSTALL_RSC = 202DC
            .RSC_TAB     = 3ECA2
            .RSC_END     = 46134
            .GEMDOS      = 198BC   ;Fr NEWRSC.ABS
            .MALLOC      = 25B08
            .BIOS        = 262B6
            .UNABLE_TXT  = 3E0EE
_DEFAULT: .RSC = 0
_ENDSWITCH

_IF .RSC
 _IF .ICONS !O! .INFO_TXT !O! .MOUSE
  _ERROR "Entweder RSC/NEWDESK-Patch oder nur die anderen RSC-Patches benutzen"
 _ENDIF

 _SWITCH .NATION
 _CASE .FRG: -RSC\FRG\             ;Ins deutsche Subdirectory wechseln
 _CASE .USA: -RSC\USA\             ;Ins amerikanische Subdirectory wechseln
 _ENDSWITCH

 _IF .PAK !AND! .BootJMP
  _FILL .RSC_TAB,40030,$FF         ;Leerbereich l”schen
  .RSC_TAB = 40036                 ;RSC-Tabelle verlegen
 _ENDIF

 .RSC_TAB+A   RSC_1.RSC            ;<<< Resource-Datei 1 hier eintragen
 .RSC1_END: ~ RSC_2.RSC            ;<<< Resource-Datei 2 hier eintragen
 .RSC2_END: ~ NEWDESK.INF          ;<<< NEWDESK.INF hier eintragen

 .INF_END:  _EVEN $FF              ;Damit nachfolgender Code ausfhrbar bleibt
 .RSC_END:                         ;RSC/NEWDESK-Ende sichern

 -..\..                            ;Zurck ins normale Patchfield wechseln.

 _IF .INF_END-.RSC_TAB < 8000
  .INSTALL_RSC+ A   $.RSC_TAB+.BASE.L
  .INSTALL_RSC+5A   $.RSC_TAB+.BASE.L

  .RSC_TAB          $.RSC1_END-.RSC_TAB.W
  .RSC_TAB+2        $.RSC2_END-.RSC_TAB.W
  .RSC_TAB+4        $.INF_END-.RSC_TAB.W
  .RSC_TAB+6        $00,00,00,00   ;Unbenutzte Eintr„ge l”schen

 _ELSE
  /'Resourcen sind l„nger als 32kB... (',.INF_END-.RSC_TAB,')'
  .INSTALL_RSC      NEWRSC.ABS     ;(.220)
  .INSTALL_RSC+A    $.RSC_TAB+.BASE.L
  .INSTALL_RSC+18   $.MALLOC+.BASE.L
  .INSTALL_RSC+28   $.UNABLE_TXT+.BASE.L
  .INSTALL_RSC+32   $.GEMDOS+.BASE.L
  .INSTALL_RSC+42   $.BIOS+.BASE.L
  .INSTALL_RSC+52   $.RSC_TAB+.BASE.L

  .RSC_TAB          $.RSC1_END-(.RSC_TAB+A).W
  .RSC_TAB+2        $.RSC2_END-.RSC1_END.W
  .RSC_TAB+4        $.INF_END-.RSC2_END.W
  .RSC_TAB+6        $00,00,00,00   ;Unbenutzte Eintr„ge l”schen

 _ENDIF
_ENDIF

!.RSC_TAB .. .RSC_END              ;Im RSC/NEWDESK.INF nicht relozieren.
.RSC_END                           ;Ab Ende RSC/NEWDESK.INF geht es weiter.

;***************************************************************************
;* EWK:
;* HD-Floppy-Steuerung mit Sound-Chip-Bit 6 oder 7.
;* Erwartet die HD-Steuerung Low-Pegel bei HD-Betrieb, .HD_INVERT
;* auf 1 setzen, sonst kommt Hight-Pegel fr HD.
;* [FRG/USA]

.HD_BIT    = 0      ;0: nicht einbinden, 6: Bit 6 verwenden, 7: Bit 7 verwenden
.HD_INVERT = 0      ;0: HD aktiv bei High-Pegel, 1: HD aktiv bei Low-Pegel

_SWITCH .NATION
_CASE .FRG: .CALL1 = 3E54
            .CALL2 = 430C
            .CALL3 = 4360
_CASE .USA: .CALL1 = 3DFA
            .CALL2 = 42B2
            .CALL3 = 4306
_DEFAULT: .HD_BIT = 0
_ENDSWITCH

_IF .HD_BIT <> 0
 .HD_PORT: ~ HD_BIT7.ABS ;L„nge 68 Bytes

 _IF .HD_BIT = 6
  .HD_PORT+25  |$BF
  .HD_PORT+2E  |$ED
 _ENDIF

 _IF .HD_INVERT
  .HD_PORT+2D  |$01  ;fr HD aktiv bei Low-Pegel
 _ENDIF

 .CALL1        |$4E,B9,.HD_PORT+0A+.BASE.L,4E,71  ;Call an .HD_PORT+$0A
 .CALL2        |$4E,B9,.HD_PORT+0A+.BASE.L,4E,71
 .CALL3        |$4E,B9,.HD_PORT+.BASE.L           ;Call an .HD_PORT

 !.HD_PORT.. ~      ;In diesem Patch nicht relozieren
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Harddisk-Waiter (zum gleichzeitigen Anschalten von Rechner und Platte).
;* Leider ist mir unbekannt, von wem diese Routine stammt, ich habe sie in
;* einem Bootsektor gefunden. Zudem kann man das Warten mit [ALTERNATE]
;* abbrechen (wenn z.B. keine Platte vorhanden ist).
;* [ALL]
;*
;* >>> Achtung: Der Harddisk-Waiter funktioniert nur mit einer Platte. Zudem
;*              bin ich nur sicher, daž er mit meiner Megafile 60 funktioniert.

.HD_WAIT0 = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .HD_WAIT0
 .HD_WAIT:      ~ _HDWAIT0.ABS               ;L„nge 224 Bytes
 !.HD_WAIT+A .. ~                            ;in diesem Patch nicht relozieren

 70C            |$4E,B9,.HD_WAIT+.BASE.L     ;JSR zum Harddisk-Waiter
 712            |$4E,71,4E,71                ;NOP's
_ENDIF

;*******************************************************************************
;* MRF: (angepasst von MH)
;* Alternativer Hardisk-Waiter. Wartet .TIME Sekunden bei einem
;* Kaltstart auf die Platte. Dies funktioniert mit allen Platten!
;* Mit Tastendruck kann das Warten abgebrochen werden.
;* Fast gleichwertig zu diesem Patch ist, wenn man in den Patch, der die
;* Zeitspanne festlegt, ab der Systemstart noch die Tests ausgefhrt
;* werden, die entsprechende Zeit eintr„gt.
;* [ALL]

.HD_WAIT1 = 0       ;1: Patch  einbinden, 0: Patch nicht einbinden
.TIME     = .12     ;Wartezeit in s

_IF .HD_WAIT1
 .HD_WAIT:      ~ HDWAIT1.ABS                ;L„nge 58 Bytes
 !.HD_WAIT+A .. ~                            ;in diesem Patch nicht relozieren
 .HD_WAIT+C     |$.TIME*.200.L               ;Wartezeit eintragen

 70C            |$4E,B9,.HD_WAIT+.BASE.L     ;JSR zum Harddisk-Waiter
 712            |$4E,71,4E,71                ;NOP's
_ENDIF

;*******************************************************************************
;* MH:
;* Hardisk-Waiter von EWK.
;* [ALL]

.HD_WAIT2 = 0       ;1: Patch  einbinden, 0: Patch nicht einbinden
.TIME     = .30     ;max. Wartezeit in s (max. 99s !!!)
.DEVICE   = 0       ;DMA-Device, auf das gewartet werden soll (0-7)

_IF .HD_WAIT2
 .HD_WAIT:      ~ HDWAIT2.ABS                ;L„nge 334 Bytes
 !.HD_WAIT+A .. ~                            ;in diesem Patch nicht relozieren

 ;.HD_WAIT+10    |$4E,71                      ;Nur fr RAM-TOS und >=2 Harddisks

 .HD_WAIT+21    |$.TIME.B                    ;Wartezeit eintragen
 .HD_WAIT+88    |$.DEVICE*20.W               ;Device eintragen
 .HD_WAIT+94    |$.DEVICE*20.W
 .HD_WAIT+10C   |$.DEVICE+30.B

 70C            |$4E,B9,.HD_WAIT+.BASE.L     ;Jsr zum Harddisk-Waiter
 712            |$4E,71,4E,71                ;Rest mit NOP's auffllen
_ENDIF

;*******************************************************************************
;* SE: (28.01.94)
;* Plattenwarter, nach RAM-Test, statt Wartebalken.
;* [ALL]

.HD_WAIT3 = 0       ;1: Patch  einbinden, 0: Patch nicht einbinden

_IF .HD_WAIT3
 .HD_WAIT:    ~ HDWAIT3.ABS   ;L„nge 174 Bytes
 !.HD_WAIT .. ~               ;In diesem Patch nicht relozieren

 9C8 |$4E,B9,.HD_WAIT+.BASE.L ;JSR zum Harddisk-Waiter
 9CE |$4E,F9,00,E0,0B,0C      ;Wartebalkenroutine berspringen
_ENDIF

;*******************************************************************************
;* Gerhard Huber: (implementiert von MH)
;* NovaPatch. Ansteurung der Novakarten schon beim Booten.
;* Fr alle Nova ausser Typ 2 und 6.
;* [ALL]

.NOVA = 0           ;1: Patch einbinden, 0: Patch nicht einbinden

_IF .NOVA
 .NOVA:      ~ NOVA.ABS                 ;NovaPatch einbinden
 !.NOVA+8 .. ~                          ;Im Patch nicht relozieren

 750         |$4E,F9,.NOVA+8+.BASE.L    ;Einsprung zum NovaPatch
_ENDIF

;*******************************************************************************
;* MH:
;* Testen, ob fr Mag!C noch genug Platz frei ist.

_IF ~ > 50000
 /"Nicht mehr genug Platz im TOS, um Mag!C einbinden zu k”nnen!"
_ENDIF

;*******************************************************************************
;* MH:
;* Abbruch bei šberschreiten der TOS-L„nge.

_IF ~ > .LENGTH-.WIDTH/4
 _ERROR 'Patches l„nger als das TOS'
_ENDIF

;*******************************************************************************
;* Martin Osieka: (implementiert durch MH)
;* Puffer fr NEWDESK.INF vergr”žern. Originalroutinen aus SHBUF 1.3!
;* Zu n„heren Informationen siehe SHBUF.
;* [FRG]

.SHBUF  = 0         ;1: Patch einbinden, 0: Patch nicht einbinden

.BUFFER = 7FFE      ;In diese Zeile kann die gewnschte Puffergr”že
                    ;eingetragen werden. Maximum ist $7FFE => 32kB pro Puffer.
                    ;Da es 2 Puffer gibt => max. 64kB Speicherverbrauch
                    ;'Originalwert' ist $1000.

_IF .SHBUF
 +SHBUF.FIL         ;SHBUF-Patch einbinden
_ENDIF

;*******************************************************************************
;* Martin Osieka: (implementiert durch MH)
;* Neue Fenterverwaltung. Originalroutinen aus WINX 2.2!
;* Enth„lt aužerdem den Arrowfix-Patch (s.u.).
;* Zu n„heren Informationen siehe WINX.
;*
;* Defaultwerte sind:
;* .GLOBAL = %1111111111111, .LOCAL = %111111111111, .DESKTOP = %111111111111,
;* .INIT_SCROLL = .460, .CONT_SCROLL = .40, CONT_CLOSE = .1000,
;* .CONT_FULL = .2000
;* [FRG]
;*
;* >>> Funktioniert nicht zusammen mit dem Arrowfix-Patch!

.WINX        = 0    ;1: Patch einbinden, 0: Patch nicht einbinden

.GLOBAL      = %1111111111111 ;Globale Schalter (rechts: Schalter 1)
.LOCAL       =  %111111111111 ;Lokale Schalter  (rechts: Schalter 1)
.DESKTOP     =  %111111111111 ;Desktop Schalter (rechts: Schalter 1)
.INIT_SCROLL =           .460 ;Initial scroll delay in ms
.CONT_SCROLL =            .40 ;Continous scroll delay in ms
.CONT_CLOSE  =          .1000 ;Continous close delay in ms
.CONT_FULL   =          .2000 ;Continous full delay in ms

_IF .WINX
 +WINX.FIL          ;WINX-Patch einbinden
_ENDIF

;*******************************************************************************
;* Martin Osieka: (implementiert von MH)
;* Neue Scrollroutinen fr GEM. Originalroutinen aus ARROWFIX 1.5!
;* Zu n„heren Informationen siehe ARROWFIX.
;*
;* In .TIME steht die Default-Ansprechzeit bis zur ersten Wiederholung einer
;* Scrollnachricht in 0,125s. Diese Ansprechzeit l„žt sich auch mit dem
;* ARROWFIX.CPX einstellen. Werte von 0 bis 9 fr .TIME sind zul„ssig.
;* Original-Default ist .TIME = 3.
;* [FRG]
;*
;* >>> Funktioniert nicht zusammen mit dem Winx-Patch!

.ARROWFIX = 0       ;1: Patch einbinden, 0: Patch nicht einbinden

.TIME     = .3      ;Ansprechzeit in 0,125s.

_IF .ARROWFIX !A! (.WINX = 0)
 +ARROW.FIL         ;ARROWFIX-Patch einbinden
_ENDIF

;*******************************************************************************
;* Ende der Datei...

-..            ;Dsetpath("..") (Ein Verzeichnis zurck)

