•  Back 
  •  MagiC PC-Schnittstelle 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File14.2.2  mec1 Schnittstelle                                         TOS

  1. Konzept

     Die mec1-Schnittstelle ermöglicht es, im Motorola-Code von 
     Emulator vorgebenene Funktionen aufrufen. Sie entspricht der 
     mec0-Schnittstelle; die Funktionen sind jedoch nicht in einer DLL 
     frei definierbar, sondern schon vom Emulator 
     vorgegeben.Aufruf:Die Funktionen werden einheitlich durch den 
     Opcode $43bf aufgerufen, mit nachfolgender Funktionsnummer, also 
     4 Bytes Gesamtlänge. Beispiel:

     dc.w $43bf,$0031

     ruft die mec1-Funktion mit der Nummer 0x31 auf. ($43bf ist der 
     Opcode für chk <ea>,D1, mit <ea> = 111111 binär, also ungültig). 
     Die Parameter-Übergabe erfolgt wie bei mec0 über die Motorola 
     Register.

  2. Die Funktionen

      $0001   long emu_version:

               Parameter:  keine 
               return:     d0: Versions-Nummer 
                           d1: Versions-Datum 
                           d2: Bit0: Ist Demo-Version? 

      $0002   long emu_enquire: Ermittelt Verschiedenes.

               Parameter:  long d0: was willst Du wissen? 
               return:     long d0: Wert 

              bisher definiert:

               was:  1: Versionsnumemr 
                     2: Versionsdatume 
                     3: Ist Demo? 

      $0003   void emu_getexepath: Ermittelt vollen Pfad (incl. 
              Laufwerk, ohne MAGIC_PC.EXE)

               Parameter:  a0: char *bufadr (Buffer) 
                           d0: short nb_max (max. Byteszahl für Buffer) 

      $0004   int emu_install_newvdi:

               Parameter:  a0: Byte *bufadr (neuer Inhalt von NVDI_PC.DLL) 
                           d0: long nbytes  (Länge) 
               return:     d0: >0: erfolgreich NVDI_PC.DLN erzeugt. 
                           Beim nächsten  Hochstarten wird automatisch 
                           umbenannt in NVDI_PC.DLL, wie besprochen. 

      $0010   void dw_addline:  ! ab 03.97

              Text in neuer Zeile im Debug-Fenster ausgeben

               Parameter:  a0: Zeiger auf den Text. 

      $0011   void dw_addtext:  ! ab 03.97

              Text im Debug-Fenster ausgeben

               Parameter:  a0: Zeiger auf den Text. 

      $0011   void dw_formtxt:  ! ab 03.97

              Text sprintf-like im Debug-Fenster ausgeben

               Parameter:  a0: Zeiger auf den Format-String 
                           d0, d1, ...  zusätzliche Parameter, passend zu 
                           dem Format-String der Formatstring entspricht 
                           ungefähr sprintf(format,...); Stringpointer 
                           sind jedoch nicht zulässig. 

      $0031   int printer_open  ! ab 03.97

              printer_open öffnet den Standarddrucker und beginnt ein 
              neues Dokument

               Parameter:  a0: char *DocName (NULL-Pointer erlaubt) 
               return:     d0>0: alles klar 
                           d0<=0 Fehler 

      $0032   int printer_close  ! ab 03.97

              printer_close beendet das zuvor geöffnete Dokument und 
              schließt den Drucker

               Parameter:  keine 
               return:     d0>0: alles klar 
                           d0<=0 Fehler 

      $0033   int printer_write  ! ab 03.97

               Parameter:  a0: Byte *pData;  // Zeiger auf den DatenBuffer 
                           d0: long nBytes;  // Zahl der Bytes im Buffer 
               return:     d0: übertragene Bytes. 

      $0040   DWORD getTickCount  ! ab 03.97

               return:  d0: TickCount (msec seit Start des Rechners) 

      $0041   DWORD getDrivePath  ! ab 02.99

              Die Funktion ermittelt den Windows-Pfad für ein Magic- 
              Laufwerk.

               Parameter:  d0: DriveNr (0 für A:, 1 für B:, ...) 
                           a0: Textbuffer für den Pfad 
                           d1: Größe des Textbuffers 
               return:     d0: 0:  nicht gefunden, 
                               1:  Container-Laufwerk, 
                               2:  xfs-Laufwerk (Windows-Laufwerk) 
                               4:  Floppy-Laufwerk 

      $0042   DWORD setClipboardDir  ! ab 02.99

               Parameter:  a0: char *pPath // NULL: auf Default setzen 
               return:     d0: 1 

              Beispiel:

                      movea.l stringadr,a0    *
                      dc.w    $43bf,$0042     * mec1,Funktion $42 aufrufen
                      tst.l   d0              * -1: Fkt. nicht implementiert
                      jl  nichtimplementiert

      $0043   long getMouseWheel

               Parameter:  d0.l: 1: Position nach dem Auslesen zurücksetzen 
                                 0: Position nach dem Auslesen nicht zurücksetzen 
               return:     d0.l: aktuelle Position des Mausrades 

              Beispiel:

                      moveq   #1,d0       * Position nach dem Auslesen zurücksetzen
                      dc.w    $43bf,$0043 * mec1,Funktion $43 aufrufen
                      tst.l   d0          * Position seit letztem zurücksetzen geändert
                      je  no_action
                      <d0.l verarbeiten>

      $0045   long setCompiler  ! ab 17.06.99

               Parameter:  d0.l: Auswahl, im Moment realisert: 
                           d0 = 1: Compiler ein/ausschalten: 
                           ----- 
                           d1 = 0: Compiler aus, 
                           d1 = 1: Compiler ein 
                           d1 = -1: Modus erfragen (Nach meinen Erfahrungen 
                                    funtioniert dies nicht, soll aber in 
                                    der 6.20 funktionieren) 
               return:     alter Modus (0 oder 1).