Starthilfe: Mega STE - 16 MHz und Cache ohne XControl

Der neue Mega STE verfügt zwar über die Möglichkeit einer hohen Rechnergeschwindigkeit, aber beim Starten läuft er nur mit acht Megahertz. Eine Systemtaktänderung per Hardware von außen gibt es nicht. Hilfe bietet da nur die Software.

Seit dem Erscheinen des Mega STE wirbt Atari mit dessen hoher Taktfrequenz und dem 16K-Daten-Cache, die den neuen Atari schneller machen als seine ST-Brüder. Wer nun glaubt, der neue STE nutze seine Möglichkeiten schon beim Einschalten, der irrt. Tatsache ist, daß das Herz des Mega STE beim Starten nicht schneller schlägt als bei den Vorgängermodellen. Erst nach Installieren des AES (Application Environment Services) und mit Hilfe des neuen Kontrollfeldes läßt sich der STE auf die volle Geschwindigkeit bringen. Die getroffene Einstellung wird zwar im XControl abgespeichert, während des Boot-Vorganges tuckert der Mega STE aber immer noch vor sich hin.

Auch mag es Fälle geben, in denen man auf das XControl verzichten will oder muß, z.B. um Speicherplatz zu sparen oder oder... Um den Mega STE aus seinem gemütlichen Takt zu holen, muß das XControl als Application (.APP) gestartet werden, nachdem die GEM-Oberfläche aktiv ist.

Abhilfe kann hier nur ein Software-Programm schaffen, dessen Aufgabe die Manipulation der Systemgeschwindigkeit schon während des Bootens ist. Damit es auch die volle Wirkung erzielen kann, muß dieses Programm an die erste Stelle im Autoordner. Um Fehlinstallationen zu vermeiden, sollte es außerdem noch den Default-Rechnertyp erkennen können. Eine Möglichkeit des eigenen Konfigurierens der Geschwindigkeit wäre sicher auch von Vorteil.

Was braucht man/frau so?

Um eine Konfiguration von Hand zu ermöglichen, untersucht das Programm zunächst, ob die CapsLock-Taste in Betrieb ist. In diesem Falle findet kein Automatikbetrieb statt. Damit spätere Irritationen des Bedieners vermieden werden, wird die CapsLock-Taste nach diesem Test zurückgesetzt. Im anderen Fall stellt das Programm immer automatisch die schnellste Rechnergeschwindigkeit ein.

Der Rechnertyp läßt sich am besten über die Keksdose (Cookie Jar) im Rechner erfahren. Gesucht wird dort nach dem Eintrag des Maschienentyps (_MCH). Das nachfolgende Langwort sollte den Wert 65552 oder hexadezimal $00010010 enthalten, damit es sich um einen Mega STE handelt. Nach all diesen Tests wird es nun Ernst. Es darf geschaltet werden.

Für diese Umschaltung ist ein Hardware-Register mit der Adresse $FF8E21 verantwortlich. Das Zugreifen auf dieses Register ist nur im Supervisor-Mode möglich! Es enthält als Information zwei Bytes, wobei die gesuchte Information nur in den ersten zwei Bits des niederwertigeren Bytes steht! Wie diese beiden Bits beschaffen sind, soll nachstehende Tabelle verdeutlichen:

Bit Low High
0 Cache aus Cache ein
1 8 MHz 16 MHz

Aus diesen zwei Bits ergeben sich vier verschiedene Schaltmodi:

8 MHz ohne Cache
Dieser Modus bietet die höchste Kompatibilität zum alten ST-Standard.

8 MHz mit Cache
Dieser Modus ist zwar theoretisch möglich, bringt aber in der Praxis keinen Nutzen. In ihm würde die CPU genauso schnell getaktet wie das normale RAM. Ein schneller Zwischenspeicher - wie der Cache - verfehlt hierbei seine Wirkung. Wer es aber dennoch probieren möchte, sollte sich auf „Bombenfehler“ gefaßt machen!

16 MHz ohne Cache
Dieser Modus liefert schon eine gute Geschwindigkeitzunahme. Programme, die nicht mit dem Cache harmonisieren, erfahren hier schon eine gute Beschleunigung.

16 MHz mit Cache
Das ist die letzte und schnellste Konfiguration, die der Mega STE kennt. Leider arbeitet hierbei nicht alle Software ohne Probleme.

Schlußbemerkung

Zum Schluß stellt sich noch die Frage nach dem Grund solch einer Bremsung? Vielleicht rechnet Atari damit, daß der Benutzer es gar nicht merkt und immer brav das von Atari erstellte Kontrollfeld benutzt. Oder will man aus Gründen der Kompatibilität der oft nicht so sauber programmierten Spiele-Software auch eine Chance zum Booten geben? Wer weiß?

Eine Änderung des Systemtaktes per Knopfdruck von außen wäre - wie bei den meisten IBM-Kompatiblen schon Standard - sicher wünschenswert. Bis dahin versucht das folgende Programm diese Lücke ein wenig zu schließen. Viel Spaß beim Experimentieren mit den drei Takten.

Literatur: Sybex Profibuch „Atari ST-STE-TT“

Handbuch MAXON Pascal

{ Diese Programm stellt den Systemtakt des      }
{ MEGA-STE auf einen gewünschten Wert und       }
{ erlaubt es den Cache einzuschalten.           }
{   Ersteller        : Martin Ruppenstein       }
{   Programiersystem : MAXON Pascal 1.5         }
{   Datum            : 03.04.92                 }
{   (c) 1992 MAXON Computer                     }

{$R-,S-, V-,D-}

Program Umschaltung_16MHz_C;

(******** Benötigte Tools          *************)

uses Dos,Bios;

(********   Globale Variabelen     *************) 

var
    Sp_stelle : ^longint; { Rückgabewert Cookie }
    ok_g      : boolean;  { CapsLock betätigt?  }
    inhalt    : longint;  { Inhalt von Kbshift  }
                          { [bios 11] lesen     }

(******* Hilfsroutinen            *************)

{ C_String in Pascal String wandeln } 
procedure CtoPas Str(C: pointer;
                     P: string);ASSEMBLER;
ASM
    MOVE.L  C,A0    { Adresse vom C-String überg. }
    MOVE.L  P,A1    { Pascal-Str. übergeben       }
    CLR.L   D0      { Zähler auf Null             }
 @L1: { Label 1 )
    TST.B   (A0)    { Test ob Null char           }
    BEQ     @L2     { und tschüß                  }
    ADDQ.B  #1,D0   { Zähler um 1 erhöhen         }
    MOVE.B  D0,(A1) { Zähler an Pas[0] ubergeben  }
    MOVE.B  (A0)+,0(A1,D0) { C-Char an Pascal- }
                           { string übergeben  } 
    BRA     @L1     { Neues Zeichen holen         }
 @L2:               { Unterprogramm ende          }
END;

{ Funktion dient zum Auffinden eines bestimmten   }
{ Cookies im Cookie Jar                           }

function Find cookie(name : string) : pointer; 
    var
        cook_name : ^char;   { Adresse Cookie      }
        cook_str  : string;  { Cookie Name         }
        sp        : pointer; { Stackpointer sichern}

        { Absolute Adresse des Cookie Jars} 
        cookie_jar: longint ABSOLUTE $5A0;

        zaehler   : shortint;{ Hilfszähler         }
begin
    sp := super(Nil);   { Supervisormode ein!      }

      { Variabelen auf null setzen                 }
    Find_cookie := NIL;
    zaehler     := 0;

        {Cookie Jar untersuchen }
    While ({ cookieJar<>0 ) and not ((cook_str = name) or (cook_name^=char(0)))) do begin 
        cook_name := ptr(cookie_jar+sizeof(longint)*zaehler);
        CtoPas_Str(cook_name,cook_str);

        { Cookie gefunden? }
        if cook_str = name then 
            Find_cookie := Cook_name;
        inc(zaehler,2); 
    end;
    sp:=super(sp);          { Supervisormodus aus   }
end;

{ -- Systemtakt stellen und Cache einschalten !     } 
procedure Takt_stellen (W : shortint); 
    var
        sp      : pointer; { Stackpointer sichern   }

        {Absolute Adresse für Hardwareregister zum  } 
        {Umschalten von Systemtakt und Cache        }
        ste_ctl : Byte ABSOLUTE $FF8E21;

