OSDN Git Service

Livaさんの提案を参考に、core.autocrlf=falseとしてコミットしてみる。
authorttwilb <ttwilb@users.sourceforge.jp>
Mon, 17 Mar 2014 15:04:34 +0000 (00:04 +0900)
committerttwilb <ttwilb@users.sourceforge.jp>
Mon, 17 Mar 2014 15:04:34 +0000 (00:04 +0900)
これで行末はCrLfで(LFに変換されずに)コミットされているはず。

VSでコンパイルが通る

dpndenv.c
jitc.c
jitc.h
jitcx86.c
jitcx86a.c
main.c
osecpu.h
tek.c
tek.h
usetek.c

index fd6d4e7..855795d 100644 (file)
--- a/dpndenv.c
+++ b/dpndenv.c
-#include "osecpu.h"\r
-\r
-\r
-#if (DRV_OSNUM == 0x0002)\r
-//\r
-// for Mac OSX 32-bit\r
-//\r
-#include <mach/mach.h>\r
-#include <Cocoa/Cocoa.h>\r
-\r
-void *mallocRWE(int bytes)\r
-{\r
-       void *p = malloc(bytes);\r
-       vm_protect(mach_task_self(), (vm_address_t) p, bytes, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);\r
-       return p;\r
-}\r
-\r
-NSApplication* app;\r
-\r
-@interface OSECPUView : NSView\r
-{\r
-       unsigned char *_buf;\r
-       int _sx;\r
-       int _sy;\r
-       CGContextRef _context;\r
-}\r
-\r
-- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy;\r
-- (void)drawRect:(NSRect)rect;\r
-@end\r
-\r
-@implementation OSECPUView\r
-- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy\r
-{\r
-       self = [super initWithFrame:frameRect];\r
-       if (self) {\r
-               _buf = buf;\r
-               _sx = sx;\r
-               _sy = sy;\r
-       }\r
-       return self;\r
-}\r
-\r
-- (void)drawRect:(NSRect)rect {\r
-       CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();\r
-       _context = CGBitmapContextCreate (_buf, _sx, _sy, 8, 4 * _sx, colorSpace, (kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst));\r
-       CGImageRef image = CGBitmapContextCreateImage(_context);\r
-       CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];\r
-       CGContextDrawImage(currentContext, NSRectToCGRect(rect), image);\r
-       CFRelease(colorSpace);\r
-       CFRelease(image);\r
-}\r
-\r
-- (void)keyDown:(NSEvent *)theEvent\r
-{\r
-\r
-}\r
-\r
-- (void)keyUp:(NSEvent *)theEvent\r
-{\r
-\r
-}\r
-\r
-@end\r
-\r
-@interface Main : NSObject<NSWindowDelegate>\r
-{\r
-       int argc;\r
-       const unsigned char **argv;\r
-       char *winClosed;\r
-       OSECPUView *_view;\r
-}\r
-\r
-- (void)runApp;\r
-- (void)createThread:(int)_argc args:(const unsigned char **)_argv;\r
-- (BOOL)windowShouldClose:(id)sender;\r
-- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int)sy winClosed:(char *)_winClosed;\r
-- (void)flushWin:(NSRect)rect;\r
-@end\r
-\r
-@implementation Main\r
-- (void)runApp\r
-{\r
-       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];\r
-       int retv;\r
-       retv = HeavyOSECPUMain(argc, (char **)argv);\r
-       [NSApp terminate:self];\r
-       [pool release];\r
-       exit(retv);\r
-}\r
-\r
-- (void)createThread : (int)_argc args:(const unsigned char **)_argv\r
-{\r
-       argc = _argc;\r
-       argv = _argv;\r
-       NSThread *thread = [[[NSThread alloc] initWithTarget:self selector:@selector(runApp) object:nil] autorelease];\r
-       [thread start];\r
-}\r
-\r
-- (BOOL)windowShouldClose:(id)sender\r
-{\r
-       *winClosed = 1;\r
-       return YES;\r
-}\r
-\r
-- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int) sy winClosed:(char *)_winClosed\r
-{\r
-       \r
-       NSWindow* window = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, sx, sy) styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask backing: NSBackingStoreBuffered defer: NO];\r
-       [window setTitle: @"osecpu"];\r
-       [window center];\r
-       [window makeKeyAndOrderFront:nil];\r
-       [window setReleasedWhenClosed:YES];\r
-       window.delegate = self;\r
-       winClosed = _winClosed;\r
-       \r
-       _view = [[OSECPUView alloc] initWithFrame:NSMakeRect(0,0,sx,sy) buf:buf sx:sx sy:sy];\r
-       [window.contentView addSubview:_view];\r
-}\r
-\r
-- (void)flushWin : (NSRect)rect\r
-{\r
-       [_view setNeedsDisplayInRect:rect];\r
-}\r
-\r
-@end\r
-\r
-id objc_main;\r
-\r
-int main(int argc, char **argv)\r
-{\r
-       objc_main = [[Main alloc] init];\r
-       \r
-       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];\r
-       app = [[NSApplication alloc] init];\r
-       [objc_main createThread:argc args:(const unsigned char **)argv];\r
-       [app run];\r
-       [pool release];\r
-       return 0;\r
-}\r
-\r
-void drv_openWin(int sx, int sy, unsigned char *buf, char *winClosed)\r
-{\r
-       [objc_main openWin:buf sx:sx sy:sy winClosed:winClosed];\r
-}\r
-\r
-void drv_flshWin(int sx, int sy, int x0, int y0)\r
-{\r
-       [objc_main flushWin:NSMakeRect(x0,y0,sx,sy)];\r
-}\r
-\r
-void drv_sleep(int msec)\r
-{\r
-       [NSThread sleepForTimeInterval:0.001*msec];\r
-       return;\r
-}\r
-\r
-\r
-#elif (DRV_OSNUM == 0x0003)\r
-\r
-#error "Your OS is not supported."\r
-\r
-#elif (DRV_OSNUM == 0x0001)\r
-//\r
-// for Windows 32-bit\r
-//\r
-#include <windows.h>\r
-\r
-#define TIMER_ID                        1\r
-#define TIMER_INTERVAL         10\r
-\r
-struct BLD_WORK {\r
-       HINSTANCE hi;\r
-       HWND hw;\r
-       BITMAPINFO bmi;\r
-       int tmcount1, tmcount2, flags, smp; /* bit0: 終了 */\r
-       HANDLE mtx;\r
-       char *winClosed;\r
-};\r
-\r
-struct BLD_WORK bld_work;\r
-\r
-struct BL_WIN {\r
-       int xsiz, ysiz, *buf;\r
-};\r
-\r
-struct BL_WORK {\r
-       struct BL_WIN win;\r
-       jmp_buf jb;\r
-       int csiz_x, csiz_y, cx, cy, col0, col1, tabsiz, slctwin;\r
-       int tmcount, tmcount0, mod, rand_seed;\r
-       int *cbuf;\r
-       unsigned char *ftyp;\r
-       unsigned char **fptn;\r
-       int *ccol, *cbak;\r
-       int *kbuf, kbuf_rp, kbuf_wp, kbuf_c;\r
-};\r
-\r
-struct BL_WORK bl_work;\r
-\r
-#define BL_SIZ_KBUF                    8192\r
-\r
-#define BL_WAITKEYF            0x00000001\r
-#define BL_WAITKEYNF   0x00000002\r
-#define BL_WAITKEY             0x00000003\r
-#define BL_GETKEY              0x00000004\r
-#define BL_CLEARREP            0x00000008\r
-#define BL_DELFFF              0x00000010\r
-\r
-#define        BL_KEYMODE              0x00000000      // 作りかけ, make/remake/breakが見えるかどうか\r
-\r
-#define w      bl_work\r
-#define dw     bld_work\r
-\r
-void bld_openWin(int x, int y, char *winClosed);\r
-void bld_flshWin(int sx, int sy, int x0, int y0);\r
-LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp);\r
-void bl_cls();\r
-int bl_iCol(int i);\r
-void bl_readyWin(int n);\r
-\r
-static HANDLE threadhandle;\r
-\r
-int main(int argc, char **argv)\r
-{\r
-       // Program entry point\r
-       return HeavyOSECPUMain(argc, argv);\r
-}\r
-\r
-void *mallocRWE(int bytes)\r
-{\r
-       void *p = malloc(bytes);\r
-       DWORD dmy;\r
-       VirtualProtect(p, bytes, PAGE_EXECUTE_READWRITE, &dmy);\r
-       return p;\r
-}\r
-\r
-static int winthread(void *dmy)\r
-{\r
-       WNDCLASSEX wc;\r
-       RECT r;\r
-       int i, x, y;\r
-       MSG msg;\r
-       \r
-       x = dw.bmi.bmiHeader.biWidth;\r
-       y = -dw.bmi.bmiHeader.biHeight;\r
-       \r
-       wc.cbSize = sizeof (WNDCLASSEX);\r
-       wc.style = CS_HREDRAW | CS_VREDRAW;\r
-       wc.lpfnWndProc = WndProc;\r
-       wc.cbClsExtra = 0;\r
-       wc.cbWndExtra = 0;\r
-       wc.hInstance = dw.hi;\r
-       wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION),\r
-                                                               IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
-       wc.hIconSm = wc.hIcon;\r
-       wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW),\r
-                                                                       IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);\r
-       wc.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;\r
-       wc.lpszMenuName = NULL;\r
-       wc.lpszClassName = "WinClass";\r
-       if (RegisterClassEx(&wc) == 0)\r
-               return 1;\r
-       r.left = 0;\r
-       r.top = 0;\r
-       r.right = x;\r
-       r.bottom = y;\r
-       AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, FALSE);\r
-       x = r.right - r.left;\r
-       y = r.bottom - r.top;\r
-       \r
-       char *t = "osecpu";\r
-       \r
-       dw.hw = CreateWindowA("WinClass", t, WS_OVERLAPPEDWINDOW,\r
-                                                 CW_USEDEFAULT, CW_USEDEFAULT, x, y, NULL, NULL, dw.hi, NULL);\r
-       if (dw.hw == NULL)\r
-               return 1;\r
-       ShowWindow(dw.hw, SW_SHOW);\r
-       UpdateWindow(dw.hw);\r
-       SetTimer(dw.hw, TIMER_ID, TIMER_INTERVAL, NULL);\r
-       SetTimer(dw.hw, TIMER_ID + 1, TIMER_INTERVAL * 10, NULL);\r
-       SetTimer(dw.hw, TIMER_ID + 2, TIMER_INTERVAL * 100, NULL);\r
-       dw.flags |= 2 | 4;\r
-       \r
-       for (;;) {\r
-               i = GetMessage(&msg, NULL, 0, 0);\r
-               if (i == 0 || i == -1)  /* エラーもしくは終了メッセージ */\r
-                       break;\r
-               /* そのほかはとりあえずデフォルト処理で */\r
-               TranslateMessage(&msg);\r
-               DispatchMessage(&msg);\r
-       }\r
-       //      PostQuitMessage(0);\r
-       dw.flags |= 1; /* 終了, bld_waitNF()が見つける */\r
-       if (dw.winClosed != NULL)\r
-               *dw.winClosed = 1;\r
-       return 0;\r
-}\r
-\r
-void bld_openWin(int sx, int sy, char *winClosed)\r
-{\r
-       static int i;\r
-       \r
-       dw.bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);\r
-       dw.bmi.bmiHeader.biWidth = sx;\r
-       dw.bmi.bmiHeader.biHeight = -sy;\r
-       dw.bmi.bmiHeader.biPlanes = 1;\r
-       dw.bmi.bmiHeader.biBitCount = 32;\r
-       dw.bmi.bmiHeader.biCompression = BI_RGB;\r
-       dw.winClosed = winClosed;\r
-       \r
-       threadhandle = CreateThread(NULL, 0, (void *)&winthread, NULL, 0, (void *)&i);\r
-       \r
-       return;\r
-}\r
-\r
-void drv_flshWin(int sx, int sy, int x0, int y0)\r
-{\r
-       InvalidateRect(dw.hw, NULL, FALSE);\r
-       UpdateWindow(dw.hw);\r
-       return;\r
-}\r
-\r
-LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp)\r
-{\r
-       int i, j;\r
-       if (msg == WM_PAINT) {\r
-               PAINTSTRUCT ps;\r
-               HDC hdc = BeginPaint(dw.hw, &ps);\r
-               SetDIBitsToDevice(hdc, 0, 0, w.win.xsiz, w.win.ysiz,\r
-                                                 0, 0, 0, w.win.ysiz, w.win.buf, &dw.bmi, DIB_RGB_COLORS);\r
-               EndPaint(dw.hw, &ps);\r
-       }\r
-       if (msg == WM_DESTROY) {\r
-               PostQuitMessage(0);\r
-               return 0;\r
-       }\r
-       if (msg == WM_TIMER && wp == TIMER_ID) {\r
-               w.tmcount += TIMER_INTERVAL;\r
-               return 0;\r
-       }\r
-       if (msg == WM_TIMER && wp == TIMER_ID + 1) {\r
-               dw.tmcount1 += TIMER_INTERVAL * 10;\r
-               w.tmcount = dw.tmcount1;\r
-               return 0;\r
-       }\r
-       if (msg == WM_TIMER && wp == TIMER_ID + 2) {\r
-               dw.tmcount2 += TIMER_INTERVAL * 100;\r
-               w.tmcount = dw.tmcount1 = dw.tmcount2;\r
-               return 0;\r
-       }\r
-       if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) {\r
-               i = -1;\r
-               \r
-               if (wp == VK_RETURN)    i = KEY_ENTER;\r
-               if (wp == VK_ESCAPE)    i = KEY_ESC;\r
-               if (wp == VK_BACK)              i = KEY_BACKSPACE;\r
-               if (wp == VK_TAB)               i = KEY_TAB;\r
-               if (wp == VK_PRIOR)             i = KEY_PAGEUP;\r
-               if (wp == VK_NEXT)              i = KEY_PAGEDWN;\r
-               if (wp == VK_END)               i = KEY_END;\r
-               if (wp == VK_HOME)              i = KEY_HOME;\r
-               if (wp == VK_LEFT)              i = KEY_LEFT;\r
-               if (wp == VK_RIGHT)             i = KEY_RIGHT;\r
-               if (wp == VK_UP)                i = KEY_UP;\r
-               if (wp == VK_DOWN)              i = KEY_DOWN;\r
-               if (wp == VK_INSERT)    i = KEY_INS;\r
-               if (wp == VK_DELETE)    i = KEY_DEL;\r
-               j &= 0;\r
-               if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;\r
-               if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;\r
-               if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;\r
-               if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;\r
-               if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;\r
-               if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;\r
-               if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;\r
-               if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;\r
-               if (j != 0) {\r
-                       if ('A' <= wp && wp <= 'Z') i = wp;\r
-               }\r
-               if (i != -1) {\r
-                       putKeybuf(i | j);\r
-                       //                      bl_putKeyB(1, &i);\r
-                       return 0;\r
-               }\r
-       }\r
-       if (msg == WM_KEYUP) {\r
-               i = 0xfff;\r
-               //              bl_putKeyB(1, &i);\r
-       }\r
-       if (msg == WM_CHAR) {\r
-               i = 0;\r
-               if (' ' <= wp && wp <= 0x7e) {\r
-                       i = wp;\r
-                       j &= 0;\r
-                       if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;\r
-                       if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;\r
-                       if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;\r
-                       if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;\r
-                       if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;\r
-                       if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;\r
-                       if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;\r
-                       if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;\r
-                       if (('A' <= wp && wp <= 'Z') || ('a' <= wp && wp <= 'z')) {\r
-                               if (j != 0) {\r
-                                       i |= j;\r
-                                       i &= ~0x20;\r
-                               }\r
-                       }\r
-                       putKeybuf(i);\r
-                       //                      bl_putKeyB(1, &i);\r
-                       return 0;\r
-               }\r
-       }\r
-       return DefWindowProc(hw, msg, wp, lp);\r
-}\r
-\r
-void drv_openWin(int sx, int sy, UCHAR *buf, char *winClosed)\r
-{\r
-       w.win.buf = (int *)buf;\r
-       w.win.xsiz = sx;\r
-       w.win.ysiz = sy;\r
-       bld_openWin(sx, sy, winClosed);\r
-       return;\r
-}\r
-\r
-void drv_sleep(int msec)\r
-{\r
-       Sleep(msec);\r
-       //      MsgWaitForMultipleObjects(1, &threadhandle, FALSE, msec, QS_ALLINPUT);\r
-       /* 勉強不足でまだ書き方が分かりません! */\r
-       return;\r
-}\r
-\r
-#else\r
-\r
-#error "Illegal OS type. Edit osecpu.h and look at DRV_OSNUM"\r
-\r
+#include "osecpu.h"
+
+
+#if (DRV_OSNUM == 0x0002)
+//
+// for Mac OSX 32-bit
+//
+#include <mach/mach.h>
+#include <Cocoa/Cocoa.h>
+
+void *mallocRWE(int bytes)
+{
+       void *p = malloc(bytes);
+       vm_protect(mach_task_self(), (vm_address_t) p, bytes, FALSE, VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
+       return p;
+}
+
+NSApplication* app;
+
+@interface OSECPUView : NSView
+{
+       unsigned char *_buf;
+       int _sx;
+       int _sy;
+       CGContextRef _context;
+}
+
+- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy;
+- (void)drawRect:(NSRect)rect;
+@end
+
+@implementation OSECPUView
+- (id)initWithFrame:(NSRect)frameRect buf:(unsigned char *)buf sx:(int)sx sy:(int)sy
+{
+       self = [super initWithFrame:frameRect];
+       if (self) {
+               _buf = buf;
+               _sx = sx;
+               _sy = sy;
+       }
+       return self;
+}
+
+- (void)drawRect:(NSRect)rect {
+       CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+       _context = CGBitmapContextCreate (_buf, _sx, _sy, 8, 4 * _sx, colorSpace, (kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst));
+       CGImageRef image = CGBitmapContextCreateImage(_context);
+       CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
+       CGContextDrawImage(currentContext, NSRectToCGRect(rect), image);
+       CFRelease(colorSpace);
+       CFRelease(image);
+}
+
+- (void)keyDown:(NSEvent *)theEvent
+{
+
+}
+
+- (void)keyUp:(NSEvent *)theEvent
+{
+
+}
+
+@end
+
+@interface Main : NSObject<NSWindowDelegate>
+{
+       int argc;
+       const unsigned char **argv;
+       char *winClosed;
+       OSECPUView *_view;
+}
+
+- (void)runApp;
+- (void)createThread:(int)_argc args:(const unsigned char **)_argv;
+- (BOOL)windowShouldClose:(id)sender;
+- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int)sy winClosed:(char *)_winClosed;
+- (void)flushWin:(NSRect)rect;
+@end
+
+@implementation Main
+- (void)runApp
+{
+       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+       int retv;
+       retv = HeavyOSECPUMain(argc, (char **)argv);
+       [NSApp terminate:self];
+       [pool release];
+       exit(retv);
+}
+
+- (void)createThread : (int)_argc args:(const unsigned char **)_argv
+{
+       argc = _argc;
+       argv = _argv;
+       NSThread *thread = [[[NSThread alloc] initWithTarget:self selector:@selector(runApp) object:nil] autorelease];
+       [thread start];
+}
+
+- (BOOL)windowShouldClose:(id)sender
+{
+       *winClosed = 1;
+       return YES;
+}
+
+- (void)openWin:(unsigned char *)buf sx:(int)sx sy:(int) sy winClosed:(char *)_winClosed
+{
+       
+       NSWindow* window = [[NSWindow alloc] initWithContentRect: NSMakeRect(0, 0, sx, sy) styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask backing: NSBackingStoreBuffered defer: NO];
+       [window setTitle: @"osecpu"];
+       [window center];
+       [window makeKeyAndOrderFront:nil];
+       [window setReleasedWhenClosed:YES];
+       window.delegate = self;
+       winClosed = _winClosed;
+       
+       _view = [[OSECPUView alloc] initWithFrame:NSMakeRect(0,0,sx,sy) buf:buf sx:sx sy:sy];
+       [window.contentView addSubview:_view];
+}
+
+- (void)flushWin : (NSRect)rect
+{
+       [_view setNeedsDisplayInRect:rect];
+}
+
+@end
+
+id objc_main;
+
+int main(int argc, char **argv)
+{
+       objc_main = [[Main alloc] init];
+       
+       NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+       app = [[NSApplication alloc] init];
+       [objc_main createThread:argc args:(const unsigned char **)argv];
+       [app run];
+       [pool release];
+       return 0;
+}
+
+void drv_openWin(int sx, int sy, unsigned char *buf, char *winClosed)
+{
+       [objc_main openWin:buf sx:sx sy:sy winClosed:winClosed];
+}
+
+void drv_flshWin(int sx, int sy, int x0, int y0)
+{
+       [objc_main flushWin:NSMakeRect(x0,y0,sx,sy)];
+}
+
+void drv_sleep(int msec)
+{
+       [NSThread sleepForTimeInterval:0.001*msec];
+       return;
+}
+
+
+#elif (DRV_OSNUM == 0x0003)
+
+#error "Your OS is not supported."
+
+#elif (DRV_OSNUM == 0x0001)
+//
+// for Windows 32-bit
+//
+#include <windows.h>
+
+#define TIMER_ID                        1
+#define TIMER_INTERVAL         10
+
+struct BLD_WORK {
+       HINSTANCE hi;
+       HWND hw;
+       BITMAPINFO bmi;
+       int tmcount1, tmcount2, flags, smp; /* bit0: 終了 */
+       HANDLE mtx;
+       char *winClosed;
+};
+
+struct BLD_WORK bld_work;
+
+struct BL_WIN {
+       int xsiz, ysiz, *buf;
+};
+
+struct BL_WORK {
+       struct BL_WIN win;
+       jmp_buf jb;
+       int csiz_x, csiz_y, cx, cy, col0, col1, tabsiz, slctwin;
+       int tmcount, tmcount0, mod, rand_seed;
+       int *cbuf;
+       unsigned char *ftyp;
+       unsigned char **fptn;
+       int *ccol, *cbak;
+       int *kbuf, kbuf_rp, kbuf_wp, kbuf_c;
+};
+
+struct BL_WORK bl_work;
+
+#define BL_SIZ_KBUF                    8192
+
+#define BL_WAITKEYF            0x00000001
+#define BL_WAITKEYNF   0x00000002
+#define BL_WAITKEY             0x00000003
+#define BL_GETKEY              0x00000004
+#define BL_CLEARREP            0x00000008
+#define BL_DELFFF              0x00000010
+
+#define        BL_KEYMODE              0x00000000      // 作りかけ, make/remake/breakが見えるかどうか
+
+#define w      bl_work
+#define dw     bld_work
+
+void bld_openWin(int x, int y, char *winClosed);
+void bld_flshWin(int sx, int sy, int x0, int y0);
+LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp);
+void bl_cls();
+int bl_iCol(int i);
+void bl_readyWin(int n);
+
+static HANDLE threadhandle;
+
+int main(int argc, char **argv)
+{
+       // Program entry point
+       return HeavyOSECPUMain(argc, argv);
+}
+
+void *mallocRWE(int bytes)
+{
+       void *p = malloc(bytes);
+       DWORD dmy;
+       VirtualProtect(p, bytes, PAGE_EXECUTE_READWRITE, &dmy);
+       return p;
+}
+
+static int winthread(void *dmy)
+{
+       WNDCLASSEX wc;
+       RECT r;
+       int i, x, y;
+       MSG msg;
+       
+       x = dw.bmi.bmiHeader.biWidth;
+       y = -dw.bmi.bmiHeader.biHeight;
+       
+       wc.cbSize = sizeof (WNDCLASSEX);
+       wc.style = CS_HREDRAW | CS_VREDRAW;
+       wc.lpfnWndProc = WndProc;
+       wc.cbClsExtra = 0;
+       wc.cbWndExtra = 0;
+       wc.hInstance = dw.hi;
+       wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION),
+                                                               IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
+       wc.hIconSm = wc.hIcon;
+       wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW),
+                                                                       IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
+       wc.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
+       wc.lpszMenuName = NULL;
+       wc.lpszClassName = "WinClass";
+       if (RegisterClassEx(&wc) == 0)
+               return 1;
+       r.left = 0;
+       r.top = 0;
+       r.right = x;
+       r.bottom = y;
+       AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW, FALSE);
+       x = r.right - r.left;
+       y = r.bottom - r.top;
+       
+       char *t = "osecpu";
+       
+       dw.hw = CreateWindowA("WinClass", t, WS_OVERLAPPEDWINDOW,
+                                                 CW_USEDEFAULT, CW_USEDEFAULT, x, y, NULL, NULL, dw.hi, NULL);
+       if (dw.hw == NULL)
+               return 1;
+       ShowWindow(dw.hw, SW_SHOW);
+       UpdateWindow(dw.hw);
+       SetTimer(dw.hw, TIMER_ID, TIMER_INTERVAL, NULL);
+       SetTimer(dw.hw, TIMER_ID + 1, TIMER_INTERVAL * 10, NULL);
+       SetTimer(dw.hw, TIMER_ID + 2, TIMER_INTERVAL * 100, NULL);
+       dw.flags |= 2 | 4;
+       
+       for (;;) {
+               i = GetMessage(&msg, NULL, 0, 0);
+               if (i == 0 || i == -1)  /* エラーもしくは終了メッセージ */
+                       break;
+               /* そのほかはとりあえずデフォルト処理で */
+               TranslateMessage(&msg);
+               DispatchMessage(&msg);
+       }
+       //      PostQuitMessage(0);
+       dw.flags |= 1; /* 終了, bld_waitNF()が見つける */
+       if (dw.winClosed != NULL)
+               *dw.winClosed = 1;
+       return 0;
+}
+
+void bld_openWin(int sx, int sy, char *winClosed)
+{
+       static int i;
+       
+       dw.bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
+       dw.bmi.bmiHeader.biWidth = sx;
+       dw.bmi.bmiHeader.biHeight = -sy;
+       dw.bmi.bmiHeader.biPlanes = 1;
+       dw.bmi.bmiHeader.biBitCount = 32;
+       dw.bmi.bmiHeader.biCompression = BI_RGB;
+       dw.winClosed = winClosed;
+       
+       threadhandle = CreateThread(NULL, 0, (void *)&winthread, NULL, 0, (void *)&i);
+       
+       return;
+}
+
+void drv_flshWin(int sx, int sy, int x0, int y0)
+{
+       InvalidateRect(dw.hw, NULL, FALSE);
+       UpdateWindow(dw.hw);
+       return;
+}
+
+LRESULT CALLBACK WndProc(HWND hw, unsigned int msg, WPARAM wp, LPARAM lp)
+{
+       int i, j;
+       if (msg == WM_PAINT) {
+               PAINTSTRUCT ps;
+               HDC hdc = BeginPaint(dw.hw, &ps);
+               SetDIBitsToDevice(hdc, 0, 0, w.win.xsiz, w.win.ysiz,
+                                                 0, 0, 0, w.win.ysiz, w.win.buf, &dw.bmi, DIB_RGB_COLORS);
+               EndPaint(dw.hw, &ps);
+       }
+       if (msg == WM_DESTROY) {
+               PostQuitMessage(0);
+               return 0;
+       }
+       if (msg == WM_TIMER && wp == TIMER_ID) {
+               w.tmcount += TIMER_INTERVAL;
+               return 0;
+       }
+       if (msg == WM_TIMER && wp == TIMER_ID + 1) {
+               dw.tmcount1 += TIMER_INTERVAL * 10;
+               w.tmcount = dw.tmcount1;
+               return 0;
+       }
+       if (msg == WM_TIMER && wp == TIMER_ID + 2) {
+               dw.tmcount2 += TIMER_INTERVAL * 100;
+               w.tmcount = dw.tmcount1 = dw.tmcount2;
+               return 0;
+       }
+       if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) {
+               i = -1;
+               
+               if (wp == VK_RETURN)    i = KEY_ENTER;
+               if (wp == VK_ESCAPE)    i = KEY_ESC;
+               if (wp == VK_BACK)              i = KEY_BACKSPACE;
+               if (wp == VK_TAB)               i = KEY_TAB;
+               if (wp == VK_PRIOR)             i = KEY_PAGEUP;
+               if (wp == VK_NEXT)              i = KEY_PAGEDWN;
+               if (wp == VK_END)               i = KEY_END;
+               if (wp == VK_HOME)              i = KEY_HOME;
+               if (wp == VK_LEFT)              i = KEY_LEFT;
+               if (wp == VK_RIGHT)             i = KEY_RIGHT;
+               if (wp == VK_UP)                i = KEY_UP;
+               if (wp == VK_DOWN)              i = KEY_DOWN;
+               if (wp == VK_INSERT)    i = KEY_INS;
+               if (wp == VK_DELETE)    i = KEY_DEL;
+               j &= 0;
+               if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;
+               if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;
+               if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;
+               if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;
+               if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;
+               if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;
+               if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;
+               if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;
+               if (j != 0) {
+                       if ('A' <= wp && wp <= 'Z') i = wp;
+               }
+               if (i != -1) {
+                       putKeybuf(i | j);
+                       //                      bl_putKeyB(1, &i);
+                       return 0;
+               }
+       }
+       if (msg == WM_KEYUP) {
+               i = 0xfff;
+               //              bl_putKeyB(1, &i);
+       }
+       if (msg == WM_CHAR) {
+               i = 0;
+               if (' ' <= wp && wp <= 0x7e) {
+                       i = wp;
+                       j &= 0;
+                       if ((GetKeyState(VK_LCONTROL) & (1 << 15)) != 0) j |= 1 << 17;
+                       if ((GetKeyState(VK_LMENU)    & (1 << 15)) != 0) j |= 1 << 18;
+                       if ((GetKeyState(VK_RCONTROL) & (1 << 15)) != 0) j |= 1 << 25;
+                       if ((GetKeyState(VK_RMENU)    & (1 << 15)) != 0) j |= 1 << 26;
+                       if ((GetKeyState(VK_RSHIFT)   & (1 << 15)) != 0) i |= 1 << 24;
+                       if ((GetKeyState(VK_LSHIFT)   & (1 << 15)) != 0) i |= 1 << 16;
+                       if ((GetKeyState(VK_NUMLOCK)  & (1 << 0)) != 0) i |= 1 << 22;
+                       if ((GetKeyState(VK_CAPITAL)  & (1 << 0)) != 0) i |= 1 << 23;
+                       if (('A' <= wp && wp <= 'Z') || ('a' <= wp && wp <= 'z')) {
+                               if (j != 0) {
+                                       i |= j;
+                                       i &= ~0x20;
+                               }
+                       }
+                       putKeybuf(i);
+                       //                      bl_putKeyB(1, &i);
+                       return 0;
+               }
+       }
+       return DefWindowProc(hw, msg, wp, lp);
+}
+
+void drv_openWin(int sx, int sy, UCHAR *buf, char *winClosed)
+{
+       w.win.buf = (int *)buf;
+       w.win.xsiz = sx;
+       w.win.ysiz = sy;
+       bld_openWin(sx, sy, winClosed);
+       return;
+}
+
+void drv_sleep(int msec)
+{
+       Sleep(msec);
+       //      MsgWaitForMultipleObjects(1, &threadhandle, FALSE, msec, QS_ALLINPUT);
+       /* 勉強不足でまだ書き方が分かりません! */
+       return;
+}
+
+#else
+
+#error "Illegal OS type. Edit osecpu.h and look at DRV_OSNUM"
+
 #endif
