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