windows Pico stuff wip
authornotaz <notasas@gmail.com>
Sun, 18 May 2008 21:24:18 +0000 (21:24 +0000)
committernotaz <notasas@gmail.com>
Sun, 18 May 2008 21:24:18 +0000 (21:24 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@448 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/Cart.c
Pico/Pico/Memory.c
Pico/carthw/svp/compiler.c
Pico/cd/cue.c
platform/win32/GenaDrive/Emu.cpp
platform/win32/GenaDrive/Main.cpp
platform/win32/GenaDrive/Makefile.vc
platform/win32/GenaDrive/version.h

index 1dc3eae..dacd793 100644 (file)
@@ -512,7 +512,7 @@ int PicoCartInsert(unsigned char *rom,unsigned int romsize)
     PicoCartUnloadHook = NULL;\r
   }\r
 \r
-  PicoAHW &= ~PAHW_SVP;\r
+  PicoAHW &= PAHW_MCD;\r
 \r
   PicoMemResetHooks();\r
   PicoDmaHook = NULL;\r
index ff2a15f..3b53679 100644 (file)
@@ -262,5 +262,15 @@ PICO_INTERNAL void PicoMemSetupPico(void)
   pm68k_read_memory_pcr_16 = m68k_read_memory_pcrp_16;
   pm68k_read_memory_pcr_32 = m68k_read_memory_pcrp_32;
 #endif
+#ifdef EMU_F68K
+  // use standard setup, only override handlers
+  PicoMemSetup();
+  PicoCpuFM68k.read_byte =PicoReadPico8;
+  PicoCpuFM68k.read_word =PicoReadPico16;
+  PicoCpuFM68k.read_long =PicoReadPico32;
+  PicoCpuFM68k.write_byte=PicoWritePico8;
+  PicoCpuFM68k.write_word=PicoWritePico16;
+  PicoCpuFM68k.write_long=PicoWritePico32;
+#endif
 }
 
index 7c06bad..551794e 100644 (file)
@@ -1398,7 +1398,7 @@ static int translate_op(unsigned int op, int *pc, int imm, int *end_cond, int *j
                }
 
                // ldi ri, simm
-               case 0x0c ... 0x0f:
+               case 0x0c: case 0x0d: case 0x0e: case 0x0f:
                        tmpv = (op>>8)&7;
                        known_regs.r[tmpv] = op;
                        known_regb |= 1 << (tmpv + 8);
index cfd4e27..84deba7 100644 (file)
@@ -6,6 +6,10 @@
 #include "../PicoInt.h"
 // #define elprintf(w,f,...) printf(f "\n",##__VA_ARGS__);
 
+#ifdef _MSC_VER
+#define snprintf _snprintf
+#endif
+
 static char *mystrip(char *str)
 {
        int i, len;
index e1fd976..497c023 100644 (file)
@@ -5,7 +5,7 @@ unsigned short *EmuScreen=NULL;
 int EmuWidth=320,EmuHeight=224;\r
 RECT EmuScreenRect = { 0, 0, 320, 224 };\r
 \r
-static int EmuScan(unsigned int num, void *sdata);\r
+static int EmuScan(unsigned int num);\r
 unsigned char *PicoDraw2FB = NULL;\r
 \r
 int EmuInit()\r
@@ -22,7 +22,7 @@ int EmuInit()
   memset(EmuScreen,0,len);\r
 \r
   PicoDrawSetColorFormat(1);\r
-  PicoScan=EmuScan;\r
+  PicoScanBegin=EmuScan;\r
 \r
   return 0;\r
 }\r
@@ -38,18 +38,9 @@ void EmuExit()
 }\r
 \r
 // Megadrive scanline callback:\r
-static int EmuScan(unsigned int num, void *sdata)\r
+static int EmuScan(unsigned int num)\r
 {\r
-  unsigned short *pd=NULL;\r
-  unsigned short *ps=NULL;\r
-\r
-  if (num>=(unsigned int)EmuHeight) return 0;\r
-\r
-  // Copy scanline to screen buffer:\r
-  pd=EmuScreen+(num<<8)+(num<<6);\r
-  ps=(unsigned short *)sdata;\r
-\r
-  memcpy(pd, ps, 320*2);\r
+  DrawLineDest=EmuScreen+(num<<8)+(num<<6);\r
   \r
   return 0;\r
 }\r
index 93db3cd..bea2317 100644 (file)
@@ -7,10 +7,11 @@ char *romname=NULL;
 HWND FrameWnd=NULL;\r
 RECT FrameRectMy;\r
 int lock_to_1_1 = 1;\r
+static HWND PicoSwWnd=NULL, PicoPadWnd=NULL;\r
 \r
 int MainWidth=720,MainHeight=480;\r
 \r
-static HMENU mdisplay = 0;\r
+static HMENU mdisplay = 0, mpicohw = 0;\r
 static int rom_loaded = 0;\r
 \r
 static void UpdateRect()\r
@@ -63,7 +64,7 @@ static void LoadROM(const char *cmdpath)
   LoopWait=1;\r
   for (i = 0; LoopWaiting == 0 && i < 10; i++) Sleep(100);\r
 \r
-  PicoUnloadCart();\r
+  PicoCartUnload();\r
   PicoCartInsert(rom_data_new, rom_size);\r
 \r
   rom_loaded = 1;\r
@@ -89,7 +90,8 @@ static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
       switch (LOWORD(wparam))\r
       {\r
         case 1000: LoadROM(NULL); break;\r
-        case 1001: PostQuitMessage(0); return 0;\r
+        case 1001: PicoReset(); return 0;\r
+        case 1002: PostQuitMessage(0); return 0;\r
         case 1100:\r
         case 1101:\r
         case 1102:\r
@@ -112,10 +114,28 @@ static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
           lock_to_1_1=!lock_to_1_1;\r
           CheckMenuItem(mdisplay, 1104, lock_to_1_1 ? MF_CHECKED : MF_UNCHECKED);\r
           return 0;\r
-        case 1200: break;\r
+        case 1210:\r
+        case 1211:\r
+          i = IsWindowVisible((LOWORD(wparam)&1) ? PicoPadWnd : PicoSwWnd);\r
+          i = !i;\r
+          ShowWindow((LOWORD(wparam)&1) ? PicoPadWnd : PicoSwWnd, i ? SW_SHOWNA : SW_HIDE);\r
+          CheckMenuItem(mpicohw, LOWORD(wparam), i ? MF_CHECKED : MF_UNCHECKED);\r
+          return 0;\r
+        case 1220:\r
+        case 1221:\r
+        case 1222:\r
+        case 1223:\r
+        case 1224:\r
+        case 1225:\r
+        case 1226:\r
+          PicoPicohw.page = LOWORD(wparam) % 10;\r
+          for (i = 0; i < 7; i++)\r
+            CheckMenuItem(mpicohw, 1220 + i, MF_UNCHECKED);\r
+          CheckMenuItem(mpicohw, 1220 + PicoPicohw.page, MF_CHECKED);\r
+          return 0;\r
         case 1300:\r
           MessageBox(FrameWnd, "PicoDrive v" VERSION " (c) notaz, 2006-2008\n"\r
-              "SVP demo edition\n\n"\r
+              "SVP and Pico demo edition\n\n"\r
               "Credits:\n"\r
               "fDave: base code of PicoDrive, GenaDrive (the frontend)\n"\r
               "Chui: Fame/C\n"\r
@@ -133,6 +153,29 @@ static LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
   return DefWindowProc(hwnd,msg,wparam,lparam);\r
 }\r
 \r
+static LRESULT CALLBACK PicoSwWndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)\r
+{\r
+  switch (msg)\r
+  {\r
+    case WM_CLOSE: return 0;\r
+    case WM_DESTROY: PicoSwWnd=NULL; break;\r
+  }\r
+\r
+  return DefWindowProc(hwnd,msg,wparam,lparam);\r
+}\r
+\r
+static LRESULT CALLBACK PicoPadWndProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)\r
+{\r
+  switch (msg)\r
+  {\r
+    case WM_CLOSE: return 0;\r
+    case WM_DESTROY: PicoPadWnd=NULL; break;\r
+  }\r
+\r
+  return DefWindowProc(hwnd,msg,wparam,lparam);\r
+}\r
+\r
+\r
 static int FrameInit()\r
 {\r
   WNDCLASS wc;\r
@@ -148,7 +191,15 @@ static int FrameInit()
   wc.hInstance=GetModuleHandle(NULL);\r
   wc.hCursor=LoadCursor(NULL,IDC_ARROW);\r
   wc.hbrBackground=CreateSolidBrush(0);\r
-  wc.lpszClassName="MainFrame";\r
+  wc.lpszClassName="PicoMainFrame";\r
+  RegisterClass(&wc);\r
+\r
+  wc.lpszClassName="PicoSwWnd";\r
+  wc.lpfnWndProc=PicoSwWndProc;\r
+  RegisterClass(&wc);\r
+\r
+  wc.lpszClassName="PicoPadWnd";\r
+  wc.lpfnWndProc=PicoPadWndProc;\r
   RegisterClass(&wc);\r
 \r
   rect.right =320;//MainWidth;\r
@@ -171,21 +222,34 @@ static int FrameInit()
   // Create menu:\r
   mfile = CreateMenu();\r
   InsertMenu(mfile, -1, MF_BYPOSITION|MF_STRING, 1000, "&Load ROM");\r
-  InsertMenu(mfile, -1, MF_BYPOSITION|MF_STRING, 1001, "E&xit");\r
+  InsertMenu(mfile, -1, MF_BYPOSITION|MF_STRING, 1001, "&Reset");\r
+  InsertMenu(mfile, -1, MF_BYPOSITION|MF_STRING, 1002, "E&xit");\r
   mdisplay = CreateMenu();\r
   InsertMenu(mdisplay, -1, MF_BYPOSITION|MF_STRING, 1100, "320x224");\r
   InsertMenu(mdisplay, -1, MF_BYPOSITION|MF_STRING, 1101, "256x224");\r
   InsertMenu(mdisplay, -1, MF_BYPOSITION|MF_STRING, 1102, "640x448");\r
   InsertMenu(mdisplay, -1, MF_BYPOSITION|MF_STRING, 1103, "512x448");\r
   InsertMenu(mdisplay, -1, MF_BYPOSITION|MF_STRING, 1104, "Lock to 1:1");\r
+  mpicohw = CreateMenu();\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1210, "Show &Storyware");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1211, "Show &Drawing pad");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_SEPARATOR, 0, NULL);\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1220, "Title page (&0)");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1221, "Page &1");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1222, "Page &2");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1223, "Page &3");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1224, "Page &4");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1225, "Page &5");\r
+  InsertMenu(mpicohw, -1, MF_BYPOSITION|MF_STRING, 1226, "Page &6");\r
   mmain = CreateMenu();\r
-  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) 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
 //  InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING|MF_POPUP, 1200, "&Config");\r
   InsertMenu(mmain, -1, MF_BYPOSITION|MF_STRING, 1300, "&About");\r
 \r
   // Create the window:\r
-  FrameWnd=CreateWindow(wc.lpszClassName,"PicoDrive " VERSION,style|WS_VISIBLE,\r
+  FrameWnd=CreateWindow("PicoMainFrame","PicoDrive " VERSION,style|WS_VISIBLE,\r
     left,top,width,height,NULL,mmain,NULL,NULL);\r
 \r
   CheckMenuItem(mdisplay, 1104, lock_to_1_1 ? MF_CHECKED : MF_UNCHECKED);\r
@@ -193,6 +257,24 @@ static int FrameInit()
   UpdateWindow(FrameWnd);\r
   UpdateRect();\r
 \r
+  // create Pico windows\r
+  style = WS_OVERLAPPED|WS_CAPTION|WS_BORDER;\r
+  rect.left=rect.top=0;\r
+  rect.right =320;\r
+  rect.bottom=224;\r
+\r
+  AdjustWindowRect(&rect,style,1);\r
+  width =rect.right-rect.left;\r
+  height=rect.bottom-rect.top;\r
+\r
+  left += 326;\r
+  PicoSwWnd=CreateWindow("PicoSwWnd","Storyware",style,\r
+    left,top,width,height,FrameWnd,NULL,NULL,NULL);\r
+\r
+  top += 266;\r
+  PicoPadWnd=CreateWindow("PicoPadWnd","Drawing Pad",style,\r
+    left,top,width,height,FrameWnd,NULL,NULL,NULL);\r
+\r
   return 0;\r
 }\r
 \r
index 54369a5..90279c1 100644 (file)
@@ -30,11 +30,15 @@ OBJ = $(OBJ) $(R)Pico\Area.obj $(R)Pico\Cart.obj $(R)Pico\Memory.obj $(R)Pico\Mi
 # Pico - CD\r
 OBJ = $(OBJ) $(R)Pico\cd\Pico.obj $(R)Pico\cd\Memory.obj $(R)Pico\cd\Sek.obj $(R)Pico\cd\LC89510.obj \\r
                $(R)Pico\cd\cd_sys.obj $(R)Pico\cd\cd_file.obj $(R)Pico\cd\gfx_cd.obj \\r
-               $(R)Pico\cd\Area.obj $(R)Pico\cd\Misc.obj $(R)Pico\cd\pcm.obj $(R)Pico\cd\buffering.obj\r
+               $(R)Pico\cd\Area.obj $(R)Pico\cd\Misc.obj $(R)Pico\cd\pcm.obj $(R)Pico\cd\buffering.obj \\r
+               $(R)Pico\cd\cue.obj\r
+# Pico - Pico\r
+OBJ = $(OBJ) $(R)Pico\Pico\Pico.obj $(R)Pico\Pico\Memory.obj $(R)Pico\Pico\xpcm.obj\r
 # Pico - sound\r
 OBJ = $(OBJ) $(R)Pico\sound\sound.obj $(R)Pico\sound\sn76496.obj $(R)Pico\sound\ym2612.obj $(R)Pico\sound\mix.obj\r
 # Pico - carthw\r
-OBJ = $(OBJ) $(R)Pico\carthw\svp\svp.obj $(R)Pico\carthw\svp\Memory.obj $(R)Pico\carthw\svp\ssp16.obj\r
+OBJ = $(OBJ) $(R)Pico\carthw\carthw.obj $(R)Pico\carthw\svp\svp.obj $(R)Pico\carthw\svp\Memory.obj \\r
+               $(R)Pico\carthw\svp\ssp16.obj $(R)Pico\carthw\svp\compiler.obj\r
 # zlib\r
 OBJ = $(OBJ) $(R)zlib\gzio.obj $(R)zlib\inffast.obj $(R)zlib\inflate.obj $(R)zlib\inftrees.obj $(R)zlib\trees.obj \\r
        $(R)zlib\deflate.obj $(R)zlib\crc32.obj $(R)zlib\adler32.obj $(R)zlib\zutil.obj $(R)zlib\compress.obj $(R)zlib\uncompr.obj\r
index 405cb9c..bbcef00 100644 (file)
@@ -1,2 +1,2 @@
-#define VERSION "1.40a"\r
+#define VERSION "1.42"\r
 \r