[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [PATCH] + cdi: Funktion fuer den int10h und Implementation fuer Lost



So?

Mathias
Index: src/modules/cdi/include/cdi/bios.h
===================================================================
--- src/modules/cdi/include/cdi/bios.h	(Revision 0)
+++ src/modules/cdi/include/cdi/bios.h	(Revision 0)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2008 Mathias Gottschlag
+ *
+ * This program is free software. It comes without any warranty, to
+ * the extent permitted by applicable law. You can redistribute it 
+ * and/or modify it under the terms of the Do What The Fuck You Want 
+ * To Public License, Version 2, as published by Sam Hocevar. See
+ * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
+ */  
+
+#ifndef _CDI_BIOS_H_
+#define _CDI_BIOS_H_
+
+#include <stdint.h>
+
+#include "cdi/lists.h"
+
+struct cdi_bios_registers {
+    uint16_t ax;
+    uint16_t bx;
+    uint16_t cx;
+    uint16_t dx;
+    uint16_t si;
+    uint16_t di;
+    uint16_t ds;
+    uint16_t es;
+};
+
+/**
+ * Struktur zum Zugriff auf Speicherbereiche des 16bit-Prozesses
+ */
+struct cdi_bios_memory {
+    /**
+     * Virtuelle Addresse im Speicher des 16bit-Prozesses. Muss unterhalb von
+     * 0xC0000 liegen.
+     */
+    uintptr_t dest;
+    /**
+     * Pointer auf reservierten Speicher für die Daten des Speicherbereichs. Wird
+     * beim Start des Tasks zum Initialisieren des Bereichs benutzt und erhaelt
+     * auch wieder die Daten nach dem BIOS-Aufruf.
+     */
+    void *src;
+    /**
+     * Laenge des Speicherbereichs
+     */
+    uint16_t size;
+};
+
+/**
+ * Ruft den BIOS-Interrupt 0x10 auf.
+ * @param registers Pointer auf eine Register-Struktur. Diese wird beim Aufruf
+ * in die Register des Tasks geladen und bei Beendigung des Tasks wieder mit den
+ * Werten des Tasks gefuellt.
+ * @param memory Speicherbereiche, die in den Bios-Task kopiert und bei Beendigung
+ * des Tasks wieder zurueck kopiert werden sollen. Die Liste ist vom Typ struct
+ * cdi_bios_memory.
+ * @return 0, wenn der Aufruf erfolgreich war, -1 bei Fehlern
+ */
+int cdi_bios_int10(struct cdi_bios_registers *registers, cdi_list_t memory);
+
+#endif
+
Index: src/modules/cdi/lib/bios.c
===================================================================
--- src/modules/cdi/lib/bios.c	(Revision 0)
+++ src/modules/cdi/lib/bios.c	(Revision 0)
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2008 Mathias Gottschlag
+ *
+ * This program is free software. It comes without any warranty, to
+ * the extent permitted by applicable law. You can redistribute it 
+ * and/or modify it under the terms of the Do What The Fuck You Want 
+ * To Public License, Version 2, as published by Sam Hocevar. See
+ * http://sam.zoy.org/projects/COPYING.WTFPL for more details.
+ */  
+
+#include <cdi/bios.h>
+#include <syscall.h>
+#include <stdlib.h>
+
+/**
+ * Ruft den BIOS-Interrupt 0x10 auf.
+ * @param registers Pointer auf eine Register-Struktur. Diese wird beim Aufruf
+ * in die Register des Tasks geladen und bei Beendigung des Tasks wieder mit den
+ * Werten des Tasks gefuellt.
+ * @param memory Speicherbereiche, die in den Bios-Task kopiert und bei Beendigung
+ * des Tasks wieder zurueck kopiert werden sollen. Die Liste ist vom Typ struct
+ * cdi_bios_memory.
+ * @return 0, wenn der Aufruf erfolgreich war, -1 bei Fehlern
+ */
+int cdi_bios_int10(struct cdi_bios_registers *registers, cdi_list_t memory)
+{
+    // Speicherbereiche kopieren
+    int memcount = 0;
+    if (memory) {
+        memcount = cdi_list_size(memory);
+    }
+    dword meminfo[sizeof(dword) * memcount * 3 + 1];
+    meminfo[0] = memcount;
+    int i;
+    for (i = 0; i < memcount; i++) {
+        struct cdi_bios_memory *memarea = cdi_list_get(memory, i);
+        meminfo[1 + i * 3] = memarea->dest;
+        meminfo[1 + i * 3 + 1] = (dword)memarea->src;
+        meminfo[1 + i * 3 + 2] = memarea->size;
+    }
+    
+    // BIOS aufrufen
+    return vm86_int((vm86_regs_t*)registers, meminfo) - 1;
+}
+

Eigenschaftsänderungen: src/modules/cdi/lib/bios.c
___________________________________________________________________
Name: svn:eol-style
   + native