← ST-Computer 06 / 1992

FIX24 im Boot-Sektor

Programmierpraxis

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