
 bersicht zu TOSPATCH V2.9.8:
===============================



 Kommandozeile:
================

TOSPATCH [-<switches>] [<batch.fil>]

 Switches:
-----------

a:
---
 Alle gepatchten Adressen ausgeben.

l:
---
 Alle Ausgaben ins Logfile TOS.LOG schreiben.

m:
---
 Alle Nachfragen mit Ja beantworten.

q:
---
 Bildschirmausgaben werden unterdrckt.



 Befehlsbersicht:
===================

;
---
 Kommentar (d.h. Rest der Zeile wird berlesen).

<*
---
 TOS aus ROM lesen (TOS-Daten im Patchfile mssen stimmen!)

<FILE.EXT
---------
 TOS aus <FILE.EXT> lesen

= TT.MM.JJJJ [,NATION]
----------------------
 Prfen, ob es sich um das richtige TOS handelt (Datum und optional
 Nation).

>Anzahl [Relocadr] [,Machine]
-----------------------------
 gepachtes TOS in <Anzahl> Datei(en) schreiben. Mgliche Werte fr 'Anzahl'
 sind 1,2,4,6 und 8. Wenn <Relocadr> vorhanden ist, wird nach <Relocadr>
 reloziert und <Relocadr> wird in die Variable .RELOCADR geschrieben. Sonst
 wird nur .BASE in .RELOCADR geschrieben. <Machine> gibt die Plattform an
 fr die das TOS generiert werden soll und benennt die Ausgabefiles
 entsprechend.

 Z.Z. implementiert Plattformen: 
 - PAK3 (bei <Anzahl> = 4: TOS.U10, TOS.U11, TOS.U12, TOS.U13)


---
 CRC-Prfsumme nach dem Patchen berechnen und setzen. Die Variable .CRC
 wird auf 1 gesetzt (.CRC wird mit 0 initialisiert).

!Adr,Adr, ...
-------------
 Einzelne Ausnahmen beim Relozieren.

!Adr1..Adr2, ...
----------------
 Bereich von Adr1 bis Adr2 vom Relozieren ausnehmen. Auch mglich zusammen
 mit einzelnen Relozierausnahmen (s.o.).

? Adr
-----
 Einzelne Adressen (Adr) forciert Relozieren (bei Adressen, die z.B. das
 hchstwertige Byte benutzen und somit von TOSPATCH nicht erkannt werden).

-Pfad
-----
 Dateipfad ndern auf <Pfad> ndern (Ordner fnen etc.). <Pfad> = .. schliet
 Ordner.