\ No newline at end of file
diff --git a/jitc.c b/jitc.c
index cd66376..abefdcb 100644 (file)
--- a/jitc.c
+++ b/jitc.c
@@ -1,82 +1,82 @@
-#include "osecpu.h"\r
-#include "jitc.h"\r
-\r
-//\r
-// JITC common functions (architecture not dependent)\r
-//\r
-\r
-void errorHandler(HOSECPU_RuntimeEnvironment *r)\r
-{\r
-       puts("security error! abort...");\r
-       printf("debugInfo0=%d, debugInfo1=%d\n", r->debugInfo0, r->debugInfo1);\r
-#if (USE_DEBUGGER != 0)\r
-       dbgrMain(r);\r
-#endif\r
-       exit(1);\r
-}\r
-\r
-int jitCompCmdLen(const unsigned char *src)\r
-{\r
-       //BCode命令長を取得する\r
-       int i = 1;\r
-       \r
-       if (0x01 <= *src && *src < 0x04){\r
-               // LB, LIMM, PLIMM\r
-               i = 6;\r
-       } else if (*src == 0x04){\r
-               // CND\r
-               i = 2;\r
-       } else if (0x08 <= *src && *src < 0x0d){\r
-               // LMEM, SMEM, ??, ??, ??\r
-               i = 8 + src[7] * 4;\r
-       } else if (0x0e <= *src && *src < 0x10){\r
-               // PADD, PDIF\r
-               i = 8;\r
-       } else if (0x10 <= *src && *src < 0x1c){\r
-               // CP/OR, XOR, AND, ADD, SUB, MUL, SHL, SAR, DIV, MOD,\r
-               i = 4;\r
-       } else if (0x1c <= *src && *src < 0x1f){\r
-               // ??, ??, PCP\r
-               i = 3;\r
-       } else if (*src == 0x1f){\r
-               // ??\r
-               i = 11;\r
-       } else if(0x20 <= *src && *src < 0x2e){\r
-               // CMPE, CMPNE, CMPL, CMPGE, CMPLE, CMPG, TSTZ, TSTNZ,\r
-               // PCMPE, PCMPNE, PCMPL, PCMPGE, PCMPLE, PCMPG,\r
-               i = 4;\r
-       } else if (*src == 0x2f){\r
-               // ??\r
-               i = 4 + src[1];\r
-       } else if (0x30 <= *src && *src < 0x34){\r
-               // ??, ??, MALLOC, ??\r
-               i = 4;\r
-       } else if (0x3c <= *src && *src < 0x3e){\r
-               // ??, ??\r
-               i = 7;\r
-       } else if (*src == 0xfe){\r
-               // REMARK\r
-               i = 2 + src[1];\r
-       }\r
-\r
-       return i;\r
-}\r
-\r
-void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src)\r
-{\r
-       // なんか直接代入するとMacではアライメントエラーで落ちるのです...\r
-       // *dst = *src;\r
-\r
-       dst->p = src->p;\r
-       dst->typ = src->typ;\r
-       dst->p0 = src->p0;\r
-       dst->p1 = src->p1;\r
-       dst->liveSign = src->liveSign;\r
-       dst->pls = src->pls;\r
-       dst->flags = src->flags;\r
-       dst->dummy = src->dummy;\r
-}\r
-\r
-\r
-\r
-\r
+#include "osecpu.h"
+#include "jitc.h"
+
+//
+// JITC common functions (architecture not dependent)
+//
+
+void errorHandler(HOSECPU_RuntimeEnvironment *r)
+{
+       puts("security error! abort...");
+       printf("debugInfo0=%d, debugInfo1=%d\n", r->debugInfo0, r->debugInfo1);
+#if (USE_DEBUGGER != 0)
+       dbgrMain(r);
+#endif
+       exit(1);
+}
+
+int jitCompCmdLen(const unsigned char *src)
+{
+       //BCode命令長を取得する
+       int i = 1;
+       
+       if (0x01 <= *src && *src < 0x04){
+               // LB, LIMM, PLIMM
+               i = 6;
+       } else if (*src == 0x04){
+               // CND
+               i = 2;
+       } else if (0x08 <= *src && *src < 0x0d){
+               // LMEM, SMEM, ??, ??, ??
+               i = 8 + src[7] * 4;
+       } else if (0x0e <= *src && *src < 0x10){
+               // PADD, PDIF
+               i = 8;
+       } else if (0x10 <= *src && *src < 0x1c){
+               // CP/OR, XOR, AND, ADD, SUB, MUL, SHL, SAR, DIV, MOD,
+               i = 4;
+       } else if (0x1c <= *src && *src < 0x1f){
+               // ??, ??, PCP
+               i = 3;
+       } else if (*src == 0x1f){
+               // ??
+               i = 11;
+       } else if(0x20 <= *src && *src < 0x2e){
+               // CMPE, CMPNE, CMPL, CMPGE, CMPLE, CMPG, TSTZ, TSTNZ,
+               // PCMPE, PCMPNE, PCMPL, PCMPGE, PCMPLE, PCMPG,
+               i = 4;
+       } else if (*src == 0x2f){
+               // ??
+               i = 4 + src[1];
+       } else if (0x30 <= *src && *src < 0x34){
+               // ??, ??, MALLOC, ??
+               i = 4;
+       } else if (0x3c <= *src && *src < 0x3e){
+               // ??, ??
+               i = 7;
+       } else if (*src == 0xfe){
+               // REMARK
+               i = 2 + src[1];
+       }
+
+       return i;
+}
+
+void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src)
+{
+       // なんか直接代入するとMacではアライメントエラーで落ちるのです...
+       // *dst = *src;
+
+       dst->p = src->p;
+       dst->typ = src->typ;
+       dst->p0 = src->p0;
+       dst->p1 = src->p1;
+       dst->liveSign = src->liveSign;
+       dst->pls = src->pls;
+       dst->flags = src->flags;
+       dst->dummy = src->dummy;
+}
+
+
+
+
diff --git a/jitc.h b/jitc.h
index 85c88c3..82ef48d 100644 (file)
--- a/jitc.h
+++ b/jitc.h
@@ -1,4 +1,4 @@
-
+
 #ifndef HeavyOSECPU_jitc_h
 #define HeavyOSECPU_jitc_h
 
