Quick-Tips

PC-Speed und Mega ST

Mit meinem PC-Speed bin ich seit der ersten Stunde zufrieden. Eines störte mich allerdings doch: Beim Betrieb des Emulators im Mega ST konnte ich bei einigen Programmen davon ausgehen, daß sie nur eine kurze Zeit (30-50 Minuten) liefen. Vor allem Programme. die viel auf die Festplatte oder den Bildschirmspeicher Zugriffen, stürzten dann ständig ab. Andere Programme hingegen funktionierten klaglos. Alles sah nach einem speziellen Fehler nur in meinem Mega ST aus. Da dieser immer erst nach einiger Betriebszeit auftrat, lag ein sogenannter Hitzefehler irgendeines IC's nahe. Mehrere Nachfragen bei Freunden und Händlern bestätigten mir aber, daß meine Erfahrung kein Einzelfall war.

Ein Anruf beim Speed-Entwickler sollte Klarheit bringen. Tatsächlich ist der Sachverhalt dort bekannt. Abhilfe ist preiswert und relativ einfach möglich. Es müssen zwei ICs auf der Mega-Platine ausgewechselt werden, da diese für den Fehler verantwortlich sind. Zwischen RAM und ROM-Bausteinen befinden sich vier 74LSxxx-Bausteine in einer Reihe, zwei 74LS244 und zwei 74LS373. Die beiden letzten sind gegen High Speed-CMOS-Bausteine des gleichen Typs (74HC373) auszutauschen - also auslöten. Sockel einlöten und neue Chips einsetzen. Kostenpunkt für Sockel und Bausteine: unter DM 4,-. Die neuen ICs bringen die Leistung (auch bei Erwärmung), die die originalen LS-Bausteine nicht bringen. Sollte bei Ihnen der Rechner des öfteren aussteigen, ist die Probe dieses Q-Tips zunächst und vielleicht überhaupt die preiswerteste Lösung.

Marco v. Landenberg

RSC-Datei mit Fehlern

Daß das alte Betriebssystem des ATARI ST seine Macken hat, ist ja hinreichend bekannt, so daß man sich beim Programmieren immer nur wundern kann, warum der Rechner plötzlich einen Bombenhagel auf den Bildschirm niederprasseln läßt. Haben Sie auch schon mal eine RSC-Datei konstruiert und anschließend in GFA-BAS1C verwaltet? Und mußten Sie dann feststellen. daß beim Doppelklick auf ein Objekt zwar selektiert, aber nicht ausgeführt wird? Na, macht doch nichts, dachte ich mir. solange es beim normalen Anklicken funktioniert, ist ja alles in Ordnung. Falsch gedacht, wie sich dann bald herausstellte, beim Doppel klick auf ein BOXTEXT mit dem Attribut TOUCHEXIT oder EXIT folgte prompt ein Absturz, besonders, wenn das Programm bereits compiliert war.

Der Grund für den Absturz liegt im Rückgabewert der FORM_DO-Routine im GFA-BASIC. Bei einem Doppelklick auf einen BOXTEXT, der als TOUCHEXIT oder EXIT deklariert ist, liefert die Routine nicht den Wert des angeklickten Objekts wie bei einem einfach Anklicken, sondern einen Wert wie -32712 oder ähnliche Werte. Bei Buttons ist es allerdings egal, wie oft man sie anklickt, es wird immer der richtige Wert geliefert. Wenn man nun nicht aufpaßt und diesen Wert weiterverwendet und ihn vielleicht sogar in einen OBJECT_DRAW-Aufruf einbringt. wird der ST sofort zum Bombenleger. Deswegen sollte man vorher den Rückgabewert genau überprüfen!

Die Objekte ob1& bis ob4& sind Boxtexte mit dem Attribut TOUCHEXIT. Nach einem Procedure-Aufruf wird das jeweilige Objekt mit Hilfe von OBJECT_DRAW wieder restauriert. Wenn bei der obigen Routine nun ein Doppel klick auf eines der Objekte obI& bis ob4& ausgeübt wird, gibt es entweder Bomben oder einen Totalabsturz.

