OSDN Git Service

append for reader driver 'dozeu'
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sat, 31 Jan 2009 13:13:46 +0000 (13:13 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sat, 31 Jan 2009 13:13:46 +0000 (13:13 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@283 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/Makefile
client/trunk/file.mak
client/trunk/hard_dozeu.h [new file with mode: 0644]
client/trunk/paralellport.h
client/trunk/reader_dozeu.c [new file with mode: 0644]
client/trunk/reader_dozeu.h [new file with mode: 0644]
client/trunk/reader_master.c
client/trunk/reader_master.h
client/trunk/unagi.txt
client/trunk/waveform_dozeu.c [new file with mode: 0644]
client/trunk/waveform_dozeu.h [new file with mode: 0644]

index 6476c94..cab737b 100644 (file)
@@ -4,8 +4,8 @@ ARCHIVE_FILE = \
        *.c *.h *.mak Makefile COPYING \
        debug/debug.mak profile/profile.mak release/release.mak \
        unagi.rc unagi.ico
-ARCHIVE_GZ = unagi_client.0.5.3.tar.gz
-ARCHIVE_ZIP = unagi053.zip
+ARCHIVE_GZ = unagi_client.0.5.4.tar.gz
+ARCHIVE_ZIP = unagi054.zip
 TARGET_DIR = debug
 TARGET_MAK = debug.mak
 ifeq ($(PROFILE),1)
index 5628b8d..6d1071d 100644 (file)
@@ -1,9 +1,11 @@
 OBJ = \
        unagi.o header.o crc32.o \
        script_engine.o script_syntax.o \
-       reader_master.o reader_onajimi.o reader_hongkongfc.o \
+       reader_master.o \
+       reader_onajimi.o reader_hongkongfc.o reader_dozeu.o \
+       waveform_dozeu.o cusb.o \
        flashmemory.o \
        file.o textutil.o giveio.o unagi.res.o
 TARGET = unagi.exe
 CC = gcc
-CFLAGS = -Wall -Werror -Wmissing-declarations -I..#-Wcast-qual
+CFLAGS = -Wall -Werror -Wmissing-declarations -I.. -I$(EZUSBDRV)
diff --git a/client/trunk/hard_dozeu.h b/client/trunk/hard_dozeu.h
new file mode 100644 (file)
index 0000000..4875388
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _HARD_DOZEU_H_
+#define _HARD_DOZEU_H_
+enum{
+       DIRECTION_INPUT = 0,
+       DIRECTION_OUTPUT,
+       DIRECTION_INPUT_8BIT = 0,
+       DIRECTION_OUTPUT_8BIT = 0xff,
+};
+
+enum{
+       WAVEFORM_BANK_CPU_6502_HIGH = 0,
+       WAVEFORM_BANK_CPU_FLASH_HIGH,
+       WAVEFORM_BANK_PPU,
+       WAVEFORM_BANK_CPU_6502_LOW,
+       WAVEFORM_BANK_UNDEF = 123
+};
+enum{
+       WAVEFORM_WAVE_READ_SINGLE = 0,
+       WAVEFORM_WAVE_WRITE_SINGLE,
+       WAVEFORM_WAVE_READ_MULTI,
+       WAVEFORM_WAVE_WRITE_MULTI,
+};     
+#endif
index a33ad58..d454256 100644 (file)
@@ -12,14 +12,6 @@ enum{
        PORT_BUSY,
        PORT_CONTROL
 };
-enum{
-       ADDRESS_MASK_A0toA12 = 0x1fff,
-       ADDRESS_MASK_A0toA14 = 0x7fff,
-       ADDRESS_MASK_A15 = 0x8000
-};
-enum{ 
-       M2_CONTROL_TRUE, M2_CONTROL_FALSE
-};
 
 int _inp(int);
 #if ASM_ENABLE==0
@@ -35,28 +27,4 @@ static inline void _outp(int address, int data){
 }
 #endif
 
-/*
-static inline ¤Ï¶¦Í­¥Þ¥¯¥í°·¤¤
-*/
-static inline int bit_set(int data, const int bit)
-{
-       data |= 1 << bit;
-       return data;
-}
-
-static inline int bit_clear(int data, const int bit)
-{
-       data &= ~(1 << bit);
-       return data;
-}
-
-static inline void wait(long msec)
-{
-       if(msec == 0){
-               return;
-       }
-       //const long waittime = 100000;
-       Sleep(msec);
-}
-
 #endif
diff --git a/client/trunk/reader_dozeu.c b/client/trunk/reader_dozeu.c
new file mode 100644 (file)
index 0000000..ac4f60a
--- /dev/null
@@ -0,0 +1,195 @@
+#include <assert.h>
+#include <stdio.h>
+#include <windows.h>
+#include "type.h"
+#include "reader_master.h"
+#include "dozeu/cusb.h"
+#include "dozeu/fx2fw.h"
+#include "dozeu/fx2fw_prog.h"
+#include "waveform_dozeu.h"
+#include "hard_dozeu.h"
+#include "reader_dozeu.h"
+
+static HANDLE handle_usb;
+
+static int usb_open_or_close(int oc)
+{
+       int ret;
+       handle_usb = NULL;
+       switch(oc){
+       case READER_OPEN:
+               ret = cusb_init(
+                       CUSB_DEVICE_AUTOFIND, &handle_usb,
+                       fw_bin, 
+                       "F2FW", "V100"
+               );
+               break;
+       case READER_CLOSE:
+               ret = usb_close(&handle_usb);
+               break;
+       default:
+               ret = NG;
+               assert(0);
+               break;
+       }
+       return ret;
+}
+
+static const u8 DIRECTION_PORT_A = (
+       (DIRECTION_OUTPUT << 0) |
+       (DIRECTION_OUTPUT << 1) |
+       (DIRECTION_INPUT << 2) |
+       (DIRECTION_INPUT << 3) |
+       (DIRECTION_INPUT << 4) |
+       (DIRECTION_OUTPUT << 5) |
+       (DIRECTION_OUTPUT << 6) |
+       (DIRECTION_OUTPUT << 7)
+);
+//Port B ¤Ï databus ¤Ê¤Î¤ÇºÇ½é¤Ë½é´ü²½¤»¤º¡¢ÅÔÅÙÊý¸þ¤ò·è¤á¤ë
+static const u8 DIRECTION_PORT_C = DIRECTION_OUTPUT_8BIT;
+static const u8 DIRECTION_PORT_D = DIRECTION_OUTPUT_8BIT;
+static const u8 DIRECTION_PORT_E = DIRECTION_OUTPUT_8BIT;
+
+static void dz_init(void)
+{
+       u8 cmd[0x40];
+       int i = 0;
+       cmd[i++] = CMD_MODE;
+       cmd[i++] = MODE_PIO;
+       cmd[i++] = CMD_OEA;
+       cmd[i++] = DIRECTION_PORT_A;
+       cmd[i++] = CMD_OEC;
+       cmd[i++] = DIRECTION_PORT_C;
+       cmd[i++] = CMD_OED;
+       cmd[i++] = DIRECTION_PORT_D;
+       usb_bulk_write(handle_usb, CPIPE, cmd, i);
+       
+       //¦Õ2¤Î¾å¤²²¼¤²¤Ã¤Æ CTL Ã¼»Ò¤À¤±¤É¤É¡¼¤ä¤ë¤ó¤À??
+
+       i = 0;
+       cmd[i++] = CMD_MODE;
+       cmd[i++] = MODE_GPIF | MODE_8BIT | MODE_ADDR | MODE_NOFLOW;
+       cmd[i++] = CMD_GPIF;
+       memcpy(cmd + i, WAVEFORM_INIT, INIT_SIZE);
+       i += INIT_SIZE;
+       assert(i < 0x40);
+       usb_bulk_write(handle_usb, CPIPE, cmd, i);
+}
+
+static void address_set(long address)
+{
+       u8 cmd[0x40];
+       int i = 0;
+       cmd[i++] = CMD_ADSET;
+       cmd[i++] = address & 0xff;
+       cmd[i++] = 0; //¾å°Ì¥¢¥É¥ì¥¹¤Ï GPIF À©¸æ¤·¤Ê¤¤¤Î¤Ç¤È¤ê¤¢¤¨¤º0
+       cmd[i++] = CMD_OUTE;
+       cmd[i++] = address >> 8;
+       assert(i < 0x40);
+       usb_bulk_write(handle_usb, CPIPE, cmd, i);
+}
+
+static void waveform_set(int num)
+{
+       static int waveform_bank = WAVEFORM_BANK_UNDEF;
+       if(num != waveform_bank){
+               u8 cmd[0x200], *t;
+               const struct gpif_data *w;
+               //pointer initialize
+               t = cmd;
+               w = &WAVEFORM_DATA[num];
+               //flow data ¤ÎžÁ÷¤Ï farm ¤È¥Ä¡¼¥ë¤ÎÀ߷פ¬ÇËþ¤·¤Æ¤¤¤ë
+               //1ÅÙ¤Ë4¤ÄʬÁ÷¤ëɬÍפ¬¤¢¤ë¤¬¥Ç¡¼¥¿¤¬Ï¢Â³¤·¤Æ¤Ê¤¤
+               int i = 0, j;
+               *t = CMD_FLOW;
+               t++;
+               i++;
+               for(j = 0; j < WAVE_NUM; j++){
+                       memcpy(t, w->flow[j], FLOW_SIZE);
+                       t += FLOW_SIZE;
+                       i += FLOW_SIZE;
+               }
+               //wave data ¤Ï¸ÄÊ̤ËÀßÄê¤Ç¤­¤ë¤¬¡¢Ï¢Â³¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç°ÕÌ£¤¬¤Ê¤¤
+               *t = CMD_WAVE;
+               t++;
+               i++;
+               for(j = 0; j < WAVE_NUM; j++){
+                       memcpy(t, w->wave[j], WAVE_SIZE);
+                       t += WAVE_SIZE;
+                       i += WAVE_SIZE;
+               }
+               assert(i < 0x200);
+               usb_bulk_write(handle_usb, CPIPE, cmd, i);
+       }
+       waveform_bank = num;
+}
+
+static void cpu_waveform_set(long address)
+{
+       int wavebank = WAVEFORM_BANK_CPU_6502_HIGH;
+       if((address & ADDRESS_MASK_A15) == 0){
+               wavebank = WAVEFORM_BANK_CPU_6502_LOW;
+       }
+       waveform_set(wavebank);
+}
+
+static void bus_read(long address, long length, u8 *data)
+{
+       const u8 CMD = CMD_SREAD;
+       while(length != 0){
+               address_set(address);
+               usb_bulk_write(handle_usb, CPIPE, &CMD, 1);
+               usb_bulk_read(handle_usb, RFIFO, data, 1);
+               address++;
+               data++;
+               length--;
+       }
+}
+
+static void bus_write(long address, long data)
+{
+       address_set(address);
+       const u8 CMD[2] = {CMD_SWRITE, data};
+       usb_bulk_write(handle_usb, CPIPE, CMD, 2);
+}
+
+static void dz_cpu_read(long address, long length, u8 *data)
+{
+       cpu_waveform_set(address);
+       bus_read(address, length, data);
+}
+
+static void dz_cpu_6502_write(long address, long data, long wait_msec)
+{
+       cpu_waveform_set(address);
+       bus_write(address, data);
+}
+
+static void dz_ppu_read(long address, long length, u8 *data)
+{
+       waveform_set(WAVEFORM_BANK_PPU);
+       bus_read(address, length, data);
+}
+
+static void dz_ppu_write(long address, long data)
+{
+       waveform_set(WAVEFORM_BANK_PPU);
+       bus_write(address, data);
+}
+
+static void dz_cpu_flash_write(long address, long data)
+{
+       waveform_set(WAVEFORM_BANK_CPU_FLASH_HIGH);
+       bus_write(address, data);
+}
+
+const struct reader_driver DRIVER_DOZEU = {
+       .name = "dozeu",
+       .open_or_close = usb_open_or_close,
+       .init = dz_init,
+       .cpu_read = dz_cpu_read,
+       .ppu_read = dz_ppu_read,
+       .cpu_6502_write = dz_cpu_6502_write,
+       .cpu_flash_write = dz_cpu_flash_write,
+       .ppu_write = dz_ppu_write
+};
diff --git a/client/trunk/reader_dozeu.h b/client/trunk/reader_dozeu.h
new file mode 100644 (file)
index 0000000..6edf4f5
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef _READER_DOZEU_H_
+#define _READER_DOZEU_H_
+const struct reader_driver DRIVER_DOZEU;
+#endif
index 1a8e4c8..134d2a3 100644 (file)
@@ -4,10 +4,11 @@
 #include "reader_master.h"
 #include "reader_onajimi.h"
 #include "reader_hongkongfc.h"
+#include "reader_dozeu.h"
 
 //¤³¤ì¤ò rodata ¤Ë¤·¤¿¤¤¤±¤É const ¤ÎÉÕ¤±Êý¤¬Ê¬¤«¤é¤ó
 static const struct reader_driver *DRIVER_LIST[] = {
-       &DRIVER_ONAJIMI, &DRIVER_HONGKONGFC,
+       &DRIVER_ONAJIMI, &DRIVER_HONGKONGFC, &DRIVER_DOZEU,
        NULL
 };
 
index d39bcca..0596a6a 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _READER_MASTER_H_
 #define _READER_MASTER_H_
 #include "type.h"
+#include <windows.h>
 //C++ ¤Î Class ¤â¤É¤­¤ò C ¤Ç¼ÂÁõ¤·¤Æ¤¤¤ë´¶¤¬Áý¤·¤Æ¤­¤¿...
 struct reader_driver{
        int (*open_or_close)(int oc);
@@ -17,4 +18,35 @@ const struct reader_driver *reader_driver_get(const char *name);
 enum{
        READER_OPEN, READER_CLOSE
 };
+enum{
+       ADDRESS_MASK_A0toA12 = 0x1fff,
+       ADDRESS_MASK_A0toA14 = 0x7fff,
+       ADDRESS_MASK_A15 = 0x8000
+};
+enum{ 
+       M2_CONTROL_TRUE, M2_CONTROL_FALSE
+};
+/*
+static inline ¤Ï¶¦Í­¥Þ¥¯¥í°·¤¤
+*/
+static inline int bit_set(int data, const int bit)
+{
+       data |= 1 << bit;
+       return data;
+}
+
+static inline int bit_clear(int data, const int bit)
+{
+       data &= ~(1 << bit);
+       return data;
+}
+
+static inline void wait(long msec)
+{
+       if(msec == 0){
+               return;
+       }
+       //const long waittime = 100000;
+       Sleep(msec);
+}
 #endif
index c0c8b77..722b5f2 100644 (file)
@@ -1,5 +1,5 @@
 famicom ROM cartridge utility - unagi
-client version 0.5.3
+client version 0.5.4
 by \89V\8aJ\94­\8b¦\93¯\91g\8d\87
 \8cö\8e®\83T\83C\83g http://unagi.sourceforge.jp/
 \8cf\8e¦\94     http://unagi.sourceforge.jp/t/bbs.html
@@ -32,6 +32,11 @@ cmd.exe, rxvt 
 \83N\83\89\83C\83A\83\93\83g\82É\82Â\82¢\82Ä\82¢\82é unagi.cfg \82ð\83e\83L\83X\83g\83G\83f\83B\83^\82Å\95Ò\8fW\82µ\82Ä\8eg\97p\82·
 \82é\83n\81[\83h\82ð\91I\82ñ\82Å\82­\82¾\82³\82¢\81B\8ds\93ª\82É # \82ª\82Â\82¢\82Ä\82¢\82é\82à\82Ì\82Í\96³\8e\8b\82³\82ê\82Ü\82·\81B
 
+== hongkong fc \82Å\82Ì\96â\91è == 
+\83L\83\83\83\89\83N\83^ROM/RAM \94»\92è\82Ì PPU_RAMFIND \82ª\90³\82µ\82­\93®\8dì\82µ\82È\82¢\8fê\8d\87\82â\83L\83\83\83\89\83N
+\83^ROM\97Ì\88æ\82Ì\8f\91\82«\8d\9e\82Ý\82ª\88À\92è\82µ\82È\82¢\8fê\8d\87\82Í\83R\83\81\83\93\83g\82ð\8aO\82µ\82Ä\8e\8e\82µ\82Ä\82Ý\82Ä\82­\82¾\82³
+\82¢\81B\8dª\96{\93I\82È\91Î\8f\88\95û\96@\82Í\95s\96¾\82Å\82·\81B
+
 --\83R\83}\83\93\83h\83\89\83C\83\93\88ø\90\94--
 unagi.exe [mode] [script file] [target file] ...
 == d ROM DUMP MODE ==
diff --git a/client/trunk/waveform_dozeu.c b/client/trunk/waveform_dozeu.c
new file mode 100644 (file)
index 0000000..65b16d3
--- /dev/null
@@ -0,0 +1,102 @@
+#include "type.h"
+#include "waveform_dozeu.h"
+
+const u8 WAVEFORM_INIT[INIT_SIZE]= {
+       0xee,   //IFCONFIG
+       0xc0,0x00,0x00,0x3e,0xee,0x4e,0x00,     //CTL RDY init
+};
+static const u8 WAVEFORM_DATA_PLAIN[] = {
+       // Wave data bank0
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x00,
+       0x3e,0x3c,0x3f,0x3f,0x3c,0x3c,0x3c,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x00,
+       0x3e,0x38,0x3b,0x3b,0x38,0x38,0x38,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0xbf,0x01,0x07,
+       0x00,0x00,0x00,0x02,0x02,0x09,0x00,0x00,
+       0x3e,0x3c,0x3f,0x3f,0x3c,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0xbf,0x01,0x07,
+       0x00,0x00,0x00,0x02,0x02,0x09,0x00,0x00,
+       0x3e,0x38,0x3b,0x3b,0x38,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       // Flow data bank0
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       // Wave data bank1
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
+       0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,
+       0x3c,0x38,0x3c,0x3c,0x3c,0x3c,0x3c,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x80,0x01,0x01,0x01,0x01,0x07,
+       0x02,0x08,0x01,0x00,0x00,0x00,0x00,0x00,
+       0x3c,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x80,0x01,0x07,
+       0x00,0x02,0x02,0x00,0x08,0x01,0x00,0x00,
+       0x3c,0x38,0x3c,0x3c,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       // Flow data bank1
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       // Wave data bank2
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
+       0x3a,0x32,0x22,0x32,0x32,0x32,0x32,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x00,
+       0x3a,0x32,0x12,0x32,0x32,0x32,0x32,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x89,0x01,0x07,
+       0x00,0x00,0x02,0x00,0x08,0x01,0x00,0x00,
+       0x3a,0x32,0x22,0x32,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x89,0x01,0x07,
+       0x00,0x00,0x02,0x02,0x08,0x01,0x00,0x00,
+       0x3a,0x32,0x12,0x32,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       // Flow data bank2
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       // Wave data bank3
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x00,
+       0x3e,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x00,
+       0x3e,0x3b,0x3a,0x3a,0x3a,0x3a,0x3a,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x07,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,0x3e,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,
+       // Flow data bank3
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+};
+/*
+optimize ¤Î¥Ä¡¼¥ë¤¬¤¢¤Þ¤ê¤Ë¤â°ÕÌ£¤¬¤Ê¤¤¥Ç¡¼¥¿¤Ë¤Ð¤é¤¹¤Î¤Ç 
+cast ¤·¤Æ global data ¤È¤¹¤ë¡£
+*/
+const struct gpif_data *const WAVEFORM_DATA = (const struct gpif_data *) &WAVEFORM_DATA_PLAIN;
diff --git a/client/trunk/waveform_dozeu.h b/client/trunk/waveform_dozeu.h
new file mode 100644 (file)
index 0000000..cbb1841
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef _WAVEFORM_DOZEU_H_
+#define _WAVEFORM_DOZEU_H_
+enum{
+       WAVE_NUM = 4,
+       INIT_SIZE = 8,
+       WAVE_SIZE = 32,
+       FLOW_SIZE = 9
+};
+struct gpif_data{
+       u8 wave[WAVE_NUM][WAVE_SIZE];
+       u8 flow[WAVE_NUM][FLOW_SIZE];
+};
+extern const u8 WAVEFORM_INIT[INIT_SIZE];
+extern const struct gpif_data *const WAVEFORM_DATA;
+#endif