61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
#ifndef DGL_INTERNAL_H_INCLUDED
|
|
#define DGL_INTERNAL_H_INCLUDED
|
|
|
|
#include "common.h"
|
|
#include <dpmi.h>
|
|
|
|
#define END_OF_FUNCTION(x) void x##_end() {}
|
|
#define LOCK_VARIABLE(x) _go32_dpmi_lock_data((void*)&x, sizeof(x))
|
|
#define LOCK_MEMORY(ptr, len) _go32_dpmi_lock_data((void*)(ptr), (len))
|
|
#define LOCK_FUNCTION(x) _go32_dpmi_lock_code(x, (long)x##_end - (long)x)
|
|
|
|
static inline void _enable_interrupts(void) {
|
|
asm volatile ("sti");
|
|
}
|
|
static inline void _disable_interrupts(void) {
|
|
asm volatile ("cli");
|
|
}
|
|
|
|
boolean _install_irq(int irq,
|
|
void* irq_handler,
|
|
_go32_dpmi_seginfo* new_handler,
|
|
_go32_dpmi_seginfo* old_handler);
|
|
boolean _restore_irq(int irq,
|
|
_go32_dpmi_seginfo* new_handler,
|
|
_go32_dpmi_seginfo* old_handler);
|
|
|
|
#define REP_MOVSL(src, dest, num_dwords) \
|
|
__asm__ __volatile__ ( \
|
|
"cld\n\t" \
|
|
"rep\n\t" \
|
|
"movsl" \
|
|
: : "S" (src), "D" (dest), "c" (num_dwords) \
|
|
: "%ecx", "%esi", "%edi" )
|
|
|
|
#define REP_MOVSB(src, dest, num_bytes) \
|
|
__asm__ __volatile__ ( \
|
|
"cld\n\t" \
|
|
"rep\n\t" \
|
|
"movsb" \
|
|
: : "S" (src), "D" (dest), "c" (num_bytes) \
|
|
: "%ecx", "%esi", "%edi" )
|
|
|
|
#define REP_STOSL(value, dest, num_dwords) \
|
|
__asm__ __volatile__ ( \
|
|
"cld\n\t" \
|
|
"rep\n\t" \
|
|
"stosl" \
|
|
: : "a" (value), "D" (dest), "c" (num_dwords) \
|
|
: "%ecx", "%edi" )
|
|
|
|
#define REP_STOSB(value, dest, num_bytes) \
|
|
__asm__ __volatile__ ( \
|
|
"cld\n\t" \
|
|
"rep\n\t" \
|
|
"stosb" \
|
|
: : "a" (value), "D" (dest), "c" (num_bytes) \
|
|
: "%ecx", "%edi" )
|
|
|
|
#endif
|
|
|