Thomas Appel

    REPEAT
        e%=FORM_DO(tree%,0)
        SELECT ex%
        CASE ob1& 
            GOSUB A 
        CASE ob&
            GOSUB B 
        CASE ob3&
            GOSUB C 
        CASE ob4&
            GOSUB D 
        ENDSELECT
        OB_STATE(tree%,ex%)=0
        OBJECT_DRAW(tree%,ex%,ex%,x%,y%,w%,h%) 
    UNTIL ex%=ob5&

Listing 1: Wir basteln einen Bombenalarm

Das aktuelle Laufwerk

Bei den meisten selbstgeschriebenen Programmen wird fast nie berücksichtigt, daß es auch Benutzer mit Hard- oder RAM-Disk gibt, die ihre Programme nicht von Laufwerk A: starten. So werden bei vielen Programmen RSC-Dateien automatisch von Laufwerk A: geladen, was den Besitzer einer Festplatte ziemlich ärgert.

Im GEMDOS ist eine Adresse enthalten, die Auskunft über das aktuelle Laufwerk gibt. Wenn Dateien nachgeladen werden oder eine Fileselectbox auf dem Bildschirm erscheinen soll, sollte man diese Speicherstelle zu Rate ziehen. In GFA-BASIC sieht das etwa so aus:

    laufwerk=GEMDOS(25)
    FILESELECT CHR$(laufwerk+65)+":\*.*",nam$,nam$

Zur Laufwerksangabe, die man durch den Aufruf von GEMDOS(25) erhält, muß 65 addiert werden, da die Funktion für Laufwerk A: den Wert 0, für Laufwerk B den Wert I usw. zurückgibt.

Siegfried Hühner

Fröhliche Suche nach der Maus

Da ich wahrscheinlich nicht der einzige bin. der ein kleines Problem mit einigen ST-Programmen hat. habe ich mich entschlossen, ein kleines Programm zu schreiben, das meine Probleme lösen soll. Es handelt sich dabei um ein Accessory, mit dem man die Maus einschalten kann. Jetzt werden Sie fragen, wozu man ein solches Programm braucht. Ich benutze es immer als kleine Hilfe bei einigen Programmen, bei denen auf myteriöse Weise immer wieder einmal der Mauszeiger verschwindet. Dies gescheiht z.B. im Editor des PD-Modula 2-Systems. Die Maus geistert dann nur noch unsichtbar durch die Gegend. Man sieht dann nichts mehr von diesem niedlichen Zeiger, kann aber dennoch die Menüleiste oder andere GEM-Elemente anklicken. Daß dieses Zufallsspiel uneffektiv ist, versieht sich von selbst. Dennoch ist es relativ einfach, die Menüleiste zu erreichen und ein Element anzuwählen. Hier setzt das von mir geschriebene Programm ein. Es steht als Accessory auf der linken Seite in der Menüleiste. Wird es angewählt, taucht der Mauszeiger plötzlich wieder wie aus dem Nichts auf.

Ulrich Seidl

Die rechte Maustaste

Sicherlich werden Sie sich bereits gefragt haben, warum die ATARI-Maus zwei Tasten hat, wenn man sowieso nur die linke benutzen kann. Dem ist nicht so, denn auch auf dem DESKTOP hat die rechte Maustaste eine Funktion, die aber im spärlichen ATARI-Handbuch leider nicht beschrieben ist.

Öffnen Sie zwei Fenster (etwa A: und B: oder A: und A:). Natürlich ist jetzt eines der beiden geöffneten Fenster nicht selektiert, das andere dagegen ist es selektiert. Wenn Sie nun eine Datei vom nicht selektierten Fenster in das selektierte kopieren wollen, müssen Sie es nicht erst an-klikken. Halten Sie die rechte Maustaste gedrückt und wählen dann mit der linken die Datei aus, die Sie kopieren, löschen oder verschieben wollen. Sie werden sehen, daß dabei das Fenster nicht aktiv wird. Sie aber trotzdem alle Aktionen damit tätigen können, die Sie auch bei einem "normalen" Fenster machen können (außer: Scroll-Balken bewegen, Fenster schließen etc.). Die Möglichkeit funktioniert ebenfalls mit der Shift-Taste, so daß Sie auch in einem inaktiven Fenster mehrere Dateien anwählen können.

