UNFIX24: Rückkehr zu 32 BIT

Auf dem TT sorgt die Beschränkung der Adressierung des 68030 auf 24 Bit bei unsauber programmierten Programmen zu grösserer ST-Kompatibilität. Bisher war es nur durch einen Reset möglich, wieder den vollen Adressraum zu nutzen. Dem kann jedoch abgeholfen werden.

In [1] wurde das Programm FIX24 V1.1 vorgestellt, das mit Hilfe der MMU des 68030 einige unsauber programmierte Anwendungen zur Zusammenarbeit mit dem TT überredet. Hierzu wird der Adreßraum des Prozessors auf die ST-kompatiblen ersten 16 MByte beschränkt. Dies bedeutet zwar einen Verzicht auf das schnelle TT-RAM, erlaubt dafür aber den Einsatz von Programmen, die die oberen 8 Bit einer Adresse für eigene Zwecke einsetzen.

Um nun wieder zur vollen 32-Bit-Adressierung zurückzukehren, war es bisher notwendig, einen Reset auszulösen, damit Betriebssystem und Prozessor wieder den gesamten Adreßraum zur Verfügung gestellt bekamen. Dieses Vorgehen ist recht unpraktisch und kann vor allen Dingen dann störend sein, wenn in einem Netzwerk gearbeitet wird, wo ein Neu-B booten sich auch auf andere Rechner aus wirken kann.

Das ganze läßt sich jedoch auch eleganter lösen. UNFIX24 erlaubt es, die von FIX24 vorgenommenen Änderungen weitgehend rückgängig zu machen und so ohne erneutes Booten das TT-RAM nutzen zu können.

Zweigeteilt

UNFIX24 erfüllt seine Aufgabe in zwei Schritten. Zum einem müssen die Deskriptor-Tabellen der MMU auf die Standardwerte gesetzt werden, wie sie nach dem Booten vorliegen. Ferner muß das von FIX24 blockierte TT-RAM wieder ins System integriert werden.

Was die Deskriptor-Tabellen betrifft, so brauchen lediglich die Default-Einstellungen an die entsprechenden Stellen kopiert zu werden. Dabei ist zu beachten, daß in den oberen Speicherbereichen der Cache nicht aktiv sein soll, was in den Deskriptoren durch das gesetzte CI-Bit markiert wird.

Nachdem das Translation-Control-Register und die Transparent-Translation-Register mit den für den Normalbetrieb üblichen Werten versehen wurden, ist der Zustand, wie er vor dem Start von FIX24 vorlag, wieder hergestellt. Zum Register TT0 ist zu sagen, daß das TT-RAM transparent behandelt wird. Alle logischen Adressen werden also ohne weitere Umrechnung direkt auf den physikalischen Adreßraum abgebildet, so daß beim Zugriff auf das schnelle RAM keine Zeit für Adreßmanipulationen verlorengeht.

Speicherzuteilung

Nun geht es noch darum, das TT-RAM erneut für TOS zugänglich zu machen, nachdem es ja von FIX24 komplett belegt wurde. Hierzu bedient sich UNFIX24 der MADDALT-Routine des GEMDOS. Diese erlaubt es, einen Speicherbereich zu definieren, der von TOS als schnelles RAM angesprochen werden kann. Eigentlich ist MADDALT dazu gedacht, beispielsweise RAM am VME-Bus des TT nachträglich ins System einzubinden. Das BIOS erkennt eine solche RAM-Erweiterung bei der Initialisierung nämlich nicht selbständig.

Ob der an MADDALT übergebene Speicherbereich aber nun tatsächlich mit dem VME-Bus zusammenhängt oder es sich um einen anderen Speicherblock handelt, wird von MADDALT nicht weiter überprüft. So ist es möglich, Anfangsadresse und Größe des physikalischen TT-RAM an diese Funktion zu übergeben. Wieviel TT-RAM zur Verfügung steht, entnimmt UNFIX24 den Informationen, die FIX24 im cookie jar abgelegt hat.

Einmalige Angelegenheit

Es muß unbedingt darauf geachtet werden, nach dem Einsatz von UNFIX24 nicht erneut FIX24 zu starten. Wurde das TT-RAM über MADDALT an TOS vergeben, kann FIX24 bei einer etwaigen Neuinstallation nicht feststellen, ob das TT-RAM zwischenzeitlich bereits an andere Programme vergeben wurde. Wird in einem solchen Fall die Adressierung auf 24 Bit beschränkt, kann auf Routinen, die im TT-RAM liegen, nicht mehr zugegriffen werden, was höchstwahrscheinlich in einem Absturz endet.

Um allen Lesern die Nutzung von UNFIX24 zu ermöglichen, ist neben dem Assembler-Listing auch ein BASIC-Programm abgedruckt, das die fertige Programmdatei erzeugt.

[1] „Speicher-Manipulationen ST-Computer 5/91

************************************
*                                  *
* UNFIX24                          *
*                                  *
* deinstalliert FIX24 V1.1         *
* und hebt 24-Bit-Adressierung auf *
* by Uwe Seimet                    *
*                                  *
* (c) MAXON Computer 1991          *
*                                  *
************************************

GEMDOS = 1
CCONWS = 9
MADDALT =20 
SUPER = 32

_p_cookies = $5a0       ;Pointer auf cookie jar 

magic   = "FIX2"        ;magic von FIX24 

        text

        clr.l -(sp)
        move #SUPER,-(sp)
        trap #GEMDOS
        addq.l #6,sp
        move.l d0,d7
        lea inserr(pc),a6
        move.l _p_cookies,d0
        beq quit        ;kein
                        ;cookie jar-

        move.l d0,a0 