Offset $Byte,Byte, ...
----------------------
 Ab <Offset> die durch Kommata getrennten Bytes in das TOS schreiben und ~
 aktualisieren. Statt Bytes knnen hier auch beliebige Ausdrcke eingesetzt
 werden (Variablen, #, Operationen etc.). Hinter einem Ausdruck kann auch
 die gewnschte Breite stehen, z.B. .B fr Byte (Default), .W fr WORD und
 .L fr LONG. ~ wird nach jedem Wert aktualisiert.

Offset |$Byte,Byte, ...
-----------------------
 dito, jedoch ohne ~ zu aktualisieren.

Offset FILE
-----------
 Ab <Offset> die Datei <FILE> ins TOS schreiben. Die Datei mu entweder
 relocatibel oder zur TOS-Basisadresse ($E00000) + <Offset> assembliert
 sein. ~ wird aktualisiert.

Offset |FILE
------------
 dito, jedoch ohne Aktualisieren von ~.

#Wert
-----
 <Wert> wird in den internen Speicher (Variable) geschrieben.

+FILE
-----
 Liest ein Unterpatchfile <FILE> und wertet dies aus. Es knnen bis zu
 8 Unterpatchfiles rekursiv aufgerufen werden.

_IF Ausdruck
------------
 Wenn der Ausdruck wahr ist, werden die nachfolgenden Zeilen bis _ELSE oder
 _ENDIF (falls kein _ELSE) ausgefhrt. Ist der Ausdruck falsch werden die
 nachfolgenden Zeilen bis _ELSE (falls vorhanden) oder _ENDIF bersprungen.

_IFDEF Variable
----------------
 Wie _IF, Bedingung ist erfllt, wenn <Variable> definiert ist.

_IFNDEF Variable
----------------
 Wie _IF, Bedingung ist erfllt, wenn <Variable> nicht definiert ist.

_ELSE
-----
 Falls die _IF-Bedingung falsch war, wird ab hier weitergearbeitet.

_ENDIF
------
 Beendung einer _IF (/_ELSE) Konstruktion.

_DEFINE Variable
----------------
 Definiert Variable.

_UNDEF Variable
---------------
 Lscht Variable.

_SWITCH Wert
------------
 Setz Vergleichswert <Wert> fr _CASE.

_CASE Wert1[,Wert2]:
--------------------
 Fhrt nachfolgende Befehle aus, wenn <Wert1> oder einer der folgenden Werte
 <Wert2> gleich dem durch _SWITCH gesetztem Wert ist.

_DEFAULT:
---------
 Fhrt nachfolgende Befehle aus, wenn kein _CASE ausgefhrt wurde.

_ENDSWITCH
----------
 Schliet eine _SWITCH-Befehl-Konstruktion ab.

_ERROR ['Text']
---------------
 Abbruch des Patchvorganges und ggf. Ausgabe von:
 'Fehler: ',Text,' in Zeile .xxx'

_EVEN [$Wert]
------------
 Falls ~ gerade ist passiert garnichts, sonst wird ~ um 1 erhht und falls
 <Wert> angegeben ist, wird <Wert> an die freie Stelle gepatcht.

_FILL Start,Ende,X
------------------
 Fllt den Bereich von <Start> bis <Ende> mit der max. 32 Bytes langen
 Bytefolge <X> und aktualisiert ~. Syntax von <X> ist genau wie bei Offset.

_FILL Start,Ende,|X
-------------------
 dito, jedoch ohne Aktualisieren von ~.

.Variable = Wert
----------------
 Schreiben von <Wert> in die Variable .Variable.

.Variable:
----------
 Schreiben von ~ in die Variable .Variable. Nach dem Doppelpunkt knnen
 Patches folgen.

/'Text',Zahl,$Zahl
------------------
 Print-Befehl schreibt Texte ('Text'), dezimale Zahlen (Zahl) und
 hexadezimale Zahlen ($Zahl), die durch Komma getrennt sind, in beliebiger
 Reihenfolge auf den Bildschirm. Fr Zahlen sind beliebige Ausdrcke
 erlaubt.



 Spezielle Variablen:
======================

.BASE = Adr        
-----------
 TOS-Basisadresse setzen, zu der das TOS reloziert ist.
 $FC0000 fr TOS 1.xx, $E00000 fr TOS 2.xx und 3.xx.

.LENGTH = Long
--------------
 TOS-Lnge setzen. $30000 fr TOS 1.xx, $40000 fr TOS 2.xx und
 $80000 fr TOS 3.xx.

.WIDTH = Long
-------------
 Breite des TOS setzen. Gibt an, ob das TOS 16-bittig (.16) oder 32-bittig
 (.32) organisiert sein soll. Ist wichtig beim Abspeichern in mehreren
 Dateien zum Brennen. Normal: TOS 2.06: .16, TOS 3.06: .32.
 Mgliche Werte: .8, .16, .32, .64 .

.NATION = Nation
----------------
 Nationale TOS-Version setzen. Dazu sind folgende Variablen (deren Namen
 der Lnderkennung entspricht) bereits vorbesetzt:
 .USA, .FRG, .FRA, .UK, .SPA, .ITA, .SWE, .SWF, .SWG, .TUR, .FIN, .NOR,
 .DEN, .SAU, .HOL, .CZE, .HUN.
 Z.B. .NATION = .FRG fr das deutsche TOS.

.CRC
----
 .CRC wird durch den -Befehl von 0 auf 1 gesetzt. Diese Variable zeigt an,
 ob die CRC-Prfsumme nach dem Patchen berechnet und gesetzt wird.

.RELOCADR
---------
 in .RELOCADR steht die Adresse, an die das TOS nach dem Patchen reloziert
 wird. Ist .RELOCADR gleich .BASE wird nicht reloziert.

~
---
 ~ zeigt auf die Adresse nach letztem abgearbeitetem Patch.

#<Breite>
 Ist eine einfache Variable, die durch den Befehl #<Wert> auf <Wert>
 gesetzt wird, aber nicht bei Operationen verwendet werden kann. Fr
 <Breite> sind folgende Werte mglich: B fr Byte, W fr WORD und
 L fr LONG. <Breite> mu mit angegeben werden.



 Prioritten:
==============

Als Operationen sind mglich (in Reihenfolge ihrer Prioritt, absteigend):

^
---
 Potenzierung, z.B. 2^3.

*,/
---
 Multiplikation und Division, z.B. 2*3/4.

+,-
---
 Addition und Subtraktion, z.B. 2+3-4.

Wert !IN! [Zahl,Zahl, ...]
--------------------------
 Test, ob <Wert> in der Menge [Zahl,Zahl, ...] enthalten ist,
 z.B. 2 !IN! [1,2,3,4].

 ACHTUNG: NACH !IN! im Ausdruck stehende Operationen haben niedrigere
          Prioritt. D.h. nach !IN! folgende Operationen werden so
          behandelt, als htte !IN! hchste Prioritt. Vor !IN! stehende
          Operationen werden normal behandelt.

!N! oder !NOT!
--------------
 Bool'sches Not: !N! 1 = 0, !N! 0 = 1

!A! oder !AND!
--------------
 Und-Verknpfung, z.B. 7 !A! 3.

!O! oder !OR!
-------------
 Oder-Verknpfung, z.B. 3 !O! 4.

!X! oder !XOR!
--------------
 Exklusiv-Oder-Verknpfung, z.B. 2 !X! 3.

Als Vergleiche sind mglich (auch als Operationen zu verwenden):

<>
---
 Ungleicheit, z.B. 3 <> 4.

<= 
---
 Kleiner oder Gleichheit, z.B. 3 <= 4.

<
---
 Kleiner, z.B. 3 < 4.

>=
---
 Grer oder Gleichheit, z.B. 3 >= 4.

>
---
 Grer, z.B. 3 > 4.

=
---
 Gleichheit, z.B. 3 = 4.

Die  Vergleichszeichen knnen dabei auch in Ausrufungszeichen eingeklammert
werden, z.B. a<>b ist das gleiche wie a!<>!b.

Die  Vergleiche  liefern  als  wahr eine 1 und als falsch eine 0 zurck und
haben alle die gleiche niedrigste Prioritt.

Klammerungen sind in bis zu 8 Ebenen mglich.



 Aufteilung beim Abspeichern:
==============================

Beim Abspeichern in mehrere Dateien wird das TOS wie folgt aufgeteilt:

WIDTH = .16
-----------
 1.Byte TOS.HIx
 2.Byte TOS.LOx
 und dann wieder von vorne

WIDTH = .32
-----------
 1.Byte TOS.HHx
 2.Byte TOS.HLx
 3.Byte TOS.LHx
 4.Byte TOS.LLx
 und dann wieder von vorne

Das  TOS  kann  dabei  in bis zu 16 Bnke, aber max. 32 Dateien, gesplittet
werden. <x> zhlt  von  0-9 hoch und fhrt dann mit A-P fort. Gibt es keine
zwei Dateien mit gleicher Extension, wird <x> weggelassen.



 Ausdrcke und Variablen:
==========================

Ab  jetzt  kann  man  auch  fr (fast) jede Zahl im Patchfile eine Ausdruck
angeben. Die Breite diese Ausdruck kann an das Ende des Ausdrucks angehngt
werden: Ausdruck.B, Ausdruck.W oder Ausdruck.L (Default: .B)

Soll eine Zahl dezimal sein mu sie eine Punkt als Prfix haben:
.20 = dezimal 20, 20 = hexadezimal 20!

Alle  Variablen  beginnen  mit  einem  Punkt. Gro- und Kleinschreibung ist
egal.  Von  dem  Variablenname  nach  dem  Punkt werden nur die ersten 16
Stellen ausgewertet, d.h. Variablennamen knnen zwar lnger als 16 Zeichen
sein, zum Vergleich werden jedoch nur die ersten 16 verwendet.

Als  Zeichen  im  Variablenname  sind  erlaubt: A bis Z , 0 bis 9 sowie _ ,
wobei 0 bis 9 nicht an erster Stelle des Variablennamens stehen drfen.

Eine  spezielle  Variable ist ~. In ihr steht das Ende des letzten Patches.
Vor  ihr,  sowie  auch  vor  #, darf kein Punkt stehen. Diese Variable kann
z.B. genutzt werden, um mehrere Patches hintereinander zu laden: z.B.
30000 PATCH1.ABS
~     PATCH2.ABS
~     PATCH3.ABS
patcht ab Offset 30000 PATCH1.ABS, PATCH2.ABS und PATCH3.ABS hintereinander
ins TOS.



 Allgemeines:
==============

TOSPATCH erzeugt als Ausgabefile immer TOS.IMG!

Benennt  also ein evtl. ausgelesene TOS um, falls es erhalten bleiben soll,
z.B. in STE_TOS.IMG oder TT_TOS.IMG!

TOSPATCH akzeptiert als Zeilenendekennung CRLF sowie LF.

TABs werden wie Spaces behandelt.



 Zustzliche Programme:
========================

Das  Programm  LOADTOS.PRG  gehrt in den AUTO-Ordner. Es ldt von dort ein
TOS.IMG  aus dem ROOT-Directory (der Pfad kann im Programm gepatcht werden)
an  die  im  TOS.IMG  angegebene  Adresse.  Es  kann  aber auch vom Desktop
gestartet  werden,  dann  ldt  es  entweder  das Default-TOS.IMG oder eine
beliege TOS-Datei, falls eine in der Commandline bergeben wurde.

ACHTUNG: LOADTOS lscht den Resetpointer, d.h. Programme die auf Ausfhrung
         einer   Routine   vor   dem  Reset  bestehen,  gehen  baden,  z.B.
         Festplattencaches  mit  delayed  write  haben  Datenverluste, wenn
         noch nicht alle Daten geschrieben wurden!

Zum Konfigurieren von LOADTOS.PRG dient LT_CONF.PRG. Mit LT_CONF.PRG lassen
sich  die  Hotkeys,  die Startup-Zeit und das zu ladende TOS in LOADTOS.PRG
verndern.

Das  Programm  RESETTOS.PRG dient dazu das TOS, wenn es mit RAMRESET reset-
fest  gemacht  wurde,  aus dem Speicher zu entfernen, ohne den Rechner aus-
schalten  zu  mssen. Wenn die PMMU ausgenutzt wird z.B. durch OUTSIDE oder 
VRAM  kann  es sein, da RESETTOS abstrzt. Ansonsten funktioniert RESETTOS
mit der PMMU problemlos.



>>>  Wenn   Ihr   neue  Patches  einbaut,  mailt  sie  mir  bitte !!!  <<<
>>>  email: Markus_Heiden@public.uni-hamburg.de                        <<<

   Viel Spa wnscht
     Markus Heiden