MP

Boot-Laufwerk auswählen

Dieses kleine Accessory in GFA-BASIC 3.0 beschäftigt sich mit der Systemvariablen bootdev (Boot-Device) des TOS. Das Register bootdev enthält nicht, wie häufig in der Literatur behauptet, die Nummer des Gerätes, von dem gebootet wurde, sondern die desjenigen Gerätes, von dem beim nächsten Reset gebootet wird. Was liegt also näher, als diese Systemvariable zu nutzen, um beim nächsten Reset z.B. von Laufwerk B zu booten? Das ist besonders interessant. wenn man als Laufwerk B eine 5/4 -Floppy im Einsatz hat. Man kann nun auch ohne Hardware-Eingriffe von der zweiten Floppy booten.

Das Programm ist als Accessory in GFA-BASIC 3.0 geschrieben. Es kann natürlich auch umgeschrieben werden, so daß man es als PRG vom Desktop aus starten kann (wenn man den Platz für ein ACC nicht verschwenden will). Die Routinen, die das Programm zum Accessory machen (Anmelden, Eintrag in die Menüleiste, Warten auf Aufruf) stehen in den Zeilen 11 bis 20. Die Prozedur boot-dev enthält die Routinen zur Auswahl des Boot-Laufwerks. Die Procedur super schaltet zwischen dem User- und dem Supervisor-Modus des Prozessors hin und her.

Wie oben bereits erwähnt, enthält die Systemvariable bootdev die Nummer des Gerätes, von dem beim nächsten Reset gebootet wird. Die Systemvariable hat Wortlänge und befindet sich an der Adresse S446 des TOS. Dieses Register wird bei einem Reset nicht gelöscht, so daß man nach einem Reset von dem Laufwerk bootet, dessen Nummer man vorher in bootdev hineingeschrieben hat. Standardmäßig steht im Register bootdev eine 0 für Laufwerk A. Auf die Systemvariable bootdev kann man nur im Supervisor-Modus des Prozessors zugrei fen, so daß man diesen vorher einschalten muß. Dazu dient die Prozedur super. Den Supervisor-Modus schaltet man über die GEMDOS-Funktion $20 (super) ein (und aus). Beim ersten Aufruf der Funktion super w ird als Parameter ö übergeben, d.h. der Prozessor wird in den Supervisor-Modus geschaltet und als SSP (Supervisor Stack Pointer) der bisherige USP (User Stack Pointer) benutzt.

;********************************************
;* Dieses Programm dient zum Einschalten    *
;* der Maus, falls dieses bei Programmen    *
;* wie dem PD-Modula2-Systam z.B im         * 
;* Editor verschwindet. Programm nach       * 
;* Assemblieren und Linken in               *
;* MOUSEON.ACC umbenennen!                  *
;********************************************

        lea.l   atack(pc),sp 
        bsr.s   fila6
        move.w  #10,(a5)+ 
        move.l  d7,(a5)+ 
        clr.w   (a5)+
        bsr.s   aes
        move.w  intout(pc),appid-contrl(a6)
        move.w  135,(a5)+
        move.w  d7,(a5)+
        mova,w  d7,(a5)+
        move.w  d7,(a5)+
        move.w  appid(pc),intin-contrl(a6) 
        move.l  #accname,addrin-contrl(a6)
        bsr.s   aes
        move.w  intout(pc),accid-contrl(a6)
loop:   bsr.s   mevent
        cmpi.w  #40,magbuff-contrl(a6)
        bna.a   loop
        move.w  msgbuff+8(pc),d0
        cmp.w   accid(pc),d0
        bna.a   loop
        .DC.w   $a009
        bra.s   loop 
mevent: move.w  #23,(a5)+
        move.l  d7,(a5)+ 
        move.w  d7,(a5) +
        move.l  #msgbuff,addrin-contrl(a6) 
aes:    move.l  #aespb,d1
        clr.w   (a5)+ 
        move.w  #$c8,d0 
        trap    #2
fila6:  lea.l   contrl(pc),a6
        move.l  a6,a5 
        moveq.l #1,d7
        rts 
        .DATA
