1 #include "940shared.h"
\r
3 /* this code assumes that we live @ 0x3000000 bank */
\r
4 //static volatile unsigned short *gp2x_memregs = (void *) 0x0xbd000000;
\r
5 //static volatile unsigned long *gp2x_memregl = (void *) 0x0xbd000000;
\r
7 static _940_data_t *shared_data = (_940_data_t *) 0x100000;
\r
8 static _940_ctl_t *shared_ctl = (_940_ctl_t *) 0x200000;
\r
13 void wait_irq(void);
\r
14 void spend_cycles(int c);
\r
15 void cache_clean(void);
\r
16 void cache_clean_flush(void);
\r
18 // asm volatile ("mov r0, #0" ::: "r0");
\r
19 // asm volatile ("mcr p15, 0, r0, c7, c6, 0" ::: "r0"); /* flush dcache */
\r
20 // asm volatile ("mcr p15, 0, r0, c7, c10, 4" ::: "r0"); /* drain write buffer */
\r
22 void Main940(int startvector)
\r
24 ym2612_940 = &shared_data->ym2612;
\r
25 mix_buffer = shared_data->mix_buffer;
\r
28 shared_ctl->vstarts[startvector]++;
\r
29 asm volatile ("mcr p15, 0, r0, c7, c10, 4" ::: "r0");
\r
33 for (;; shared_ctl->loopc++)
\r
36 while (!shared_ctl->busy)
\r
38 //shared_ctl->waitc++;
\r
42 if (!shared_ctl->busy)
\r
47 switch (shared_ctl->job)
\r
49 case JOB940_YM2612INIT:
\r
50 shared_ctl->writebuff0[0] = shared_ctl->writebuff1[0] = 0xffff;
\r
51 YM2612Init_(shared_ctl->baseclock, shared_ctl->rate);
\r
54 case JOB940_YM2612RESETCHIP:
\r
58 case JOB940_PICOSTATELOAD:
\r
59 YM2612PicoStateLoad_();
\r
62 case JOB940_YM2612UPDATEONE: {
\r
64 if (shared_ctl->writebuffsel == 1) {
\r
65 wbuff = (int *) shared_ctl->writebuff1;
\r
67 wbuff = (int *) shared_ctl->writebuff0;
\r
70 /* playback all writes */
\r
71 for (i = 2048/2; i > 0; i--) {
\r
75 if (d == 0xffff) break;
\r
76 YM2612Write_(d >> 8, d);
\r
78 if (d == 0xffff) break;
\r
79 YM2612Write_(d >> 8, d);
\r
82 YM2612UpdateOne_(0, shared_ctl->length, shared_ctl->stereo);
\r
83 // cache_clean_flush();
\r
85 // asm volatile ("mov r0, #0" ::: "r0");
\r
86 // asm volatile ("mcr p15, 0, r0, c7, c10, 4" ::: "r0"); /* drain write buffer, should be done on nonbuffered write */
\r
91 shared_ctl->busy = 0;
\r