SYSTEMAUFRUFE FÜR ANWENDUNGEN
eax = Funktionsnummer
int 0x40 = Systemaufruf
00 = DEFINIEREN UND ZEICHNEN EINES FENSTERS
ebx [x start]*65536 + [x größe]
ecx [y start]*65536 + [y größe]
edx Grundfarbe 0xXYRRGGBB wenn X=8 -> Farbverlauf
wenn Y=0 -> Fenstertyp I
wenn Y=1 -> reservierter Bereich, kein eichnen
wenn Y=2 -> Fenstertyp II
wenn Y=3 -> Fenster skinned,
schließen-Button id=1 hinzugefügt
esi Titelleistenfarbe 0xXYRRGGBB wenn X=8 -> negativer Farbverlauf
wenn X=4 -> positiver Farbverlauf
Y normal 0
wenn Y=1 -> Fenster kann nicht über GUI bewegt werden
edi Rahmenfarbe 0x00RRGGBB
ret: keine Änderung
01 = PIXEL SETZEN
ebx [x]
ecx [y]
edx Pixelfarbe 0x0XRRGGBB
^ 0 normales setzen , 1 negativ
ret: keine Änderung
02 = TASTE ERMITTELN
ret: al 0 erfolgreich -> ah = Taste
al 1 keine Taste im Puffer
Siehe auch Funktion 66
03 = SYSTEMZEIT ERMITTELN
ret: eax 0x00SSMMHH sec,min,hour
04 = TEXT IN FENSTER SCHREIBEN
ebx [x start]*65536 + [y start]
ecx Farbe - 0x00RRGGBB
Schriftart (0 or 1) - 0xF0000000
edx Zeiger auf den Textanfang
esi Textlänge
ret: keine Änderung
05 = VERZÖGERUNG X/100 SEKUNDEN
ebx VERZÖGERUNG in 1/100 Sekunden
ret: keine Änderung
07 = BILD ANZEIGEN
ebx Zeiger auf Bild im Speicher - RRGGBBRRGGBB..
ecx Bildgröße [x]*65536+[y]
edx BIldposition im Fenster [x]*65536+[y]
ret: eax 0 erfolgreich, 1 überschneiden
08 = BUTTON DEFINIEREN
ebx [x start]*65536 + [x größe]
ecx [y start]*65536 + [y größe]
edx Button ID Nummer (24 Bits)
esi Buttonfarbe 0x 00 RR GG BB
ret: keine Änderung
; wenn das Bit 31 in edx gesetzt ist, dann entfernt die Funktion den Button mit der passenden ID
; beachte dass die Funktion nicht das Buttonbild entfernt, um überflüssiges flackern zu verhindern -
; zum Beispiel beim wechseln der Farbe
; wenn das Bit 30 in edx gesetzt ist, dann wird das Buttonbild nicht gezeichnet
; wenn das Bit 29 gesetzt ist, wird das Rechteck beim drücken nicht gezeichnet
09 = PROZESS INFO
ebx Zeiger auf die 1024 Byte Tabell
ecx Prozess Nummer oder -1 = wer bin ich
ret: eax Nummer des Prozesses
table : +00 dword CPU Nutzung
+04 word Position im Fenster-Stack
+06 word Fenster-Stack Wert bei ecx
+10 12 db Name des Prozesses
+22 dword Start des Prozessspeichers
+26 dword genutzer Speicher des Prozesses
+30 dword PID des Prozesses
+34 dword Fenster x start
+38 dword Fenster y start
+42 dword Fenster x größe
+46 dword Fenster y größe
+50 word Prozessstatus
10 = AUF EIN EREIGNIS WARTEN
ret: eax Ereignisart, 1 Fenster neuzeichnen, 2 Taste im Puffer, 3 Button gedrückt
11 = AUF EIN EREIGNIS PRÜFEN, KEIN WARTEN
ret: eax 0 kein Ereignis, 1 Fenster neuzeichnen, 2 Taste im Puffe, 3 Button gedrückt
12 = STATUS BEIM FENSTER NEUZEICHNEN
ebx 1 beginn des neuzeichnens, 2 ende des neuzeichnens
ret: keine Änderung
13 = BALKEN ZEICHNEN
ebx [x start]*65536 + [x größe]
ecx [y start]*65536 + [y größe]
edx Farbe 0x00RRGGBB
ret: keine Änderung
14 = BILDSCHIRMGRÖßE ERMITTELN
ret: eax [screen x max]*65536 + [screen y max]
15 = HINTERGRUND
ebx 1 : Hintergrundgröße setzen
ecx x größe
edx y größe
ebx 2 : in Hintergrundspeicher schreiben - max (0x100000-16)
ecx Position im Speicher in Bytes
edx Farbe 0x00RRGGBB
ebx 3 : Hintergrund zeichnen
ebx 4 : Art des Hintergrund zeichnens
ecx 1 - kacheln
ecx 2 - strecken
ebx 5 : Bild in des OS Hintergrundspeicher bewegen
ecx - von
edx - nach wohin in den OS Hintergrundspeicher
esi - Anzahl der zu bewegenden Bytes
16 = RAMDISK AUF DISKETTE SPEICHERN
ebx 1 : alles speichern
17 = GEDRÜCKTE BUTTON-ID ERMITTELN
ret: al 0 erfolgreich -> ah = ID Nummer (8 Bits)
shr eax,8 -> eax = ID Nummer (24 Bits)
al 1 keine Taste im Puffer
18 = SYSTEMSERVICE
ebx 1 - Systemboot
ebx 2 - Beendigung erzwingen, ecx Prozessnummer
ebx 3 - aktiviere Fenster in der Prozessliste ecx
ebx 4 - IDLE Taktzyklen / Sekunde
ebx 5 - Zeitstempelzähler / Sekunde - CPU-Geschwindigkeit
20 = MIDI INTERFACE - MPU401
ebx 1 - Gerät resetten
ebx 2 - cl Midi Daten zur Ausgabe
21 = EINRICHTUNG VON GERÄTEN
ebx 1=Roland MPU Midi Base, Basis IO Adresse
ebx 2=Tastatur 1 Basis Tastaturlayout 2 Tastaturlayout umschalten (ecx Zeiger auf Tastaturlayout)
9 Land 1eng 2fi 3ger 4rus
ebx 3=CD Basis 1 Pri Master 2 Pri Slave,
3 Sec Master 4 Sec Slave
ebx 4=SB16 Basis, Basis IO Adresse
ebx 5=Systemsprache, 1eng 2fi 3ger 4rus
ebx 6=wss Basis, Basis IO Adresse
ebx 7=HD Basis, 1 Pri Master 2 Pri Slave
3 Sec Master 4 Sec Slave
ebx 8=FAT32 Partition in HD
ebx 10=Sound DMA Kanal in ecx
23 = AUF EIN EREIGNIS MIT TIMEOUT WARTEN
ebx Zeit der Verzögerung in 1/100 Sekunden
ret: eax Ereignisart: 0 kein Ereignis, 1 Fenster neugezeichnet,
2 Taste im Puffer, 3 Button
24 = CD AUDIO
ebx 1 - spielen von ecx 00 FR SS MM
ebx 2 - Playlistgröße von ecx zu [edx] ermitteln
ebx 3 - Stop/Pause Play
25 = SB16 - MIXER I
ebx 1 - Hauptlautstärke setzen cl [L]*16+[R]
ebx 2 - CD-Lautstärke setzen cl [L]*16+[R]
26 = KONFIGURATION VON GERÄTEN ERMITTELN
ebx 1=Roland MPU Midi Basis, Basis IO Adresse
ebx 2=Tastatur 1 Basis Tastaturlayout 2 Tastaturlayout umschalten
9 Land 1eng 2fi 3ger 4rus
ebx 3=CD Basis 1 Pri Master 2 Pri Slave,
3 Sec Master 4 Sec Slave
ebx 4=SB16 Basis, Base IO Adresse
ebx 5=Systemsprache, 1eng 2fi 3ger 4rus
ebx 6=wss Basis, Basis IO Adresse
ebx 7=HD Basis, 1 Pri.Master 2 Pri Slave
3 Sec Master 4 Sec Slave
ebx 8=FAT32 Partition in HD
ebx 9=Laufzeit in 1/100 Sekunden -> eax
Rückgabewert in eax
27 = WINDOWS SOUNDSYSTEM
ebx 1 - Hauptlautstärke setzen nach cl 0-255
ebx 2 - CD-Lautstärke setzen nach cl 0-255
28 = SB16 - MIXER II
ebx 1 - Hauptlautstärke setzen nach cl 0-255
ebx 2 - CD-Lautstärke setzene nach cl 0-255
29 = DATUM ERMITTELN
ret: eax 0x00YYDDMM Jahr Tag Monat
32 = DATEI VON DISKETTE LÖSCHEN
ebx Zeiger auf Dateiname
ret: eax - 0 = erfolgreich, 1 = Datei nicht gefunden
35 = BILDSCHIRMPIXEL LESEN
ebx = Pixel werden von oben-links an gezählt
ret: eax = 0x00RRGGBB
37 = MAUS-POSITION LESEN
ebx=0 Relativ zum Bildschirm
ebx=1 Relativ zum Fenster
ebx=2 Tasten gedrückt
Rückgabewert in eax
38 = LINIE ZEICHNEN
ebx [x start] shl 16 + [x ende]
ecx [y start] shl 16 + [y ende]
edx Farbe 0x00RRGGBB
ret: keine Änderung
39 = HINTERGRUND ERMITTELN
ebx=1 -> eax=[Hintergrund x größe] shl 16 + [Hintergrund y größe]
ebx=2
ecx= Position des Speichers des Hintergunds der in eax zurückgegeben wird
ebx=4 -> eax=1 gekachelt, eax=2 gestreckt
40 = BITFELDER FÜR DIE GEWÜNSCHTEN EREIGNISSE SETZEN
Standard:
ebx = 00000000 00000000 00000000 00000111b Ereignisse:
I Fenster zeichnen
I Taste im Puffer
I Button im Puffer
I (Ende der Anfrage)
I Desktop Hintergrund zeichnen
I Maus ändern
I IPC Event
I---------------I IRQ Daten ermitteln
41 = IRQ BESITZER ERMITTELN
ebx : IRQ
ret : PID des Prozesses
42 = DATEN ERMITTELN DIE VON IRQ GELESEN WERDEN
ebx : IRQ Nummer
ret : eax Anzahl der Bytes im Puffer
bl Daten
ecx 0 = erfolgreich Daten gelesen
1 = keine Daten im Puffer
2 = falscher IRQ Besitzer
44 = PROGRAMM IRQ's
ebx : Zeiger auf die Tabelle
ecx : IRQ Nummer
45 = IRQ RESERVIEREN/FREIMACHEN
ebx : 0 - reservieren, 1 - freimachen
ecx : IRQ Nummer
ret : eax: 0 - erfolgreich, 1 - fehler
46 = PORT-BEREICH RESERVIEREN/FREIMACHEN
ebx : 0 - reservieren, 1 - freimachen
ecx : Port-Bereich Beginn ( min 256 )
edx : Port-Bereich Ende ( max 16383 )
ret : eax: 0 - erfolgreich, 1 - fehler
Direkter Zugriff auf ein- und ausgehende Kommandos
47 = DISPLAYNUMMER ZUM FENSTER
ebx = Drucktyp, bl=0 -> ecx ist Nummer
bl=1 -> ecx ist Zeiger
bh=0 -> Dezimal anzeigen
bh=1 -> Hexadezimal anzeigen
bh=2 -> Binär anzeigen
Bits 16-21 = Anzahl der anzuzeigenden Ziffern (0-32)
Bits 22-31 = reserviert
ecx = Nummer oder Zeiger
edx = x shl 16 + y
esi = Farbe
48 = ALLGEMEINE FENSTEREIGENSCHAFTEN DEFINIEREN
ebx = 0 anwenden/neuzeichnen
ecx = 0 , Desktop anwenden/neuzeichnen
ebx = 1 Button-Stil definieren
ecx = 0 , flache Buttons setzen
ecx = 1 , 3D Buttons setzen
ebx = 2 Fensterfarben definieren
ecx = Zeiger auf Tabelle
edx = Anzahl definierter Bytes
ebx = 3 definierte Fensterfarben ermitteln
ecx = Zeiger auf Tabelle
edx = Anzahl der zu ermittelnden Bytes
ebx = 4 Fensterhöhe ermitteln
50 = FENSTER FREI GESTALTEN UND SKALIEREN
ebx = 0 ; Referenzgestaltungsbereich
ecx = Zeiger auf den Referenzbereich
Bytes pro Pixel, 0 nicht genutzt, 1=genutzt, andere = reserviert
ebx = 1 ; Referenzbereichsskalierung (standard 1:1)
ecx : skalieren ist auf 2^ecx gesetzt
ret: keine Änderung
51 = THREAD ERSTELLEN
ebx = 1 ; ERSTELLEN
ecx ; = Thread Einstiegspunkt
edx ; = Thread Stack-Position
ret: eax = PID oder 0xfffffff0+ für fehler
52 = STACK-TREIBER STATUS
- siehe stack.txt
53 = SOCKET-SCHNITTSTELLE
- siehe stack.txt
55 = SOUND-SCHNITTSTELLE
ebx = 0 ; Soundblock laden
ecx = ; Zeiger auf (Standardgröße 65536 Bytes) Soundblock
ebx = 1 ; spiele (Standard 44 kHz 8 Bit Mono) Soundblock
ebx = 2 ; Format setzen
ecx = 1 ; Playblocklänge setzen
edx = ; Blocklänge
57 = DATEI VON FESTPLATTE LÖSCHEN
ebx Zeiger auf Dateiname : 11 Großbuchstaben
edx Zeiger auf Pfad : Pfad db 0
58 = SYSTEM TREE ACCESS
ebx Zeiger auf Dateiinfo Block
Pfad-Beispiel:
'/RAMDISK/FIRST/KERNEL.ASM',0
'/RD/1/KERNEL.ASM',0
'/HARDDISK/FIRST/KERNEL.ASM',0
'/HD/1/KERNEL.ASM',0
'/HARDDISK/FIRST/MENUET/PICS/TANZANIA.BMP',0
Dateiinfo:
dd 0 ; 0=LESEN (löschen/anhängen)
dd 0x0 ; 512 Block zum lesen 0+
dd 0x1 ; Blocks zum lesen (/Bytes zu schreiben/anhängen)
dd 0x20000 ; gibt Datenzeiger zurück
dd 0x10000 ; Arbeitsbereich für OS - 16384 Bytes
db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ Verzeichnis & Dateiname
ret: eax = 0 - erfolg, andere - Fehlercode
ebx = Dateigröße
oder
Dateiinfo:
dd 1 ; 1=SCHREIBEN
dd 0x0 ; nicht genutzt
dd 10000 ; zu schreibende Bytes
dd 0x20000 ; Quelldatenzeiger
dd 0x10000 ; Arbeitsbereich für OS - 16384 Bytes
db '/RAMDISK/FIRST/KERNEL.ASM',0 ; ASCIIZ Verzeichnis & Dateiname
ret: eax = 0 - erfolg, andere - Fehlercode
oder
; LBA
Dateiinfo:
dd 8 ; 8=LBA lesen (/9=LBA schreiben)
dd 0x0 ; 512 Block zum lesen (schreiben)
dd 0x1 ; auf 1 setzen
dd 0x20000 ; gibt Datenzeiger zurück
dd 0x10000 ; Arbeitsbereich für OS (16384 Bytes)
dd '/HARDDISK/SECOND',0 ; Physikalisches Gerät ; ASCIIZ
( oder /rd/1/ )
LBA lesen muss mit dem Setup eingeschaltet sein
NOTE: Die ASCIIZ in diesem Kontext beziehen sich auf Physikalische Geräte und
nicht auf logische.
Für HD: erste =Pri Master, zweite=Pri Slave
dritte=Sec Master, vierte=Sec Slave
od
Dateiinfo:
dd 16 ; 16=ANWENDUNG STARTEN
dd 0x0 ; nop (No OPeration)
dd param ; 0 oder Parameterbereich ( ASCIIZ )
; zu empfangene Anwendung muss
; einen 256 Byte-Bereich reservieren
dd 0x0 ; nop
dd 0x10000 ; Arbeitsbereich für OS - 16384 Bytes
db '/HD/1/MENUET/APPS/FIRE',0 ; ASCIIZ Verzeichnis & Dateiname
ret: eax = PID oder 0xfffffff0+ für fehler
59 = NACH SYSTEMAUFRUFEN VON PROZESSEN UNTERSUCHEN
ebx = 0 ; Systemereignisse ermitteln
ecx ; Zeiger auf Tabelle-> ; 64 Bytes/Systemaufruf Descriptor
; +00 PID
; +32 EDI
; +36 ESI
; +40 EBP
; +44 ESP
; +48 EBX
; +52 EDX
; +56 ECX
; +60 EAX
edx ; Anzahl der Bytes die zur Tabelle zurückgegeben werden sollen (momentan maximal 16*64)
return: eax = Anzahl der Systemaufrufe seit dem Start
letzte Aufruf wird in (eax mod 16)*64 in der Tabelle gespeichert
ebx = 0 : obige Format
60 = INTERPROzESSKOMMUNIKATION
ebx = 1 - definiere IPC Speicher
ebx = 2 - sende Nachricht
61 = DIREKTER GRAFIKZUGRIFF
ebx = 1 - Auflösung ermitteln -> eax [x] shl 16 + [y]
ebx = 2 - Bits pro Pixel ermitteln -> eax
ebx = 3 - Bytes pro Linie ermitteln -> eax
Direkter Zugriff mit dem gs Selector : mov [gs:0],dword 0xffffff
62 = PCI ZUGRIFF
- siehe pci.txt
63 = ALLGEMEINE FEHLERBESEITIGUNG
ebx = 1 schreibe Byte in cl
ebx = 2 lese Byte : ebx = 1 -> Byte in al ; ebx = 0 -> keine Daten
64 = ANWENDUNGSSPEICHERGRÖßE ÄNDERN
ebx = 1 Speichermenge setzen
ecx = neue Speichermenge
ret: eax = 0 - erfolgreich
eax = 1 - nicht genügend Speicher
65 = UTF
66 = TASTATUR DATENMODUS
ebx = 1 Mode setzen
ecx = 0 : Tastaturlayout
ecx = 1 : Scancodes
ebx = 2 Modus ermitteln : Rückgabewert in eax
ebx = 3 CTRL ALT SHIFT Status ermitteln : Rückgabewert in eax
67 = ANWENDUNGSFENSTER BEWEGEN ODER GRÖßE ÄNDERN
ebx = new x start
ecx = new y start
edx = new x größe
esi = new y größe
Wenn man irgendwelche Parameter als -1 spezifiziert, bleibt der Parameter unverändert.
Z.B. spezifiziere ebx = -1 und ecx = -1 um einfach die Fenstergröße zu ändern, aber
nicht zu bewegen
-1 = ANWENDUNG BEENDEN