begin

        { -- Kommentar Zeilen } 
    writein(#27'E');writeln; 
    writeln('Umschalt Rotine des Mega STE'); 
    writeln('(C) Martin Ruppenstein 1992');

    sp:=super(NIL);     { Supervisormodus ein }

        { Bit 0 und 1 auf Low setzen } 
    ste_ctl := (ste_ctl or 3) xor 3; 
    case W of
        1 : begin
             write(#27'p Mega STE mit 8 Mhz Modus'); 
             writeln(#27'q'); 
            end;
        2 : begin
             ste_ctl:=ste_ctl or 2;
             write(#27'p Mega STE mit 16 Mhz Modus'); 
             writeln(' ohne Cache!'#27'q'); 
            end;
        3 : begin
             ste_ctl_=ste_ctl or 3;
             write(#27'p Mega STE mit 16 Mhz Modus'); 
             writeln(' mit Cache!'#27'q'); end;
    end;
    sp:=super(sp); {Supervisormodus aus }
end;

{ Auswahl Menü um den Takt selber einzustellen } 
function Menu : shortint;
    var wahl : shortint; 
begin 
    clrscr; 
    gotoxy(5,7);
    write('Mit dem nun folgendem Menu kann '); 
    write('die Einstellung selbst '); 
    write('gewählt werden!'); 
    gotoxy(7,10);
    write(#27'p1'#27'q -> 8 Mhz Mode ohne Cache '); 
    gotoxy(7,12);
    write(#27'p2'#27'q -> 16 Mhz Mode ohne Cache'); 
    gotoxy(7,14);
    write(#27'p3'#27'q -> 16 Mhz Mode mit Cache'); 
    gotoxy(13,16);
    writeln('Treffen Sie Ihre Wahl (1/2/3) ?'); 
    repeat
        wahl:=integer(readkey)-integer('0'); 
    until wahl in [1,2,3];
    Menu := wahl;
end;

{ Anzeige für falsches System !!!!!!!!} 
procedure Kein_STE; 
begin 
    clrscr; 
    writeln; 
    writeln;
    writeln(#27'pTut mir Sorry!'#27'q');
    write('Handelt sich nicht um einen MEGA STE!'); 
    writeln;
    write('Dieses Programm ist aber nur für '); 
    writeln(‘MEGA STE geeignet !!'); 
    delay(1000); 
end;

{ Status Umschalttasten abfragen und zurückge. } 
function Tastenabf(VAR UE :longint) : Boolean;
    var In_h : longint; 
begin
    In_h      := Kbshift(-1);
    Tastenabf := (In_h and UE) = UE;
    UE        := In_h;
end;

(***********************************************)
(********* H A U P T P R O G R A M M ***********) 
(***********************************************)

begin

        { Feststellen ob CapsLock in Betrieb und }
        { zurücksetzen falls sie betätigt        }
    inhalt := 16;
    ok_g := Tastenabf(Inhalt); 
    if ok_g then
        inhalt:= Kbshift(inhalt xor 16);
            { Suchen nach Maschinen Type }
    sp_stelle : = find_cookie ('_MCH');

        { Keinen Eintrag gefunden kein MEGA-STE )}
    if (sp_stelle=NIL) then begin 
        Kein_STE;
        exit;   { und Tschüß }
    end
    else { wenn Cookie vorhanden, Inhalt Lesen } 
        sp_stelle := ptr(longint(sp_stelle)+sizeof(longint));

        { Ist der Cookie Inhalt gleich  }
        { $00010010 dann ist Rechner ein}
        { Mega STE                      }
    if (sp_stelle^ = 65552) then
        if ok_g then { Selber Konfigurieren?        }
        begin
            Takt_stellen(Menu); { Systemtakt selber } 
            delay(500);         { stellen !         }
        end 
        else
            Takt_stellen(3)     { Systemtakt auf    }
                                { 16 Mhz plus Cache }
    else
        Kein_STE;     { Es war wieder kein Mega STE }

end.

Martin Ruppenstein
Links

Copyright-Bestimmungen: siehe Über diese Seite