Software > Coding

TOS/MagiC // Uhr abschalten (Timerevent verhindern)

<< < (6/7) > >>

rainers:

--- Zitat von: mfro am Mo 15.04.2013, 14:03:16 ---Der Trick ist einfach: Physbase() (XBIOS #2), Logbase() (XBIOS #3) und Setscreen() (XBIOS #5). Mit Setscreen() kann man die physikalische Bildschirmadresse (der Speicherbereich, der auf dem Schirm erscheint) und die logische Bildschirmadresse (der Speicherbereich, den die Zeichenfunktionen als Bildschirm betrachten) auf unterschiedliche Adressen setzen.

--- Ende Zitat ---

Danke für Deine Tips. Das werde ich so versuchen. Hört sich logisch an.
Erste Tests sehen schon ganz gut aus ;-)



--- Zitat von: HamSTer am Mo 15.04.2013, 16:40:17 ---die antwort stand hier doch schon. mit wind_update() den bildschirm für andere applikationen sperren.

--- Ende Zitat ---

Nein, das stand hier noch nicht. Aber ich denke, es ist auch nicht das Gesuchte, denn "wind" klingt mir nach "windows" und es handelt sich bei der Uhr doch nicht um ein Fenster.
In ST-Pascal finde ich auch keine Funktion, die so heißt. Danke für den Tip.


-R.

rainers:
@mfro: Das ist echt toll, Deine Hilfe. Auf jeden Fall ist das eine Möglichkeit, die Uhr auszublenden.

Habe leider z.Zt. keine echte HW, so daß ich es nur im STeEm testen kann. Der scheint ein Problem mit MALLOC zu haben (nach langem guggeln habe ich im englischsprachigen Forum einen entsprechenden Beitrag gefunden). Jedenfalls kann ich keine 32000 Bytes mit MALLOC allokieren.
Das "switchen" der physikalischen Bildschirmadresse funktioniert aber bestens und die Uhr zeigt sich nicht mehr (bzw. aktuell an einer anderen Stelle).

Danke.
-R.

mfro:

--- Zitat von: Rainer (s) am Mo 15.04.2013, 22:18:26 ---Jedenfalls kann ich keine 32000 Bytes mit MALLOC allokieren.

--- Ende Zitat ---
Kannst Du ein statisches Feld mit 8000 LONG_INTEGERs anlegen? Das wär' doch genauso gut (zumindest solange das im ST-RAM angelegt würde)?

mfro:

--- Zitat von: HamSTer am Mo 15.04.2013, 16:40:17 ---die antwort stand hier doch schon. mit wind_update() den bildschirm für andere applikationen sperren.

--- Ende Zitat ---

Das wird m.E. nicht funktionieren.

wind_update(BEG_UPDATE) sorgt lediglich dafür, daß die AES keine Bildschirmausgaben (Fensterelemente, Menüs, Fileselect-Boxen, ...) mehr machen und die Rechtecklisten "eingefroren" werden.

"Normale" VDI-Funktionen werden dadurch nicht ausgebremst, sondern lediglich die Aktionen, die sich streng an GEM-Konventionen halten und nur dahin malen, wo es die AES-Rechtecklisten erlauben.

rainers:

--- Zitat von: mfro am Di 16.04.2013, 08:38:06 ---Kannst Du ein statisches Feld mit 8000 LONG_INTEGERs anlegen? Das wär' doch genauso gut (zumindest solange das im ST-RAM angelegt würde)?

--- Ende Zitat ---

Meinst Du in etwa so:
----------
VAR lPBase, lLBase, lNewAddress : long_integer;
    aScreen : ARRAY[1..8064] OF long_integer;


lNewAddress := Adr_Long_Integer(aScreen[1]);
IF lNewAddress <> 0 THEN
BEGIN
   lPBase := PHYSBASE;
   lLBase := LOGBASE;
   IF lPBase > lNewAddress THEN
   BEGIN
      lNewAddress := ((lPBase - lNewAddress) mod 256) + lNewAddress;
   END
   ELSE
   BEGIN
      lNewAddress := (256 - ((lNewAddress - lPBase) mod 256)) + lNewAddress;
   END;
   SETSCREEN(lNewAddress, -1, -1);

   .......
            
   SETSCREEN(lPBase, -1, -1);
----------

Ja. Das funktioniert prima. Die Uhr ist weg.
Einzig, nach jedem Prog-Aufruf fehlen 14 Bytes im RAM.
Sollte ich das Prog. ev. mit PTERM beenden?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln