more win32 Pico work
authornotaz <notasas@gmail.com>
Mon, 19 May 2008 21:30:22 +0000 (21:30 +0000)
committernotaz <notasas@gmail.com>
Mon, 19 May 2008 21:30:22 +0000 (21:30 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@449 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/Pico/Memory.c
platform/win32/GenaDrive/Emu.cpp
platform/win32/GenaDrive/Main.cpp
platform/win32/GenaDrive/app.h

index 3b53679..7e106a3 100644 (file)
@@ -34,7 +34,7 @@ static u32 PicoReadPico8(u32 a)
       case 0x01: d = PicoPicohw.r1; break;
       case 0x03:
         d  =  PicoPad[0]&0x1f; // d-pad
-        d |= (PicoPad[0]&0x20) << 2; // red button -> C
+        d |= (PicoPad[0]&0x20) << 2; // pen push -> C
         d  = ~d;
         break;
 
index 497c023..7532353 100644 (file)
@@ -4,6 +4,7 @@
 unsigned short *EmuScreen=NULL;\r
 int EmuWidth=320,EmuHeight=224;\r
 RECT EmuScreenRect = { 0, 0, 320, 224 };\r
+int picohw_pen_pressed = 0;\r
 \r
 static int EmuScan(unsigned int num);\r
 unsigned char *PicoDraw2FB = NULL;\r
@@ -58,6 +59,7 @@ int EmuFrame()
   }\r
 \r
   PicoPad[0]=input;\r
+  if (picohw_pen_pressed) PicoPad[0] |= 0x20;\r
 \r
   PsndOut=(short *)DSoundNext;\r
   PicoFrame();\r
index bea2317..5e40e47 100644 (file)
@@ -11,7 +11,7 @@ static HWND PicoSwWnd=NULL, PicoPadWnd=NULL;
 \r
 int MainWidth=720,MainHeight=480;\r
 \r
-static HMENU mdisplay = 0, mpicohw = 0;\r
+static HMENU mmain = 0, mdisplay = 0, mpicohw = 0;\r
 static int rom_loaded = 0;\r
 \r
 static void UpdateRect()\r
@@ -23,6 +23,22 @@ static void UpdateRect()
   FrameRectMy = wi.rcClient;\r
 }\r
 \r
+static void PrepareFroROM()\r
+{\r
+  int show = PicoAHW & PAHW_PICO;\r
+  EnableMenuItem(mmain, 2, MF_BYPOSITION|(show ? MF_ENABLED : MF_GRAYED));\r
+  ShowWindow(PicoPadWnd, show ? SW_SHOWNA : SW_HIDE);\r
+  ShowWindow(PicoSwWnd, show ? SW_SHOWNA : SW_HIDE);\r
+  CheckMenuItem(mpicohw, 1210, show ? MF_CHECKED : MF_UNCHECKED);\r
+  CheckMenuItem(mpicohw, 1211, show ? MF_CHECKED : MF_UNCHECKED);\r
+  PostMessage(FrameWnd, WM_COMMAND, 1220 + PicoPicohw.page, 0);\r
+  DrawMenuBar(FrameWnd);\r
+\r
+  PicoPicohw.pen_pos[0] =\r
+  PicoPicohw.pen_pos[1] = 0x8000;\r
+  picohw_pen_pressed = 0;\r
+}\r
+\r
 static void LoadROM(const char *cmdpath)\r
 {\r
   static char rompath[MAX_PATH] = { 0, };\r
@@ -67,6 +83,8 @@ static void LoadROM(const char *cmdpath)
   PicoCartUnload();\r
   PicoCartInsert(rom_data_new, rom_size);\r
 \r
+  PrepareFroROM();\r
+\r
   rom_loaded = 1;\r
   romname = rompath;\r
   LoopWait=0;\r
@@ -78,6 +96,8 @@ static int rect_heights[4] = { 224, 224, 448, 448 };
 // Window proc for the frame window:\r
 static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)\r
 {\r
+  POINT pt;\r
+  RECT rc;\r
   int i;\r
   switch (msg)\r
   {\r
@@ -148,6 +168,16 @@ static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
           return 0;\r
       }\r
       break;\r
+    case WM_TIMER:\r
+      GetCursorPos(&pt);\r
+      GetWindowRect(PicoSwWnd, &rc);\r
+      if (PtInRect(&rc, pt)) break;\r
+      GetWindowRect(PicoPadWnd, &rc);\r
+      if (PtInRect(&rc, pt)) break;\r
+      PicoPicohw.pen_pos[0] |= 0x8000;\r
+      PicoPicohw.pen_pos[1] |= 0x8000;\r
+      picohw_pen_pressed = 0;\r
+      break;\r
   }\r
 \r
   return DefWindowProc(hwnd,msg,wparam,lparam);\r
@@ -159,6 +189,13 @@ static LRESULT CALLBACK PicoSwWndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lp
   {\r
     case WM_CLOSE: return 0;\r
     case WM_DESTROY: PicoSwWnd=NULL; break;\r
+    case WM_LBUTTONDOWN: picohw_pen_pressed = 1; return 0;\r
+    case WM_LBUTTONUP:   picohw_pen_pressed = 0; return 0;\r
+    case WM_MOUSEMOVE:\r
+      PicoPicohw.pen_pos[0] = 0x03c + LOWORD(lparam) * 2/3;\r
+      PicoPicohw.pen_pos[1] = 0x2f8 + HIWORD(lparam);\r
+      SetTimer(FrameWnd, 100, 1000, NULL);\r
+      break;\r
   }\r
 \r
   return DefWindowProc(hwnd,msg,wparam,lparam);\r
@@ -170,6 +207,13 @@ static LRESULT CALLBACK PicoPadWndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM l
   {\r
     case WM_CLOSE: return 0;\r
     case WM_DESTROY: PicoPadWnd=NULL; break;\r
+    case WM_LBUTTONDOWN: picohw_pen_pressed = 1; return 0;\r
+    case WM_LBUTTONUP:   picohw_pen_pressed = 0; return 0;\r
+    case WM_MOUSEMOVE:\r
+      PicoPicohw.pen_pos[0] = 0x03c + LOWORD(lparam);\r
+      PicoPicohw.pen_pos[1] = 0x1fc + HIWORD(lparam);\r
+      SetTimer(FrameWnd, 100, 1000, NULL);\r
+      break;\r
   }\r
 \r
   return DefWindowProc(hwnd,msg,wparam,lparam);\r
@@ -180,7 +224,7 @@ static int FrameInit()
 {\r
   WNDCLASS wc;\r
   RECT rect={0,0,0,0};\r
-  HMENU mmain, mfile;\r
+  HMENU mfile;\r
   int style=0;\r
   int left=0,top=0,width=0,height=0;\r
 \r
@@ -245,6 +289,7 @@ static int FrameInit()
   InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING|MF_POPUP, (UINT_PTR) mfile,    "&File");\r
   InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING|MF_POPUP, (UINT_PTR) mdisplay, "&Display");\r
   InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING|MF_POPUP, (UINT_PTR) mpicohw,  "&Pico");\r
+  EnableMenuItem(mmain, 2, MF_BYPOSITION|MF_GRAYED);\r
 //  InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING|MF_POPUP, 1200, "&Config");\r
   InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING, 1300, "&About");\r
 \r
@@ -269,7 +314,7 @@ static int FrameInit()
 \r
   left += 326;\r
   PicoSwWnd=CreateWindow("PicoSwWnd","Storyware",style,\r
-    left,top,width,height,FrameWnd,NULL,NULL,NULL);\r
+    left,top,width+160,height,FrameWnd,NULL,NULL,NULL);\r
 \r
   top += 266;\r
   PicoPadWnd=CreateWindow("PicoPadWnd","Drawing Pad",style,\r
index 1f0b658..1cc3ba2 100644 (file)
@@ -24,6 +24,7 @@
 extern unsigned short *EmuScreen;\r
 extern int EmuWidth,EmuHeight;\r
 extern RECT EmuScreenRect;\r
+extern int picohw_pen_pressed;\r
 int EmuInit();\r
 void EmuExit();\r
 int EmuRomLoad(char *name);\r