FIX24 im Boot-Sektor

In [1] wurde das Programm FIX24 vorgestellt, welches die Adressierung eines ATARI TT auf 24 Bit beschränkt, wodurch auch solche Programme auf dem 68030-Prozessor im TT laufen, die die oberen acht Bit des Adreßwortes zweckentfremden.

ie Lösung aus [1] für den AUTO-Ordner hat den Nachteil, daß Programme, die vor ihrem Start die Ausführung anderer Programme, insbesondere aus dem AUTO-Ordner heraus, nicht zulassen, nicht mit der beschränkten Adressierung gestartet werden können. Sehr zu meinem Leidwesen gehören auch Spiele mit ausführbarem Boot-Sektor zu dieser Sorte von Programmen.

Daher muß das FIX24-Programm im Boot-Sektor installiert werden. Tritt bei der Ausführung des Programms ein Fehler auf, so wird mit dem Booten fortgefahren, natürlich nicht ohne entsprechende Fehlermeldung (kann auf STs auch als Virusschutz benutzt werden!). War die Installation jedoch erfolgreich, wird man aufgefordert, eine andere Diskette einzulegen, deren Boot-Sektor auf Tastendruck geladen und gestartet wird, sofern die Prüfsumme gleich $1234 ist. Daran erkennt man ausführbare Boot-Sektoren. Danach wird der Boot-Vorgang wie üblich fortgesetzt.

Beim Assemblieren muß man beachten, daß PMMU-Befehle übersetzt werden müssen [2]. Der MAS-68K kommt mit zwei Befehlen nicht zurecht, aber man kann die Opcodes ja auch mit „dc.l“ direkt angeben. Diese Alternativen stehen auch als Kommentare im Listing. Es dürfen keine weiteren Module hinzugelinkt werden, und das Programm darf keinen eigenen Stack haben, sonst würde es zu groß für den AUTO-Ordner.

Und wie bekommt man ein Programm in den Boot-Sektor? Will man es nicht Byte für Byte mit einem Diskettenmonitor hineinschreiben, muß man sich ein Utility suchen, das die Möglichkeit zur Installation eines Boot-Programms bietet. Ich habe DISKUS benutzt. Trotz aller Anstrengungen gibt es immer noch Kompatibilitätsprobleme. Die Boot-Sektor-Version ist nicht so betriebssicher wie das AUTO-Ordnerprogramm. Eine Verbesserung könnte erreicht werden, indem der nachzuladende Boot-Sektor an die Stelle im Speicher geladen wird, an die auch der FIX24-Boot-Sektor geladen wurde. Es ist sicher nicht die feine Art, ihn einfach hinter FIX24 zu laden.

BootFIX24 darf nicht beim Einschalten des TT gebootet werden, da dies zu einem Absturz führt. Bootet man den Rechner wie gewohnt und löst dann z.B. vom Desktop einen Warm- oder Kaltstart mit BootFIX24 aus, funktioniert alles wie gewünscht.

Nun bleibt nur zu hoffen, daß die Programme nicht noch an weiteren Hürden scheitern. Besonders Kopierschutzroutinen, die mit der hohen Ausführungsgeschwindigkeit auf dem TT Probleme haben, können einem die (Spiel-)Freude noch verderben!

Literatur:

[1] „TT-Manipulation auf 24 Bit“, Uwe Seimet, ST-Computer 4/91

[2] „68030 Assembly Language Reference“, Steve Williams, Addison-Wesley Publishing Company

* FIX24.PRG für Bootsektor *
*                          *
* Bootsektor-Version von   *
* Gabriel Schmidt          *
* (c) 1992 MAXON Computer  *
; Kommentare betreffen nur Änderungen gegenüber FIX24 aus [1],
; Das Prinzip des Programms und das Listing sind dort erklärt.

GEMDOS  = 1
CNECIN  = 8
CCONWS  = 9
MXALLOC = 68

BIOS    = 13 
RWABS   = 4

_p_cookies = $5a0

magic = $1357bd13

    text

    MC68030
    MC68851
    SUPER

    moveq #-1,d6 
    lea sterr(pc),a6 
    move.l _p_cookies,d0 
    beq quit 
    move.l d0,a0 

cloop:
    movem.l (a0)+,d0-d1
    tst.l d0
    beq quit
    cmp. 1 #"_MCH",d0
    bne cloop
    swap d1
    subq.l #2,d1
    bne quit
    cmp.l #magic,$5a8 
    bne.b noram 
    move.l $5a4,d0 
    cmp.l #$1000000,d0 
    ble.b noram 
    lea ramerr(pc),a6 
    sub.l #$1000000,d0 
    move #1,-(sp) 
    move.l d0,-{sp)
    move #MXALLOC,-(sp)
    trap #GEMDOS 
    addq.l #8,sp 
    tst.l d0 
    beq quit 
noram:
    movec.l cacr,d0 
    or #$0808,d0 
    and #$fefe,d0 
    movec.l d0,cacr 
    lea dummy(pc),a0
    pmove (a0),tc ; dc.l $f0104000 Alternativ-Codes 
    pmove (a0),tt0 ; dc.l $f0100800 für MAS-68K 
    pmove (a0),tt1 ; dc.l $f0100c00 (siehe Text)
    lea $0700,a0 
    moveq #15,d0 
fill1:
    move.l #$00000742,(a0)+ 
    dbra d0,fill1 
    moveq #15,d0 
fill2:
    move.l #$000007c2,(a0)+ 
    dbra d0,fill2 
    moveq #1,d1 
    moveq #14,d0 
fill3:
    move.l d1,(a0)+ 
    add.l #$0010000,d1 
    dbra d0,fill3 
    move.l #$00f00041,(a0) 
    pmove trans,tc 
    lea message(pc),a6 
    clr d6 
quit:
    move.w d6,-(sp) 
    pea (a6)
    move #CCONWS,-(sp) ; Meldung ausgeben
    trap #GEMDOS 
    addq.l #6,sp 
    move.w (sp)+,d6
    beq go ; Installation erfolgreich?
    rts ; nein, Booten fortsetzen
go: ; ja
    move.w #CNECIN,-(sp) ; Tastendruck abwarten
    trap #GEMDOS 
    addq.l #2,sp 
    move.w #0,-(sp) 
    move.w #0,-(sp) 
    move.w #1,-(sp) 
    pea bootsec(pc) 
    move.w #2,-(sp)
    move.w #RWABS,-(sp) ; Bootsektor lesen
    trap #BIOS 
    lea $e(sp),sp
    lea bootsec(pc),a0 ; Bootsektor ausführbar? 
    clr d0
    move.w #255,d1 
bloop:
    add.w (a0)+,d0 
    dbra d1,bloop 
    cmp #$1234,d0
    beq bootsec ; ja, Bootsektor ausführen
    rts ; nein, Booten fortsetzten

trans:   dc.l $80f04445
dummy:   dc.l 0
sterr:   dc.b $0d,$0a,"FIX24 läuft nur auf dem TT!",$0d,$0a,$00 
message: dc.b $0d,$0a,"BootFIX24 V1.0 installiert,",$0d,$0a 
         dc.b "Cache aus... [TASTE] -> Reboot”, $0d,$0a,$00
ramerr:  dc.b $0d,$0a,"Das TT-RAM ist nicht leer!",$0d, $0a,$00

    even
bootsec: ds.w 1

Gabriel Schmidt
Links

Copyright-Bestimmungen: siehe Über diese Seite