From 2ec14aec8ff1068bf6265f3ae9c502bf58cfc686 Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 23 Sep 2007 21:24:44 +0000 Subject: [PATCH] giz alpha1 release git-svn-id: file:///home/notaz/opt/svn/PicoDrive@259 be3aeb3a-fb24-0410-a615-afba39da0efa --- Pico/Draw.s | 4 +- platform/gizmondo/Makefile | 18 ++++--- platform/gizmondo/asm_utils.s | 14 +++--- platform/gizmondo/emu.c | 93 ++++++++++++++++++++++++++++------- platform/gizmondo/menu.c | 22 +++++---- 5 files changed, 107 insertions(+), 44 deletions(-) diff --git a/Pico/Draw.s b/Pico/Draw.s index d26d176..6338aab 100644 --- a/Pico/Draw.s +++ b/Pico/Draw.s @@ -1540,11 +1540,11 @@ FinalizeLineBGR444: vidConvCpyRGB565: @ void *to, void *from, int pixels stmfd sp!, {r4-r9,lr} - mov r12, r2, lsr #3 @ repeats + mov r12, r2, lsr #3 @ repeats mov lr, #0x001c0000 orr lr, lr, #0x01c @ lr == pattern 0x001c001c mov r8, #0x00030000 - orr r8, r8, #0x003 @ lr == pattern 0x001c001c + orr r8, r8, #0x003 .loopRGB565: ldmia r1!, {r4-r7} diff --git a/platform/gizmondo/Makefile b/platform/gizmondo/Makefile index ff7906a..0bae95f 100644 --- a/platform/gizmondo/Makefile +++ b/platform/gizmondo/Makefile @@ -15,9 +15,9 @@ amalgamate = 0 DEFINC = -I../.. -I. -D__GIZ__ -D_UNZIP_SUPPORT -DNO_SYNC -COPT_COMMON = -static -Wall -Winline +COPT_COMMON = -Wall -Winline ifeq ($(DEBUG),) -COPT_COMMON += -O2 -ftracer -fstrength-reduce -fomit-frame-pointer -fstrict-aliasing -ffast-math +COPT_COMMON += -O2 -ftracer -fomit-frame-pointer -fstrict-aliasing -ffast-math else COPT_COMMON += -ggdb endif @@ -105,16 +105,16 @@ OBJS += ../../cpu/DrZ80/drz80.o all: PicoDrive.exe PicoDrive.exe : $(OBJS) - @echo $@ - @$(GCC) -o $@ $(COPT) $^ -lm -lpng -Lkgsdk/ -lKGSDK -Wl,-Map=PicoDrive.map + @echo ">>>" $@ + $(GCC) -o $@ -static $(COPT) $^ -lm -lpng -Lkgsdk/ -lKGSDK -Wl,-Map=PicoDrive.map ifeq ($(DEBUG),) - @$(STRIP) $@ + $(STRIP) $@ endif .c.o: - @echo $< - @$(GCC) $(COPT) $(DEFINC) -c $< -o $@ + @echo ">>>" $< + $(GCC) $(COPT) $(DEFINC) -c $< -o $@ #.s.o: # @echo $< # $(GCC) $(COPT) $(DEFINC) -c $< -o $@ @@ -181,7 +181,9 @@ $(error need VER) endif endif -rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll ../readme.txt config.txt +rel: PicoDrive.exe kgsdk/ARMV4IRel/KGSDK.dll # ../readme.txt config.txt zip -9 -j ../../PicoDrive_$(VER).zip $^ + ln -s ../gp2x/skin skin zip -9 -r ../../PicoDrive_$(VER).zip skin -i \*.png -i \*.txt + rm skin diff --git a/platform/gizmondo/asm_utils.s b/platform/gizmondo/asm_utils.s index 8f168e9..f0cb4b4 100644 --- a/platform/gizmondo/asm_utils.s +++ b/platform/gizmondo/asm_utils.s @@ -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 diff --git a/platform/gizmondo/emu.c b/platform/gizmondo/emu.c index f0732bb..24bb8b0 100644 --- a/platform/gizmondo/emu.c +++ b/platform/gizmondo/emu.c @@ -1,6 +1,10 @@ #include #include +#include // mkdir +#include + +#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) diff --git a/platform/gizmondo/menu.c b/platform/gizmondo/menu.c index 5e4aa8f..d8fb156 100644 --- a/platform/gizmondo/menu.c +++ b/platform/gizmondo/menu.c @@ -116,7 +116,7 @@ static void load_progress_cb(int percent) dst = (unsigned short *)menu_screen + 321*20; if (len > 320) len = 320; - for (ln = 10; ln > 0; ln--, dst += 320) + for (ln = 10; ln > 0; ln--, dst += 321) memset(dst, 0xff, len*2); menu_draw_end(); } @@ -1002,7 +1002,7 @@ static void amenu_loop_options(void) if (inp & (BTN_LEFT|BTN_RIGHT)) { // multi choise if (!me_process(opt2_entries, OPT2_ENTRY_COUNT, selected_id, (inp&BTN_RIGHT) ? 1 : 0) && selected_id == MA_OPT2_GAMMA) { - while ((inp = Framework_PollGetButtons(1)) & (BTN_LEFT|BTN_RIGHT)) { + while ((inp = Framework_PollGetButtons()) & (BTN_LEFT|BTN_RIGHT)) { currentConfig.gamma += (inp & BTN_LEFT) ? -1 : 1; if (currentConfig.gamma < 1) currentConfig.gamma = 1; if (currentConfig.gamma > 300) currentConfig.gamma = 300; @@ -1314,6 +1314,7 @@ static void draw_menu_credits(void) menu_draw_begin(1); text_out16(tl_x, 20, "PicoDrive v" VERSION " (c) notaz, 2006,2007"); +text_out16(tl_x, 30, "alpha1"); y = tl_y; text_out16(tl_x, y, "Credits:"); text_out16(tl_x, (y+=10), "Dave: Cyclone 68000 core,"); @@ -1324,8 +1325,8 @@ static void draw_menu_credits(void) text_out16(tl_x, (y+=10), "Stephane Dallongeville:"); text_out16(tl_x, (y+=10), " opensource Gens"); text_out16(tl_x, (y+=10), "Haze: Genesis hw info"); - text_out16(tl_x, (y+=10), "Reesy: TODO"); - text_out16(tl_x, (y+=10), "TODO: gizmondo hardware"); + text_out16(tl_x, (y+=10), "Reesy: kgsdk wrapper, sound code"); + text_out16(tl_x, (y+=10), "jens.l: gizmondo hardware"); text_out16(tl_x, (y+=10), "ketchupgun: skin design"); menu_draw_end(); @@ -1389,7 +1390,7 @@ static void menu_loop_root(void) /* make sure action buttons are not pressed on entering menu */ draw_menu_root(menu_sel); - while (Framework_PollGetButtons(1) & (BTN_PLAY|BTN_STOP|BTN_HOME)) Sleep(50); + while (Framework_PollGetButtons() & (BTN_PLAY|BTN_STOP|BTN_HOME)) Sleep(50); for (;;) { @@ -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; } if(inp &(BTN_HOME|BTN_STOP)){ if (rom_data) { - while (Framework_PollGetButtons(1) & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until select is released + while (Framework_PollGetButtons() & (BTN_HOME|BTN_STOP)) Sleep(50); // wait until released engineState = PGS_Running; break; } @@ -1409,7 +1410,7 @@ static void menu_loop_root(void) { case MA_MAIN_RESUME_GAME: if (rom_data) { - while (Framework_PollGetButtons(1) & BTN_PLAY) Sleep(50); + while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50); engineState = PGS_Running; return; } @@ -1519,10 +1520,13 @@ static void menu_prepare_bg(int use_game_bg) if (use_game_bg) { // darken the active framebuffer - // TODO: take from somewhere else, not giz_screen + if (giz_screen == NULL) + giz_screen = Framework2D_LockBuffer(); memset(bg_buffer, 0, 321*8*2); menu_darken_bg(bg_buffer + 321*8*2, (char *)giz_screen + 321*8*2, 321*224, 1); memset(bg_buffer + 321*232*2, 0, 321*8*2); + Framework2D_UnlockBuffer(); + giz_screen = NULL; } else { @@ -1598,7 +1602,7 @@ int menu_loop_tray(void) /* make sure action buttons are not pressed on entering menu */ draw_menu_tray(menu_sel); - while (Framework_PollGetButtons(1) & BTN_PLAY) Sleep(50); + while (Framework_PollGetButtons() & BTN_PLAY) Sleep(50); for (;;) { -- 2.39.2