giz alpha1 release
authornotaz <notasas@gmail.com>
Sun, 23 Sep 2007 21:24:44 +0000 (21:24 +0000)
committernotaz <notasas@gmail.com>
Sun, 23 Sep 2007 21:24:44 +0000 (21:24 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive@259 be3aeb3a-fb24-0410-a615-afba39da0efa

Pico/Draw.s
platform/gizmondo/Makefile
platform/gizmondo/asm_utils.s
platform/gizmondo/emu.c
platform/gizmondo/menu.c

index d26d176..6338aab 100644 (file)
@@ -1540,11 +1540,11 @@ FinalizeLineBGR444:
 vidConvCpyRGB565: @ void *to, void *from, int pixels\r
     stmfd   sp!, {r4-r9,lr}\r
 \r
-    mov     r12, r2, lsr #3 @ repeats\r
+    mov     r12, r2, lsr #3  @ repeats\r
     mov     lr, #0x001c0000\r
     orr     lr, lr,  #0x01c  @ lr == pattern 0x001c001c\r
     mov     r8, #0x00030000\r
-    orr     r8, r8,  #0x003  @ lr == pattern 0x001c001c\r
+    orr     r8, r8,  #0x003\r
 \r
 .loopRGB565:\r
     ldmia   r1!, {r4-r7}\r
index ff7906a..0bae95f 100644 (file)
@@ -15,9 +15,9 @@ amalgamate = 0
 \r
 \r
 DEFINC = -I../.. -I. -D__GIZ__ -D_UNZIP_SUPPORT -DNO_SYNC\r
-COPT_COMMON = -static -Wall -Winline\r
+COPT_COMMON = -Wall -Winline\r
 ifeq ($(DEBUG),)\r
-COPT_COMMON += -O2 -ftracer -fstrength-reduce -fomit-frame-pointer -fstrict-aliasing -ffast-math\r
+COPT_COMMON += -O2 -ftracer -fomit-frame-pointer -fstrict-aliasing -ffast-math\r
 else\r
 COPT_COMMON += -ggdb\r
 endif\r
@@ -105,16 +105,16 @@ OBJS += ../../cpu/DrZ80/drz80.o
 all: PicoDrive.exe\r
 \r
 PicoDrive.exe : $(OBJS)\r
-       @echo $@\r
-       @$(GCC) -o $@ $(COPT) $^ -lm -lpng -Lkgsdk/ -lKGSDK -Wl,-Map=PicoDrive.map\r
+       @echo ">>>" $@\r
+       $(GCC) -o $@ -static $(COPT) $^ -lm -lpng -Lkgsdk/ -lKGSDK -Wl,-Map=PicoDrive.map\r
 ifeq ($(DEBUG),)\r
-       @$(STRIP) $@\r
+       $(STRIP) $@\r
 endif\r
 \r
 \r
 .c.o:\r
-       @echo $<\r
-       @$(GCC) $(COPT) $(DEFINC) -c $< -o $@\r
+       @echo ">>>" $<\r
+       $(GCC) $(COPT) $(DEFINC) -c $< -o $@\r
 #.s.o:\r
 #      @echo $<\r
 #      $(GCC) $(COPT) $(DEFINC) -c $< -o $@\r
@@ -181,7 +181,9 @@ $(error need VER)
 endif\r
 endif\r
 \r
-rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll ../readme.txt config.txt\r
+rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll ../readme.txt config.txt\r
        zip -9 -j ../../PicoDrive_$(VER).zip $^\r
+       ln -s ../gp2x/skin skin\r
        zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt\r
+       rm skin\r
 \r
index 8f168e9..f0cb4b4 100644 (file)
@@ -8,8 +8,10 @@ vidCpy8to16_40:
 
     mov     r3, r3, lsr #1
     orr     r3, r3, r3, lsl #8
-    add     r1, r1, #8
     orr     r3, r3, #(320/8-1)<<24
+    add     r1, r1, #8
+    mov     lr, #0xff
+    mov     lr, lr, lsl #1
 
     @ even lines
 vcloop_40_aligned:
@@ -63,10 +65,6 @@ vcloop_40_aligned:
     mul     r4, r5, r6
     sub     r1, r1, r4
 
- @ FIXME FIXME FIXME
- ldmfd   sp!, {r4-r9,lr}
- bx      lr
-
 vcloop_40_unaligned:
     ldr     r12, [r1], #4
     ldr     r7,  [r1], #4
@@ -75,7 +73,7 @@ vcloop_40_unaligned:
     ldrh    r4, [r2, r4]
     and     r5, lr, r12, lsr #7
     ldrh    r5, [r2, r5]
-   strh    r4, [r0]!
+   strh    r4, [r0], #2
     and     r6, lr, r12, lsr #15
     ldrh    r6, [r2, r6]
 
@@ -94,12 +92,12 @@ vcloop_40_unaligned:
     ldrh    r12,[r2, r12]
 
     and     r4, lr, r7, lsr #23
-    ldrh    r4, [r2, r6]
+    ldrh    r4, [r2, r4]
      orr     r12,r6, r12,lsl #16
     subs    r3, r3, #1<<24
 
     stmia   r0!, {r5,r8,r12}
-   strh    r4, [r0]!
+   strh    r4, [r0], #2
     bpl     vcloop_40_unaligned
 
     add     r1, r1, #336             @ skip a line and 1 col
index f0732bb..24bb8b0 100644 (file)
@@ -1,6 +1,10 @@
 #include <windows.h>
 #include <string.h>
 
+#include <sys/stat.h>  // mkdir
+#include <sys/types.h>
+
+#include "kgsdk/Framework.h"
 #include "kgsdk/Framework2D.h"
 #include "kgsdk/FrameworkAudio.h"
 #include "../common/emu.h"
@@ -73,10 +77,10 @@ static void emu_msg_tray_open(void)
 void emu_Init(void)
 {
        // make dirs for saves, cfgs, etc.
-       CreateDirectory(L"mds", NULL);
-       CreateDirectory(L"srm", NULL);
-       CreateDirectory(L"brm", NULL);
-       CreateDirectory(L"cfg", NULL);
+       mkdir("mds", 0777);
+       mkdir("srm", 0777);
+       mkdir("brm", 0777);
+       mkdir("cfg", 0777);
 
        PicoInit();
        PicoMessage = emu_msg_cb;
@@ -127,8 +131,7 @@ void emu_setDefaultConfig(void)
        currentConfig.KeyBinds[ 5] = 1<<4;
        currentConfig.KeyBinds[ 6] = 1<<5;
        currentConfig.KeyBinds[ 7] = 1<<6;
-       currentConfig.KeyBinds[ 8] = 1<<7;
-       currentConfig.KeyBinds[ 4] = 1<<26; // switch rend
+       currentConfig.KeyBinds[ 4] = 1<<7;
        currentConfig.KeyBinds[ 8] = 1<<27; // save state
        currentConfig.KeyBinds[ 9] = 1<<28; // load state
        currentConfig.KeyBinds[12] = 1<<29; // vol up
@@ -150,7 +153,7 @@ static int EmuScan8(unsigned int num, void *sdata)
 {
        // draw like the fast renderer
        if (!(Pico.video.reg[1]&8)) num += 8;
-       HighCol = gfx_buffer + 328*8 + 328*(num+1);
+       HighCol = gfx_buffer + 328*(num+1);
 
        return 0;
 }
@@ -172,12 +175,6 @@ static void osd_text(int x, int y, const char *text)
 short localPal[0x100];
 static void (*vidCpy8to16)(void *dest, void *src, short *pal, int lines) = NULL;
 
-// FIXME: rm
-static void vidCpy8to16_(void *dest, void *src, short *pal, int lines)
-{
-       vidCpy8to16(dest, src, pal, lines);
-}
-
 static void blit(const char *fps, const char *notice)
 {
        int emu_opt = currentConfig.EmuOpt;
@@ -188,16 +185,16 @@ static void blit(const char *fps, const char *notice)
                        Pico.m.dirtyPal = 0;
                        vidConvCpyRGB565(localPal, Pico.cram, 0x40);
                }
-               vidCpy8to16_((unsigned short *)giz_screen+321*8, PicoDraw2FB+328*8, localPal, 224);
+               vidCpy8to16((unsigned short *)giz_screen+321*8, PicoDraw2FB+328*8, localPal, 224);
        } else if (!(emu_opt&0x80)) {
                // 8bit accurate renderer
                if (Pico.m.dirtyPal) {
                        Pico.m.dirtyPal = 0;
                        vidConvCpyRGB565(localPal, Pico.cram, 0x40);
-                       if(Pico.video.reg[0xC]&8) { // shadow/hilight mode
+                       if (Pico.video.reg[0xC]&8) { // shadow/hilight mode
                                //vidConvCpyRGB32sh(localPal+0x40, Pico.cram, 0x40);
                                //vidConvCpyRGB32hi(localPal+0x80, Pico.cram, 0x40); // TODO
-                               blockcpy(localPal+0xc0, localPal+0x40, 0x40*4);
+                               blockcpy(localPal+0xc0, localPal+0x40, 0x40*2);
                                localPal[0xc0] = 0x0600;
                                localPal[0xd0] = 0xc000;
                                localPal[0xe0] = 0x0000; // reserved pixels for OSD
@@ -211,7 +208,7 @@ static void blit(const char *fps, const char *notice)
                }
                // TODO...
                //lprintf("vidCpy8to16 %p %p\n", (unsigned short *)giz_screen+321*8, PicoDraw2FB+328*8);
-               vidCpy8to16_((unsigned short *)giz_screen+321*8, PicoDraw2FB+328*8, localPal, 224);
+               vidCpy8to16((unsigned short *)giz_screen+321*8, PicoDraw2FB+328*8, localPal, 224);
                //lprintf("after vidCpy8to16\n");
        }
 
@@ -289,6 +286,68 @@ void emu_forcedFrame(void)
 
 static void updateKeys(void)
 {
+       unsigned int keys, allActions[2] = { 0, 0 }, events;
+       static unsigned int prevEvents = 0;
+       int i;
+
+       keys = Framework_PollGetButtons();
+       if (keys & BTN_HOME) {
+               engineState = PGS_Menu;
+               // wait until select is released, so menu would not resume game
+               while (Framework_PollGetButtons() & BTN_HOME) Sleep(50);
+       }
+
+       keys &= CONFIGURABLE_KEYS;
+
+       for (i = 0; i < 32; i++)
+       {
+               if (keys & (1 << i)) {
+                       int pl, acts = currentConfig.KeyBinds[i];
+                       if (!acts) continue;
+                       pl = (acts >> 16) & 1;
+                       /* TODO if (combo_keys & (1 << i)) {
+                               int u = i+1, acts_c = acts & combo_acts;
+                               // let's try to find the other one
+                               if (acts_c)
+                                       for (; u < 32; u++)
+                                               if ( (currentConfig.KeyBinds[u] & acts_c) && (keys & (1 << u)) ) {
+                                                       allActions[pl] |= acts_c;
+                                                       keys &= ~((1 << i) | (1 << u));
+                                                       break;
+                                               }
+                               // add non-combo actions if combo ones were not found
+                               if (!acts_c || u == 32)
+                                       allActions[pl] |= acts & ~combo_acts;
+                       } else */ {
+                               allActions[pl] |= acts;
+                       }
+               }
+       }
+
+       PicoPad[0] = (unsigned short) allActions[0];
+       PicoPad[1] = (unsigned short) allActions[1];
+
+       events = (allActions[0] | allActions[1]) >> 16;
+
+       // volume is treated in special way and triggered every frame
+       if (events & 0x6000) {
+               int vol = currentConfig.volume;
+               if (events & 0x2000) {
+                       if (vol < 100) vol++;
+               } else {
+                       if (vol >   0) vol--;
+               }
+               //gp2x_sound_volume(vol, vol);
+               sprintf(noticeMsg, "VOL: %02i", vol);
+               noticeMsgTime = GetTickCount();
+               currentConfig.volume = vol;
+       }
+
+       events &= ~prevEvents;
+       //if (events) RunEvents(events); // TODO
+       if (movie_data) emu_updateMovie();
+
+       prevEvents = (allActions[0] | allActions[1]) >> 16;
 }
 
 static void simpleWait(DWORD until)
index 5e4aa8f..d8fb156 100644 (file)
@@ -116,7 +116,7 @@ static void load_progress_cb(int percent)
        dst = (unsigned short *)menu_screen + 321*20;\r
 \r
        if (len > 320) len = 320;\r
-       for (ln = 10; ln > 0; ln--, dst += 320)\r
+       for (ln = 10; ln > 0; ln--, dst += 321)\r
                memset(dst, 0xff, len*2);\r
        menu_draw_end();\r
 }\r
@@ -1002,7 +1002,7 @@ static void amenu_loop_options(void)
                if (inp & (BTN_LEFT|BTN_RIGHT)) { // multi choise\r
                        if (!me_process(opt2_entries, OPT2_ENTRY_COUNT, selected_id, (inp&BTN_RIGHT) ? 1 : 0) &&\r
                            selected_id == MA_OPT2_GAMMA) {\r
-                               while ((inp = Framework_PollGetButtons(1)) & (BTN_LEFT|BTN_RIGHT)) {\r
+                               while ((inp = Framework_PollGetButtons()) & (BTN_LEFT|BTN_RIGHT)) {\r
                                        currentConfig.gamma += (inp & BTN_LEFT) ? -1 : 1;\r
                                        if (currentConfig.gamma <   1) currentConfig.gamma =   1;\r
                                        if (currentConfig.gamma > 300) currentConfig.gamma = 300;\r
@@ -1314,6 +1314,7 @@ static void draw_menu_credits(void)
        menu_draw_begin(1);\r
 \r
        text_out16(tl_x, 20, "PicoDrive v" VERSION " (c) notaz, 2006,2007");\r
+text_out16(tl_x, 30, "alpha1");\r
        y = tl_y;\r
        text_out16(tl_x, y, "Credits:");\r
        text_out16(tl_x, (y+=10), "Dave: Cyclone 68000 core,");\r
@@ -1324,8 +1325,8 @@ static void draw_menu_credits(void)
        text_out16(tl_x, (y+=10), "Stephane Dallongeville:");\r
        text_out16(tl_x, (y+=10), "      opensource Gens");\r
        text_out16(tl_x, (y+=10), "Haze: Genesis hw info");\r
-       text_out16(tl_x, (y+=10), "Reesy: TODO");\r
-       text_out16(tl_x, (y+=10), "TODO: gizmondo hardware");\r
+       text_out16(tl_x, (y+=10), "Reesy: kgsdk wrapper, sound code");\r
+       text_out16(tl_x, (y+=10), "jens.l: gizmondo hardware");\r
        text_out16(tl_x, (y+=10), "ketchupgun: skin design");\r
 \r
        menu_draw_end();\r
@@ -1389,7 +1390,7 @@ static void menu_loop_root(void)
        /* make sure action buttons are not pressed on entering menu */\r
        draw_menu_root(menu_sel);\r
 \r
-       while (Framework_PollGetButtons(1) & (BTN_PLAY|BTN_STOP|BTN_HOME)) Sleep(50);\r
+       while (Framework_PollGetButtons() & (BTN_PLAY|BTN_STOP|BTN_HOME)) Sleep(50);\r
 \r
        for (;;)\r
        {\r
@@ -1399,7 +1400,7 @@ static void menu_loop_root(void)
                if(inp & BTN_DOWN)  { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }\r
                if(inp &(BTN_HOME|BTN_STOP)){\r
                        if (rom_data) {\r
-                               while (Framework_PollGetButtons(1) & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until select is released\r
+                               while (Framework_PollGetButtons() & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until released\r
                                engineState = PGS_Running;\r
                                break;\r
                        }\r
@@ -1409,7 +1410,7 @@ static void menu_loop_root(void)
                        {\r
                                case MA_MAIN_RESUME_GAME:\r
                                        if (rom_data) {\r
-                                               while (Framework_PollGetButtons(1) & BTN_PLAY) Sleep(50);\r
+                                               while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50);\r
                                                engineState = PGS_Running;\r
                                                return;\r
                                        }\r
@@ -1519,10 +1520,13 @@ static void menu_prepare_bg(int use_game_bg)
        if (use_game_bg)\r
        {\r
                // darken the active framebuffer\r
-               // TODO: take from somewhere else, not giz_screen\r
+               if (giz_screen == NULL)\r
+                       giz_screen = Framework2D_LockBuffer();\r
                memset(bg_buffer, 0, 321*8*2);\r
                menu_darken_bg(bg_buffer + 321*8*2, (char *)giz_screen + 321*8*2, 321*224, 1);\r
                memset(bg_buffer + 321*232*2, 0, 321*8*2);\r
+               Framework2D_UnlockBuffer();\r
+               giz_screen = NULL;\r
        }\r
        else\r
        {\r
@@ -1598,7 +1602,7 @@ int menu_loop_tray(void)
 \r
        /* make sure action buttons are not pressed on entering menu */\r
        draw_menu_tray(menu_sel);\r
-       while (Framework_PollGetButtons(1) & BTN_PLAY) Sleep(50);\r
+       while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50);\r
 \r
        for (;;)\r
        {\r