index 57d568a..d4f8e4a 100644 (file)
--- a/jitcx86.c
+++ b/jitcx86.c
@@ -1,4 +1,4 @@
-#include "osecpu.h"
+#include "osecpu.h"
 #include "jitc.h"
 
 #if (JITC_ARCNUM == 0x0001)
index 6804ec8..f77f3b0 100644 (file)
@@ -1,4 +1,4 @@
-#include "osecpu.h"
+#include "osecpu.h"
 #include "jitc.h"
 
 #if (JITC_ARCNUM == 0x0001)
diff --git a/main.c b/main.c
index cf2418e..9cc56e6 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-#include "osecpu.h"
+#include "osecpu.h"
 
 int *keybuf, keybuf_r, keybuf_w, keybuf_c;
 HOSECPU_Device_Window mainWindow;
index aebe28c..abcfd5f 100644 (file)
--- a/osecpu.h
+++ b/osecpu.h
-#ifndef _HDLOAD_OSECPU\r
-#define _HDLOAD_OSECPU 1\r
-\r
-/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/\r
-#define _CRT_SECURE_NO_WARNINGS 1\r
-\r
-//\r
-// Including stdc headers\r
-//\r
-\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <limits.h>\r
-#include <time.h>\r
-#include <setjmp.h>\r
-#include <stdlib.h>\r
-\r
-\r
-//\r
-// Compile options\r
-//\r
-\r
-// Target architecture\r
-// 1 : i386\r
-#define JITC_ARCNUM 0x0001\r
-\r
-// Target operating system\r
-// 1 : Windows 32bit\r
-// 2 : Mac OSX 32bit\r
-// 3 : blike for Linux\r
-#ifdef _WIN32\r
-#define DRV_OSNUM                      0x0001\r
-#endif\r
-#ifdef __APPLE__\r
-#define DRV_OSNUM                      0x0002\r
-#endif\r
-#ifdef __linux__\r
-#define DRV_OSNUM                      0x0003\r
-#endif\r
-//#define DRV_OSNUM 0x0002\r
-\r
-// Decoder (syslib.ose) setting\r
-// syslib.ose is necessary to work OSECPU\r
-#define SYSLIB_OSE     "syslib.ose"\r
-\r
-//\r
-// Define constant values\r
-//\r
-\r
-// SIGN1: The 2nd signature of OSECPU Format(05 e1)\r
-// It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)\r
-#define SIGN1          0xe1\r
-\r
-#define USE_DEBUGGER   1\r
-#define USE_TEK5               1\r
-\r
-/* JITC mode flags */\r
-#define        JITC_LV_SLOWEST         0       /* デバッグ支援は何でもやる */\r
-#define        JITC_LV_SLOWER          1       /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */\r
-#define        JITC_LV_SAFE            2       /* とにかく止まる、場所は不明、テストは必要最小限 */\r
-#define        JITC_LV_FASTER          4       /* 情報は生成するがチェックをしない */\r
-#define        JITC_LV_FASTEST         5       /* 情報すら生成しない */\r
-#define JITC_PHASE1                    0x0001\r
-#define JITC_SKIPCHECK         0x0002  /* セキュリティチェックを省略する(高速危険モード) */\r
-#define JITC_NOSTARTUP         0x0004\r
-#define JITC_MAXLABELS         4096\r
-#define PTRCTRLSIZ                     4096\r
-\r
-#define        APPSIZ1         1 * 1024 * 1024 /* 1MB for now */\r
-#define APPJITSIZE  1 * 1024 * 1024 /* 1MB for now */\r
-#define        SYSJITSIZ1      2 * 1024 * 1024 /* 1MB for now */\r
-#define        SYSLIBSIZ1      1 * 1024 * 1024 /* 1MB for now */\r
-#define SYSTMP0SIZ     1 * 1024 * 1024 /* 1MB for now */\r
-#define SYSTMP1SIZ     2 * 1024 * 1024 /* 1MB for now */\r
-\r
-#define KEYBUFSIZ              4096\r
-\r
-#define KEY_ENTER              '\n'\r
-#define KEY_ESC                        27\r
-#define KEY_BACKSPACE  8\r
-#define KEY_TAB                        9\r
-#define KEY_PAGEUP             0x1020\r
-#define KEY_PAGEDWN            0x1021\r
-#define        KEY_END                 0x1022\r
-#define        KEY_HOME                0x1023\r
-#define KEY_LEFT               0x1024\r
-#define KEY_UP                 0x1025\r
-#define KEY_RIGHT              0x1026\r
-#define KEY_DOWN               0x1027\r
-#define KEY_INS                        0x1028\r
-#define KEY_DEL                        0x1029\r
-\r
-//\r
-// HOSECPU structures\r
-//\r
-typedef struct PtrCtrl HOSECPU_PointerControlTag;\r
-struct PtrCtrl {\r
-       int liveSign;\r
-       int size, typ;\r
-       unsigned char *p0;\r
-};\r
-\r
-typedef struct Ptr HOSECPU_PointerRegisterEntry;\r
-struct Ptr {\r
-       // 32バイト(=256bit!)\r
-       unsigned char *p;\r
-       \r
-       /* static char *typName[] = {\r
-               "T_CODE", "T_VPTR", "T_SINT8", "T_UINT8",\r
-               "T_SINT16", "T_UINT16", "T_SINT32", "T_UINT32",\r
-               "T_SINT4", "T_UINT4", "T_SINT2", "T_UINT2",\r
-               "T_SINT1", "T_UINT1", "T_SINT12", "T_UINT12",\r
-               "T_SINT20", "T_UINT20", "T_SINT24", "T_UINT24",\r
-               "T_SINT28", "T_UINT28"\r
-       } ; */\r
-       int typ;\r
-       unsigned char *p0, *p1;\r
-       int liveSign;\r
-       HOSECPU_PointerControlTag *pls;\r
-       int flags, dummy;       /* read/writeなど */\r
-};\r
-\r
-typedef struct LabelTable HOSECPU_LabelListTag;\r
-struct LabelTable {\r
-       unsigned char *p, *p1;\r
-       int opt;\r
-       /*\r
-        * default = -1\r
-        * TYP_CODE = 0\r
-        * T_UINT8 = 3\r
-        *\r
-        * 将来的には UInt8, SInt32, Flt64, UInt8, VPtr が使えるようになる http://osecpu.osask.jp/wiki/?page0053\r
-        */\r
-       int typ;\r
-};\r
-\r
-typedef struct Device_Window HOSECPU_Device_Window;\r
-struct Device_Window {\r
-    int *vram;\r
-    int xsize, ysize;\r
-};\r
-\r
-typedef struct Regs HOSECPU_RuntimeEnvironment;\r
-struct Regs {\r
-       int ireg[64];                                                           // 整数レジスタ (4 * 64) = 256\r
-       HOSECPU_PointerRegisterEntry preg[64];          // ポインタレジスタ (32 * 64) = 2048\r
-    //\r
-       int debugInfo0;                                                         // 2304\r
-       int debugInfo1;                                                         // 2308\r
-    int dbg_currentCode;                        // 2312\r
-       int dmy;                                                                        // 2316\r
-       //\r
-       HOSECPU_PointerControlTag *ptrCtrl;         // 2320\r
-       char winClosed, autoSleep;\r
-       jmp_buf setjmpEnv;\r
-    int appReturnCode;      // アプリ自体の終了コード\r
-    \r
-    /* Main environment */\r
-    int mainArgc;           // HOSECPU起動引数の個数\r
-    const char **mainArgv;  // HOSECPU起動引数リスト\r
-    unsigned char *appBin;  // 実行するアプリのバイナリ\r
-    int appSize0;\r
-    int appSize1;\r
-    int executionLevel;\r
-    \r
-       /* for-junkApi */\r
-       unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;\r
-    \r
-       HOSECPU_LabelListTag *label;\r
-       int maxLabels;\r
-       unsigned char *jitbuf, *jitbuf1;\r
-       void(*errHndl)(HOSECPU_RuntimeEnvironment *);\r
-       char dbgr;\r
-       int mapDi1s[16][16];\r
-};\r
-\r
-//\r
-// Grobal values\r
-//\r
-\r
-extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;\r
-extern HOSECPU_Device_Window mainWindow;\r
-// di1_serial: デバッグ用。プログラム中の随所で加算される変数\r
-extern int di1_serial;\r
-\r
-//\r
-// Functions\r
-//\r
-\r
-// @main.c\r
-void putKeybuf(int i);\r
-int HeavyOSECPUMain(int argc, char **argv);\r
-\r
-// @comlib.c\r
-unsigned char *ComLib_main(const unsigned char *p, unsigned char *q);\r
-// @dpndenv.c\r
-// OSに依存する関数群を定義する。\r
-void *mallocRWE(int bytes); // 実行権付きメモリのmalloc.\r
-void drv_openWin(int x, int y, unsigned char *buf, char *winClosed);\r
-void drv_flshWin(int sx, int sy, int x0, int y0);\r
-void drv_sleep(int msec);\r
-\r
-// @function.c\r
-void dbgrMain(HOSECPU_RuntimeEnvironment *r);\r
-const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.\r
-void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数\r
-\r
-// @jitc.c\r
-void errorHandler(HOSECPU_RuntimeEnvironment *r);\r
-void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src);\r
-// @jitcx86.c\r
-int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);\r
-int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *src, const unsigned char *src1, const unsigned char *src0, HOSECPU_LabelListTag *label, int maxLabels, int level, int debugInfo1, int flags);\r
-unsigned char *jitCompCallFunc(unsigned char *dst, void *func);\r
-unsigned char *jitCompInit(unsigned char *dst);\r
-void jitcRunBinary(void (*bin)(char *), HOSECPU_RuntimeEnvironment *env);\r
-\r
-// @randmt.c\r
-void randStatInit(unsigned int seed);\r
-void randStatNext();\r
-unsigned int randGetNextUInt32(void);\r
-\r
-// @screen.c\r
-static int iColor1[] = {\r
-       0x000000, 0xff0000, 0x00ff00, 0xffff00,\r
-       0x0000ff, 0xff00ff, 0x00ffff, 0xffffff\r
-};\r
-void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r);\r
-void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx);\r
-void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);\r
-int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);\r
-\r
-// @usetek.c\r
-#if (USE_TEK5 != 0)\r
-#include "tek.h"\r
-int appackSub2(const UCHAR **pp, char *pif);\r
-int appackSub3u(const UCHAR **pp, char *pif);\r
-int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp);\r
-#endif\r
-\r
-\r
-#endif\r
+#ifndef _HDLOAD_OSECPU
+#define _HDLOAD_OSECPU 1
+
+/* Visual Studio で fopen()やsprintf() などの古い関数を使用する時に出る警告を抑止する*/
+#define _CRT_SECURE_NO_WARNINGS 1
+
+//
+// Including stdc headers
+//
+
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+#include <time.h>
+#include <setjmp.h>
+#include <stdlib.h>
+
+
+//
+// Compile options
+//
+
+// Target architecture
+// 1 : i386
+#define JITC_ARCNUM 0x0001
+
+// Target operating system
+// 1 : Windows 32bit
+// 2 : Mac OSX 32bit
+// 3 : blike for Linux
+#ifdef _WIN32
+#define DRV_OSNUM                      0x0001
+#endif
+#ifdef __APPLE__
+#define DRV_OSNUM                      0x0002
+#endif
+#ifdef __linux__
+#define DRV_OSNUM                      0x0003
+#endif
+//#define DRV_OSNUM 0x0002
+
+// Decoder (syslib.ose) setting
+// syslib.ose is necessary to work OSECPU
+#define SYSLIB_OSE     "syslib.ose"
+
+//
+// Define constant values
+//
+
+// SIGN1: The 2nd signature of OSECPU Format(05 e1)
+// It will be changed in OSECPU Rev.2 to "e2" (no adaptation in their binary layers)
+#define SIGN1          0xe1
+
+#define USE_DEBUGGER   1
+#define USE_TEK5               1
+
+/* JITC mode flags */
+#define        JITC_LV_SLOWEST         0       /* デバッグ支援は何でもやる */
+#define        JITC_LV_SLOWER          1       /* エラーモジュールはレポートできるが、行番号は分からない、テストは過剰 */
+#define        JITC_LV_SAFE            2       /* とにかく止まる、場所は不明、テストは必要最小限 */
+#define        JITC_LV_FASTER          4       /* 情報は生成するがチェックをしない */
+#define        JITC_LV_FASTEST         5       /* 情報すら生成しない */
+#define JITC_PHASE1                    0x0001
+#define JITC_SKIPCHECK         0x0002  /* セキュリティチェックを省略する(高速危険モード) */
+#define JITC_NOSTARTUP         0x0004
+#define JITC_MAXLABELS         4096
+#define PTRCTRLSIZ                     4096
+
+#define        APPSIZ1         1 * 1024 * 1024 /* 1MB for now */
+#define APPJITSIZE  1 * 1024 * 1024 /* 1MB for now */
+#define        SYSJITSIZ1      2 * 1024 * 1024 /* 1MB for now */
+#define        SYSLIBSIZ1      1 * 1024 * 1024 /* 1MB for now */
+#define SYSTMP0SIZ     1 * 1024 * 1024 /* 1MB for now */
+#define SYSTMP1SIZ     2 * 1024 * 1024 /* 1MB for now */
+
+#define KEYBUFSIZ              4096
+
+#define KEY_ENTER              '\n'
+#define KEY_ESC                        27
+#define KEY_BACKSPACE  8
+#define KEY_TAB                        9
+#define KEY_PAGEUP             0x1020
+#define KEY_PAGEDWN            0x1021
+#define        KEY_END                 0x1022
+#define        KEY_HOME                0x1023
+#define KEY_LEFT               0x1024
+#define KEY_UP                 0x1025
+#define KEY_RIGHT              0x1026
+#define KEY_DOWN               0x1027
+#define KEY_INS                        0x1028
+#define KEY_DEL                        0x1029
+
+//
+// HOSECPU structures
+//
+typedef struct PtrCtrl HOSECPU_PointerControlTag;
+struct PtrCtrl {
+       int liveSign;
+       int size, typ;
+       unsigned char *p0;
+};
+
+typedef struct Ptr HOSECPU_PointerRegisterEntry;
+struct Ptr {
+       // 32バイト(=256bit!)
+       unsigned char *p;
+       
+       /* static char *typName[] = {
+               "T_CODE", "T_VPTR", "T_SINT8", "T_UINT8",
+               "T_SINT16", "T_UINT16", "T_SINT32", "T_UINT32",
+               "T_SINT4", "T_UINT4", "T_SINT2", "T_UINT2",
+               "T_SINT1", "T_UINT1", "T_SINT12", "T_UINT12",
+               "T_SINT20", "T_UINT20", "T_SINT24", "T_UINT24",
+               "T_SINT28", "T_UINT28"
+       } ; */
+       int typ;
+       unsigned char *p0, *p1;
+       int liveSign;
+       HOSECPU_PointerControlTag *pls;
+       int flags, dummy;       /* read/writeなど */
+};
+
+typedef struct LabelTable HOSECPU_LabelListTag;
+struct LabelTable {
+       unsigned char *p, *p1;
+       int opt;
+       /*
+        * default = -1
+        * TYP_CODE = 0
+        * T_UINT8 = 3
+        *
+        * 将来的には UInt8, SInt32, Flt64, UInt8, VPtr が使えるようになる http://osecpu.osask.jp/wiki/?page0053
+        */
+       int typ;
+};
+
+typedef struct Device_Window HOSECPU_Device_Window;
+struct Device_Window {
+    int *vram;
+    int xsize, ysize;
+};
+
+typedef struct Regs HOSECPU_RuntimeEnvironment;
+struct Regs {
+       int ireg[64];                                                           // 整数レジスタ (4 * 64) = 256
+       HOSECPU_PointerRegisterEntry preg[64];          // ポインタレジスタ (32 * 64) = 2048
+    //
+       int debugInfo0;                                                         // 2304
+       int debugInfo1;                                                         // 2308
+    int dbg_currentCode;                        // 2312
+       int dmy;                                                                        // 2316
+       //
+       HOSECPU_PointerControlTag *ptrCtrl;         // 2320
+       char winClosed, autoSleep;
+       jmp_buf setjmpEnv;
+    int appReturnCode;      // アプリ自体の終了コード
+    
+    /* Main environment */
+    int mainArgc;           // HOSECPU起動引数の個数
+    const char **mainArgv;  // HOSECPU起動引数リスト
+    unsigned char *appBin;  // 実行するアプリのバイナリ
+    int appSize0;
+    int appSize1;
+    int executionLevel;
+    
+       /* for-junkApi */
+       unsigned char *buf0, *buf1, *junkStack, lastConsoleChar, *junkStack1;
+    
+       HOSECPU_LabelListTag *label;
+       int maxLabels;
+       unsigned char *jitbuf, *jitbuf1;
+       void(*errHndl)(HOSECPU_RuntimeEnvironment *);
+       char dbgr;
+       int mapDi1s[16][16];
+};
+
+//
+// Grobal values
+//
+
+extern int *keybuf, keybuf_r, keybuf_w, keybuf_c;
+extern HOSECPU_Device_Window mainWindow;
+// di1_serial: デバッグ用。プログラム中の随所で加算される変数
+extern int di1_serial;
+
+//
+// Functions
+//
+
+// @main.c
+void putKeybuf(int i);
+int HeavyOSECPUMain(int argc, char **argv);
+
+// @comlib.c
+unsigned char *ComLib_main(const unsigned char *p, unsigned char *q);
+// @dpndenv.c
+// OSに依存する関数群を定義する。
+void *mallocRWE(int bytes); // 実行権付きメモリのmalloc.
+void drv_openWin(int x, int y, unsigned char *buf, char *winClosed);
+void drv_flshWin(int sx, int sy, int x0, int y0);
+void drv_sleep(int msec);
+
+// @function.c
+void dbgrMain(HOSECPU_RuntimeEnvironment *r);
+const char *searchArg(int argc, const char **argv, const char *tag, int i); // コマンドライン引数処理.
+void devFunc(HOSECPU_RuntimeEnvironment *r); // junkApiを処理する関数
+
+// @jitc.c
+void errorHandler(HOSECPU_RuntimeEnvironment *r);
+void PRegCopy(HOSECPU_PointerRegisterEntry *dst, HOSECPU_PointerRegisterEntry *src);
+// @jitcx86.c
+int jitc0(unsigned char **qq, unsigned char *q1, const unsigned char *p0, const unsigned char *p1, int level, HOSECPU_LabelListTag *label);
+int jitCompiler(unsigned char *dst, unsigned char *dst1, const unsigned char *src, const unsigned char *src1, const unsigned char *src0, HOSECPU_LabelListTag *label, int maxLabels, int level, int debugInfo1, int flags);
+unsigned char *jitCompCallFunc(unsigned char *dst, void *func);
+unsigned char *jitCompInit(unsigned char *dst);
+void jitcRunBinary(void (*bin)(char *), HOSECPU_RuntimeEnvironment *env);
+
+// @randmt.c
+void randStatInit(unsigned int seed);
+void randStatNext();
+unsigned int randGetNextUInt32(void);
+
+// @screen.c
+static int iColor1[] = {
+       0x000000, 0xff0000, 0x00ff00, 0xffff00,
+       0x0000ff, 0xff00ff, 0x00ffff, 0xffffff
+};
+void putOsaskChar(int c, HOSECPU_RuntimeEnvironment *r);
+void checkString(HOSECPU_RuntimeEnvironment *r, int rxx, int pxx);
+void checkRect(HOSECPU_RuntimeEnvironment *r, int rxx);
+int loadColor(HOSECPU_RuntimeEnvironment *r, int rxx);
+
+// @usetek.c
+#if (USE_TEK5 != 0)
+#include "tek.h"
+int appackSub2(const UCHAR **pp, char *pif);
+int appackSub3u(const UCHAR **pp, char *pif);
+int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp);
+#endif
+
+
+#endif
diff --git a/tek.c b/tek.c
index c465e8b..3fecdc2 100644 (file)
--- a/tek.c
+++ b/tek.c
@@ -1,4 +1,4 @@
-#include <setjmp.h>
+#include <setjmp.h>
 #include <string.h>
 #include <stdlib.h>
 
