1 /*         ______   ___    ___
2  *        /\  _  \ /\_ \  /\_ \
3  *        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
4  *         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
5  *          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
6  *           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
7  *            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
8  *                                           /\____/
9  *                                           \_/__/
10  *
11  *      Configuration defines for use with djgpp.
12  *
13  *      By Shawn Hargreaves.
14  *
15  *      See readme.txt for copyright information.
16  */
17 
18 
19 #ifndef SCAN_DEPEND
20    #include <pc.h>
21    #include <dir.h>
22    #include <dpmi.h>
23    #include <go32.h>
24    #include <fcntl.h>
25    #include <unistd.h>
26    #include <sys/farptr.h>
27 #endif
28 
29 
30 /* describe this platform */
31 #define ALLEGRO_PLATFORM_STR  "djgpp"
32 #define ALLEGRO_DOS
33 #define ALLEGRO_I386
34 #define ALLEGRO_LITTLE_ENDIAN
35 #define ALLEGRO_GUESS_INTTYPES_OK
36    /* inttypes.h and stdint.h not available in djgpp 2.02 */
37 #define ALLEGRO_CONSOLE_OK
38 #define ALLEGRO_VRAM_SINGLE_SURFACE
39 #define ALLEGRO_USE_CONSTRUCTOR
40 
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 /* memory locking macros */
47 void _unlock_dpmi_data(void *addr, int size);
48 
49 #define END_OF_FUNCTION(x)          void x##_end(void) { }
50 #define END_OF_STATIC_FUNCTION(x)   static void x##_end(void) { }
51 #define LOCK_DATA(d, s)             _go32_dpmi_lock_data((void *)d, s)
52 #define LOCK_CODE(c, s)             _go32_dpmi_lock_code((void *)c, s)
53 #define UNLOCK_DATA(d,s)            _unlock_dpmi_data((void *)d, s)
54 #define LOCK_VARIABLE(x)            LOCK_DATA((void *)&x, sizeof(x))
55 #define LOCK_FUNCTION(x)            LOCK_CODE((void *)x, (intptr_t)x##_end - (intptr_t)x)
56 
57 
58 /* long filename status */
59 #ifdef _USE_LFN
60    #define ALLEGRO_LFN  _USE_LFN
61 #else
62    #define ALLEGRO_LFN  0
63 #endif
64 
65 
66 /* selector for video memory bitmaps */
67 #define _video_ds()  _dos_ds
68 
69 
70 /* helpers for talking to video memory */
71 #define bmp_select(bmp)             _farsetsel((bmp)->seg)
72 
73 #define bmp_write8(addr, c)         _farnspokeb(addr, c)
74 #define bmp_write15(addr, c)        _farnspokew(addr, c)
75 #define bmp_write16(addr, c)        _farnspokew(addr, c)
76 #define bmp_write24(addr, c)        ({ _farnspokew(addr, c&0xFFFF); \
77                                        _farnspokeb(addr+2, c>>16); })
78 #define bmp_write32(addr, c)        _farnspokel(addr, c)
79 
80 #define bmp_read8(addr)             _farnspeekb(addr)
81 #define bmp_read15(addr)            _farnspeekw(addr)
82 #define bmp_read16(addr)            _farnspeekw(addr)
83 #define bmp_read32(addr)            _farnspeekl(addr)
84 #define bmp_read24(addr)            (_farnspeekl(addr) & 0xFFFFFF)
85 
86 #ifdef __cplusplus
87 }
88 #endif
89 
90 
91 /* describe the asm syntax for this platform */
92 #define ALLEGRO_ASM_PREFIX    "_"
93 #define ALLEGRO_ASM_USE_FS
94 
95 
96 /* arrange for other headers to be included later on */
97 #define ALLEGRO_EXTRA_HEADER     "allegro/platform/aldos.h"
98 #define ALLEGRO_INTERNAL_HEADER  "allegro/platform/aintdos.h"
99 #define ALLEGRO_ASMCAPA_HEADER   "obj/djgpp/asmcapa.h"
100