MPS_mec1

MagicPC :mec1-Scnittstelle

Im Wesentlichen ist das folgende eine HTML-Aufarbeitung der Originaldokumentation von ASH
 

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).