diff --git a/tek.h b/tek.h
index 16ef0b5..346b03a 100644 (file)
--- a/tek.h
+++ b/tek.h
@@ -1,4 +1,4 @@
-//
+//
 //  tek.h
 //  HeavyOSECPU
 //
index 7e4a517..e3ef62d 100644 (file)
--- a/usetek.c
+++ b/usetek.c
@@ -1,88 +1,88 @@
-\r
-#include "osecpu.h"\r
-#if (USE_TEK5 != 0)\r
-/*----For using tek Begin----*/\r
-#include "tek.h"\r
-\r
-int appackSub2(const UCHAR **pp, char *pif)\r
-{\r
-       int r = 0;\r
-       const UCHAR *p = *pp;\r
-       if (*pif == 0) {\r
-               r = *p >> 4;\r
-       } else {\r
-               r = *p & 0x0f;\r
-               p++;\r
-               *pp = p;\r
-       }\r
-       *pif ^= 1;\r
-       \r
-       return r;\r
-}\r
-\r
-int appackSub3u(const UCHAR **pp, char *pif)\r
-{\r
-       int r = 0, i;\r
-       \r
-       r = appackSub2(pp, pif);\r
-       if (0x8 <= r && r <= 0xb) {\r
-               r = r << 4 | appackSub2(pp, pif);\r
-               r &= 0x3f;\r
-       } else if (0xc <= r && r <= 0xd) {\r
-               r = r << 4 | appackSub2(pp, pif);\r
-               r = r << 4 | appackSub2(pp, pif);\r
-               r &= 0x1ff;\r
-       } else if (r == 0xe) {\r
-               r = appackSub2(pp, pif);\r
-               r = r << 4 | appackSub2(pp, pif);\r
-               r = r << 4 | appackSub2(pp, pif);\r
-       } else if (r == 0x7) {\r
-               i = appackSub3u(pp, pif);\r
-               r = 0;\r
-               while (i > 0) {\r
-                       r = r << 4 | appackSub2(pp, pif);\r
-                       i--;\r
-               }\r
-       }\r
-       \r
-       return r;\r
-}\r
-\r
-int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp)\r
-{\r
-       static char tek5head[16] = {\r
-               0x89, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,\r
-               0x4f, 0x53, 0x41, 0x53, 0x4b, 0x43, 0x4d, 0x50\r
-       };\r
-       memcpy(tmp, tek5head, 16);\r
-       UCHAR *q = tmp + 16;\r
-       char iif = 0;\r
-       int i, tmpsiz;\r
-       const UCHAR *p = &buf[1];\r
-       i = appackSub3u(&p, &iif);\r
-       tmpsiz = appackSub3u(&p, &iif);\r
-       tmpsiz = tmpsiz << 8 | *p++;\r
-       *q++ = (tmpsiz >> 27) & 0xfe;\r
-       *q++ = (tmpsiz >> 20) & 0xfe;\r
-       *q++ = (tmpsiz >> 13) & 0xfe;\r
-       *q++ = (tmpsiz >>  6) & 0xfe;\r
-       *q++ = (tmpsiz << 1 | 1) & 0xff;\r
-       if (i == 1) *q++ = 0x15;\r
-       if (i == 2) *q++ = 0x19;\r
-       if (i == 3) *q++ = 0x21;\r
-       if (i >= 4) return -9;\r
-       while (p < buf1){\r
-               *q++ = *p++;\r
-       }\r
-       if(tek_decomp(tmp, buf, tmpsiz) != 0){;\r
-               // failed\r
-               fputs("tek decomp error.\n", stderr);\r
-               exit(1);\r
-       }\r
-       //success\r
-       return tmpsiz;\r
-}\r
-\r
-/*----For using tek End----*/\r
-#endif\r
-\r
+
+#include "osecpu.h"
+#if (USE_TEK5 != 0)
+/*----For using tek Begin----*/
+#include "tek.h"
+
+int appackSub2(const UCHAR **pp, char *pif)
+{
+       int r = 0;
+       const UCHAR *p = *pp;
+       if (*pif == 0) {
+               r = *p >> 4;
+       } else {
+               r = *p & 0x0f;
+               p++;
+               *pp = p;
+       }
+       *pif ^= 1;
+       
+       return r;
+}
+
+int appackSub3u(const UCHAR **pp, char *pif)
+{
+       int r = 0, i;
+       
+       r = appackSub2(pp, pif);
+       if (0x8 <= r && r <= 0xb) {
+               r = r << 4 | appackSub2(pp, pif);
+               r &= 0x3f;
+       } else if (0xc <= r && r <= 0xd) {
+               r = r << 4 | appackSub2(pp, pif);
+               r = r << 4 | appackSub2(pp, pif);
+               r &= 0x1ff;
+       } else if (r == 0xe) {
+               r = appackSub2(pp, pif);
+               r = r << 4 | appackSub2(pp, pif);
+               r = r << 4 | appackSub2(pp, pif);
+       } else if (r == 0x7) {
+               i = appackSub3u(pp, pif);
+               r = 0;
+               while (i > 0) {
+                       r = r << 4 | appackSub2(pp, pif);
+                       i--;
+               }
+       }
+       
+       return r;
+}
+
+int tek5Decomp(UCHAR *buf, UCHAR *buf1, UCHAR *tmp)
+{
+       static char tek5head[16] = {
+               0x89, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00,
+               0x4f, 0x53, 0x41, 0x53, 0x4b, 0x43, 0x4d, 0x50
+       };
+       memcpy(tmp, tek5head, 16);
+       UCHAR *q = tmp + 16;
+       char iif = 0;
+       int i, tmpsiz;
+       const UCHAR *p = &buf[1];
+       i = appackSub3u(&p, &iif);
+       tmpsiz = appackSub3u(&p, &iif);
+       tmpsiz = tmpsiz << 8 | *p++;
+       *q++ = (tmpsiz >> 27) & 0xfe;
+       *q++ = (tmpsiz >> 20) & 0xfe;
+       *q++ = (tmpsiz >> 13) & 0xfe;
+       *q++ = (tmpsiz >>  6) & 0xfe;
+       *q++ = (tmpsiz << 1 | 1) & 0xff;
+       if (i == 1) *q++ = 0x15;
+       if (i == 2) *q++ = 0x19;
+       if (i == 3) *q++ = 0x21;
+       if (i >= 4) return -9;
+       while (p < buf1){
+               *q++ = *p++;
+       }
+       if(tek_decomp(tmp, buf, tmpsiz) != 0){;
+               // failed
+               fputs("tek decomp error.\n", stderr);
+               exit(1);
+       }
+       //success
+       return tmpsiz;
+}
+
+/*----For using tek End----*/
+#endif
+