optimizations, fixes, hacks, psp, ...
[libpicofe.git] / gp2x / 940ctl.c
index a927913..917ed29 100644 (file)
@@ -51,22 +51,12 @@ static FILE *loaded_mp3 = 0;
 }\r
 \r
 /* these will be managed locally on our side */\r
-extern int   *ym2612_dacen;\r
-extern INT32 *ym2612_dacout;\r
 static UINT8 *REGS = 0;                /* we will also keep local copy of regs for savestates and such */\r
 static INT32 *addr_A1;         /* address line A1      */\r
 \r
 static int   dacen;\r
 static INT32 dacout;\r
 static UINT8 ST_address;       /* address register     */\r
-static UINT8 ST_status;                /* status flag          */\r
-static UINT8 ST_mode;          /* mode  CSM / 3SLOT    */\r
-static int   ST_TA;                    /* timer a              */\r
-static int   ST_TAC;           /* timer a maxval       */\r
-static int   ST_TAT;           /* timer a ticker       */\r
-static UINT8 ST_TB;                    /* timer b              */\r
-static int   ST_TBC;           /* timer b maxval       */\r
-static int   ST_TBT;           /* timer b ticker       */\r
 \r
 static int   writebuff_ptr = 0;\r
 \r
@@ -84,16 +74,16 @@ static int set_timers( int v )
        /* b2 = timer enable a */\r
        /* b1 = load b */\r
        /* b0 = load a */\r
-       change = (ST_mode ^ v) & 0xc0;\r
-       ST_mode = v;\r
+       change = (ym2612_st->mode ^ v) & 0xc0;\r
+       ym2612_st->mode = v;\r
 \r
        /* reset Timer b flag */\r
        if( v & 0x20 )\r
-               ST_status &= ~2;\r
+               ym2612_st->status &= ~2;\r
 \r
        /* reset Timer a flag */\r
        if( v & 0x10 )\r
-               ST_status &= ~1;\r
+               ym2612_st->status &= ~1;\r
 \r
        return change;\r
 }\r
@@ -139,30 +129,30 @@ int YM2612Write_940(unsigned int a, unsigned int v)
                        switch( addr )\r
                        {\r
                        case 0x24: { // timer A High 8\r
-                                       int TAnew = (ST_TA & 0x03)|(((int)v)<<2);\r
-                                       if(ST_TA != TAnew) {\r
+                                       int TAnew = (ym2612_st->TA & 0x03)|(((int)v)<<2);\r
+                                       if (ym2612_st->TA != TAnew) {\r
                                                // we should reset ticker only if new value is written. Outrun requires this.\r
-                                               ST_TA = TAnew;\r
-                                               ST_TAC = (1024-TAnew)*18;\r
-                                               ST_TAT = 0;\r
+                                               ym2612_st->TA = TAnew;\r
+                                               ym2612_st->TAC = (1024-TAnew)*18;\r
+                                               ym2612_st->TAT = 0;\r
                                        }\r
                                        return 0;\r
                                }\r
                        case 0x25: { // timer A Low 2\r
-                                       int TAnew = (ST_TA & 0x3fc)|(v&3);\r
-                                       if(ST_TA != TAnew) {\r
-                                               ST_TA = TAnew;\r
-                                               ST_TAC = (1024-TAnew)*18;\r
-                                               ST_TAT = 0;\r
+                                       int TAnew = (ym2612_st->TA & 0x3fc)|(v&3);\r
+                                       if (ym2612_st->TA != TAnew) {\r
+                                               ym2612_st->TA = TAnew;\r
+                                               ym2612_st->TAC = (1024-TAnew)*18;\r
+                                               ym2612_st->TAT = 0;\r
                                        }\r
                                        return 0;\r
                                }\r
                        case 0x26: // timer B\r
-                               if(ST_TB != v) {\r
-                                       ST_TB = v;\r
-                                       ST_TBC  = (256-v)<<4;\r
-                                       ST_TBC *= 18;\r
-                                       ST_TBT  = 0;\r
+                               if (ym2612_st->TB != v) {\r
+                                       ym2612_st->TB = v;\r
+                                       ym2612_st->TBC  = (256-v)<<4;\r
+                                       ym2612_st->TBC *= 18;\r
+                                       ym2612_st->TBT  = 0;\r
                                }\r
                                return 0;\r
                        case 0x27:      /* mode, timer control */\r
@@ -229,38 +219,6 @@ int YM2612Write_940(unsigned int a, unsigned int v)
        return 0; // cause the engine to do updates once per frame only\r
 }\r
 \r
-UINT8 YM2612Read_940(void)\r
-{\r
-       return ST_status;\r
-}\r
-\r
-\r
-int YM2612PicoTick_940(int n)\r
-{\r
-       //int ret = 0;\r
-\r
-       // timer A\r
-       if(ST_mode & 0x01 && (ST_TAT+=64*n) >= ST_TAC) {\r
-               ST_TAT -= ST_TAC;\r
-               if(ST_mode & 0x04) ST_status |= 1;\r
-               // CSM mode total level latch and auto key on\r
-/*             FIXME\r
-               if(ST_mode & 0x80) {\r
-                       CSMKeyControll( &(ym2612_940->CH[2]) ); // Vectorman2, etc.\r
-                       ret = 1;\r
-               }\r
-*/\r
-       }\r
-\r
-       // timer B\r
-       if(ST_mode & 0x02 && (ST_TBT+=64*n) >= ST_TBC) {\r
-               ST_TBT -= ST_TBC;\r
-               if(ST_mode & 0x08) ST_status |= 2;\r
-       }\r
-\r
-       return 0;\r
-}\r
-\r
 \r
 #define CHECK_BUSY(job) \\r
        (gp2x_memregs[0x3b46>>1] & (1<<(job-1)))\r
@@ -339,12 +297,14 @@ void YM2612PicoStateLoad_940(void)
 static void internal_reset(void)\r
 {\r
        writebuff_ptr = 0;\r
-       ST_mode   = 0;\r
-       ST_status = 0;  /* normal mode */\r
-       ST_TA     = 0;\r
-       ST_TAC    = 0;\r
-       ST_TB     = 0;\r
-       ST_TBC    = 0;\r
+       ym2612_st->mode   = 0;\r
+       ym2612_st->status = 0;  /* normal mode */\r
+       ym2612_st->TA     = 0;\r
+       ym2612_st->TAC    = 0;\r
+       ym2612_st->TAT    = 0;\r
+       ym2612_st->TB     = 0;\r
+       ym2612_st->TBC    = 0;\r
+       ym2612_st->TBT    = 0;\r
        dacen     = 0;\r
        dacout    = 0;\r
        ST_address= 0;\r