- TODO: Make a clean way of getting access to ld-acess's functions/data at runtime
- Also drafting up the 2D accelerated video interface
-BUILD_NUM = 2035
+BUILD_NUM = 2036
*/\r
enum eTplVideo_BufFormats\r
{\r
+ /**\r
+ * \brief Text Mode\r
+ * \r
+ * The device file presents itself as an array of ::tVT_Char\r
+ * each describing a character cell on the screen.\r
+ * These cells are each \a giVT_CharWidth pixels wide and\r
+ * \a giVT_CharHeight high.\r
+ */\r
VIDEO_BUFFMT_TEXT,\r
+ /**\r
+ * \brief Framebuffer Mode\r
+ * \r
+ * The device file presents as an array of 32-bpp pixels describing\r
+ * the entire screen. The format of a single pixel is in xRGB format\r
+ * (top 8 bits ignored, next 8 bits red, next 8 bits green and\r
+ * the bottom 8 bits blue)\r
+ */\r
VIDEO_BUFFMT_FRAMEBUFFER,\r
+ /**\r
+ * \brief 2D Accelerated Mode\r
+ * \r
+ * The device file acts as a character device, accepting a stream of\r
+ * commands described in eTplVideo_2DCommands when written to.\r
+ */\r
+ VIDEO_BUFFMT_2DSTREAM,\r
+ /**\r
+ * \brief 3D Accelerated Mode\r
+ * \r
+ * The device file acts as a character device, accepting a stream of\r
+ * commands described in eTplVideo_3DCommands when written to.\r
+ */\r
VIDEO_BUFFMT_3DSTREAM\r
};\r
\r
}\r
\r
if( Offset + Length > heightInChars*widthInChars ) {\r
+ Log_Debug("VESA", "%i + %i > %i*%i (%i)",\r
+ (int)Offset, (int)Length, heightInChars, widthInChars, heightInChars*widthInChars);\r
Length = heightInChars*widthInChars - Offset;\r
Log_Notice("VESA", "Clipping write size to %i characters", (int)Length);\r
}\r
\r
#include <stdarg.h>\r
\r
+// === CONSTANTS ===\r
+#define MAX_LOADED_LIBRARIES 64\r
+#define MAX_STRINGS_BYTES 4096\r
+#define SYSTEM_LIB_DIR "/Acess/Libs/"\r
+\r
// === Types ===\r
typedef unsigned int Uint;\r
typedef unsigned char Uint8;\r
typedef signed char Sint8;\r
typedef signed short Sint16;\r
typedef signed long Sint32;\r
+\r
+typedef struct {\r
+ Uint Base;\r
+ char *Name;\r
+} tLoadedLib;\r
+\r
+// === GLOBALS ===\r
+extern tLoadedLib gLoadedLibraries[MAX_LOADED_LIBRARIES];\r
// === Main ===
extern int DoRelocate( Uint base, char **envp, char *Filename );
extern void SysDebugV(char *fmt, ...);\r
extern Uint SysLoadBin(char *path, Uint *entry);\r
extern Uint SysUnloadBin(Uint Base);\r
+extern void SysSetFaultHandler(int (*Hanlder)(int));\r
extern int open(char *filename, int flags);\r
extern void close(int fd);\r
[global _SysExit]\r
[global _SysLoadBin]\r
[global _SysUnloadBin]\r
+[global _SysSetFaultHandler]\r
[global _open]\r
[global _close]\r
\r
int 0xAC\r
pop ebx\r
ret\r
+\r
+_SysSetFaultHandler:\r
+ push ebx\r
+ mov eax, SYS_SETFAULTHANDLER\r
+ mov ebx, [esp+0x8] ; File Descriptor\r
+ int 0xAC\r
+ pop ebx\r
+ ret\r
# define DEBUGS(v...) \r
#endif\r
\r
-// === CONSTANTS ===\r
-#define MAX_LOADED_LIBRARIES 64\r
-#define MAX_STRINGS_BYTES 4096\r
-#define SYSTEM_LIB_DIR "/Acess/Libs/"\r
-\r
// === PROTOTYPES ===\r
Uint IsFileLoaded(char *file);
int GetSymbolFromBase(Uint base, char *name, Uint *ret);\r
\r
-// === GLOABLS ===\r
-struct {\r
- Uint Base;\r
+// === CONSTANTS ===\r
+const struct {\r
+ Uint Value;\r
char *Name;\r
-} gLoadedLibraries[MAX_LOADED_LIBRARIES];\r
+} caLocalExports[] = {\r
+ {gLoadedLibraries, "gLoadedLibraries"}\r
+};\r
+\r
+// === GLOABLS ===\r
+tLoadedLib gLoadedLibraries[MAX_LOADED_LIBRARIES];\r
char gsLoadedStrings[MAX_STRINGS_BYTES];\r
char *gsNextAvailString = gsLoadedStrings;\r
//tLoadLib *gpLoadedLibraries = NULL;\r
{\r
int i;
Uint ret;\r
+ for(i=0;i<sizeof(caLocalExports)/sizeof(caLocalExports[0]);i++)\r
+ {\r
+ if( strcmp(caLocalExports[i].Name, name) == 0 )\r
+ return caLocalExports[i].Value;\r
+ }\r
+ \r
for(i=0;i<sizeof(gLoadedLibraries)/sizeof(gLoadedLibraries[0]);i++)\r
{\r
if(gLoadedLibraries[i].Base == 0) break;\r
int SoMain(Uint base, int arg1)\r
{\r
int ret;\r
- \r
- //SysDebug("SoMain: base = 0x%x", base);\r
- //SysDebug("SoMain: arg1 = 0x%x", arg1);\r
\r
// - Assume that the file pointer will be less than 4096\r
if(base < 0x1000) {\r
\r
#define USE_CPUID 0\r
\r
+// === TYPES ===\r
+typedef struct {\r
+ intptr_t Base;\r
+ char *Name;\r
+} tLoadedLib;\r
+\r
// === PROTOTYPES ===\r
#if USE_CPUID\r
static void cpuid(uint32_t Num, uint32_t *EAX, uint32_t *EBX, uint32_t *EDX, uint32_t *ECX);\r
#endif\r
-void ErrorHandler(int Fault);\r
+ int ErrorHandler(int Fault);\r
+\r
+// === IMPORTS ===\r
+extern tLoadedLib gLoadedLibraries[64];\r
\r
// === GLOBALS ===\r
extern char **_envp;\r
}\r
#endif\r
\r
+ // Set Error handler\r
_SysSetFaultHandler(ErrorHandler);\r
\r
return 1;\r
}\r
\r
-void ErrorHandler(int Fault)\r
+int ErrorHandler(int Fault)\r
{\r
- fprintf(stderr, "Fault = %i\n", Fault);\r
+ int i;\r
+ fprintf(stderr, "ErrorHandler: (Fault = %i)\n", Fault);\r
+ fprintf(stderr, "Loaded Libraries:\n");\r
+ for( i = 0; i < 64; i ++ )\r
+ {\r
+ //if(gLoadedLibraries[i].Base == 0) continue;\r
+ // fprintf(stderr, "%02i: %p %s\n", i, gLoadedLibraries[i].Base, gLoadedLibraries[i].Name);\r
+ }\r
+ fprintf(stderr, "\n");\r
+ return -1;\r
}\r
\r
#if USE_CPUID\r
extern int pollmsg(int *src, unsigned int *Data);\r
extern int getmsg(int *src, unsigned int *Data);\r
\r
-extern int _SysSetFaultHandler(void (*Handler)(int));\r
+extern int _SysSetFaultHandler(int (*Handler)(int));\r