cloop:  movem.l (a0)+,d0/d6
        tst.l d0
        beq quit         ;Ende des
                         ;cookie jar-
        cmp.l #"FIX2",d0 ;FIX24 installiert?
        bne cloop        ;nein-

erase:  movem.l (a0)+,d0-d1     ;Eintrag aus
        movem.l d0-d1,-16(a0)   ;cookie jar
        tst.1 d0                ;entfernen
        bne erase

        movec.l cacr,d0         ;Cache
        or #$0808,d0            ;löschen
        and #$fefe,d0           ;und
        movec.l d0,cacr         ;abschalten
        pmove dummy,tc          ;Übersetzung
                                ;anhalten
        pmove dummy,tt0 
        pmove dummy,tt1

        lea $0700,a0            ;Deskriptoren-
                                ;Adresse

        move.l #$742,(a0)+ 
        moveq #$00000001, d1 
        moveq #6,d0
fill1:  move.l d1,(a0)+         ;Default-
        add.l #$10000000,d1     ;Tabelle
        dbra d0,fill1           ;aufbauen
        move.l #$80000041,d1 
        moveq #7,d0 
fill2:  move.l d1,(a0)+         ;dto
        add.l #$10000000,d1 
        dbra d0,fill2

    pmove tt0reg(pc),tt0
        pmove trans (pc),tc     ;Übersetzung
                                ;neu starten

        mulu.l #$00010000,d6    ;Speichergröße

        move.l d6,-(sp)         ;Speichergröße
        pea $01000000           ;neuen Speicher
        move #MADDALT,-(sp)     ;bereitstellen
        trap #GEMDOS 
        lea 10(sp),sp

        lea message(pc),a6
quit:   move.l d7,-(sp)
        move #SUPER,-(sp) 
        trap #GEMDOS 
        addq.l #6,sp 
        pea (a6)
        move #CCONWS,-(sp) 
        trap #GEMDOS 
        addq.l #6,sp 
error:  clr -(sp)
        trap #GEMDOS


trans:  dc.l $80f04445          ;für TC-Regrster

tt0reg: dc.l $017e8107          ;transparente
                                ;Übersetzung 
                                ;im TT-RAM

inserr:  dc.b $0d,$0a,"FXX24 ist nicht "
         dc.b "installiert! ",$0d,$0a,$00 
message: dc.b $0d,$0a,"FIX24 wurde "
         dc.b "deaktiviert!", $0d,$0a, $00

         bss

dummy:   ds.l 1                 ;für TC-Register

OPEN "O",#1,"UNFIX24.PRG"
FOR i=1 TO 336 
    READ byte
    PRINT #1,CHR$(byte);
NEXT i 
CLOSE #1

DATA &60,&1A,&00,&00,&01,&2C,&00,&00,&00,&00,&00,&00,&20,&04,&00,&00 
DATA &00,&00,&00,&00,&00,&00,&00,&00,&00,&01,&00,&00,&42,&A7,&3F,&3C 
DATA &00,&20,&4E,&41,&5C,&8F,&2E,&00,&4D,&FA,&00,&E0,&20,&38,&05,&A0 
DATA &67,&00,&00,&B8,&20,&40,&40,&D8,&00,&41,&4A,&80,&67,&00,&00,&AC 
DATA &B0,&BC,&46,&49,&58,&32,&66 &EE,&4C,&D8,&00,&03,&48,&E8,&00,&03 
DATA &FF,&F0,&4A,&80,&66,&F2,&4E,&7A,&00,&02,&80,&7C,&08,&08,&C0,&7C 
DATA &FE,&FE,&4E,&7B,&00,&02,&F0,&39,&40,&00,&00,&00,&01,&2C,&21,&F9 
DATA &00,&00,&01,&2C,&10,&00,&F0,&39,&08,&00,&00,&00,&03,&E8,&F0,&39 
DATA &0C,&00,&00,&00,&03,&E8,&41,&F8,&07,&00,&20,&FC,&00,&00,&07,&42 
DATA &72,&01,&70,&06,&20,&C1,&D2,&BC,&10,&00,&00,&00,&51,&C8,&FF,&F6 
DATA &22,&3C,&80,&00,&00,&41,&70,&07,&20,&CI,&D2,&BC,&10,&00,&00,&00 
DATA &51,&C8,&FF,&F6,&21,&F9,&00,&00 &00,&EA,&10,&00,&F0,&39,&08,&00 
DATA &00,&00,&03,&E8,&F0,&39,&40,&00,&00,&00,&00,&E6,&4C,&3C,&60,&00 
DATA &00,&01,&00,&00,&2F,&06,&48,&79,&01,&00,&00,&00,&3F,&3C,&00,&14 
DATA &4E,&41,&4F,&EF,&00 &0A,&4D,&FA,&00,&43,&2F,&07,&3F,&3C,&00,&20 
DATA &4E,&41,&5C,&8F,&48,&56,&3F,&3C,&00,&09,&4E,&41,&5C,&8F,&42,&67 
DATA &4E,&41,&80,&F0,&44,&45,&01,&7E,&81,&07,&0D,&0A,&46,&49,&58,&32 
DATA &34,&20,&69,&73,&74,&20,&6E,&69,&63,&68,&74,&20,&69,&6E,&73,&74 
DATA &61,&6C,&6C,&69,&65,&72,&74,&21,&0D,&0A,&00,&0D,&0A,&46,&49,&58 
DATA &32,&34,&20,&77,&75,&72,&64,&65,&20,&64,&65,&61,&6B,&74,&69,&76 
DATA &69,&65,&72,&74,&21,&0D,&0A,&00,&00,&00,&00,&4E,&06,&46,&12,&00

Uwe Seimet
Aus: ST-Computer 09 / 1991, Seite 82

Links

Copyright-Bestimmungen: siehe Über diese Seite