accnama: .DC.b ' MOUSEON  ',0
aespb:  .DC.l   contrl,global,intin,intout,addrin,addrout

        .BSS
appid:  .DS.w 1
accid:  .DS.w 1
magbuff: DS.b 16
contrl: .DS.w 5
global: .DS.w 15
intin:  .DS.w 2
intout: .DS.w 2
addrin: .DS.l 2
addrout:.DS.l 2
        .DS.b 100
atack:
        .END

Listing 2: Anschalten des Mauszeigers

Der bisherige SSP wird als suret zurückgeliefert. Nun ist ein Zugriff auf die Systemvariablen von $0 bis S7FF möglich, wozu auch bootdev ($446) gehört.

Nach dem Zugriff auf _boot-dev muß der Prozessor wieder in den User-Modus zurückgeschaltet werden. Das geschieht ebenfalls mit der GEMDOS-Funktion super. Dazu wird der alte SSP als Parameter übergeben. Wenn der Parameter stack% größer als 0 ist (wie in diesem Fall), wird der Prozessor-Modus umgeschaltet, und der Parameter stack% wird neuer aktueller Stack-Pointer.

[1] Jankowski/Reschke/Rabich ATARI ST Profibuch, Sybex Verlag GmbH 1987

Wordplus-Tips

Das nue Wordplus (Version 3.15) stürzt im Gegensatz zur Version 2.02 ab, wenn ein Text eingelesen wird, dessen Zeilen länger sind als 160 Zeichen. In der alten Version wurde der Text umgebrochen, in der neuen werden wirre Zeichen geschrieben, anschließend bombt es ganz gewaltig. Zur Probe erstelle man einen String (z.B. in BASIC), sichere ihn als File und lese ihn in die beiden Versionen ein. Vergessen Sie nicht, vorher die RAM-Disk zu retten! Einen Beispielabsturz sehen Sie in Bild 1.

Suchen und Ersetzen funktioniert in Wordplus bei manchen Wörtern nicht, wenn man den Text mit dem Wörterbuch korrigiert hat und in dem Text ein "ß" enthalten war. Der Grund: Das Wörterbuch von Wordplus kodiert das "ß" um in das ASClI-Zeichen 225, wie es im IBM-ASCII üblich ist: im "Zusatz.Sup" ist es auch so gespeichert. Im Text aber hat das "ß" den ASCII-Wert 158-und Wordplus konvertiert es beim Einfügen aus dem IBM-ASCII nicht mehr ins ATARI-ASCII. Solche Wörter werden nicht mehr gefunden. Abhilfe: den Text nach Korrektur mit 1st_Extra wieder ins ATARI -Format konvertieren.

Rudolf Schmitt

' BOOT_C.GFA
'
' Accessory zur Auswahl das Laufwerks, von dem 
' nach dem nächsten Reset gebootet werden soll 
' Sprache : GFA-BASIC 
' Autor Thomas Halfmann 
' (c) MAXON Computer GmbH 1990
'
' Datum : 10.09.1989
'
$ m1500 ! Reserviert 1500 Bytes für das ACC
ap_id&=APPL_INIT()  !Appl.-Identifikation
me_id&=MENU_REGISTER(ap_id& " Boot-Choose ")    ! Eintrag der ACC-Namens

DO                  ! Endlos-Schleife mit Überwachung
    ~EVNT_MESAG(0)  ! des Nachrichten-Puffers
    IF MENU(1)=40   ! ACC angewählt
        bootdev     ! Verzweigung zur eigentlichan Aufgabe
    ENDIF
LOOP
'
PROCEDURE bootdev
    ALERT 0,"Bootlaufwark auswählen : | ",1," A | B ",flp&
    super(0) ! Einschalten des Supervisor-Modus 
    DPOKE &H446,flp&-1      ! _bootdev
    super(suret%) ! Zurückschalten in User-Modus 
RETURN
'
PROCEDURE super(atack%)     ! Schaltet zw. User &
    suret%=GEMDOS(&H20,L:atack%) ! SV hin und her 
RETURN

Listing 3: So wird das Boot-Laufwerk bestimmt



Aus: ST-Computer 04 / 1990, Seite 174

Links

Copyright-Bestimmungen: siehe Über diese Seite