| version 1.4, 2004/02/03 08:24:40 | version 1.8, 2005/05/13 05:47:25 | 
| Line 60  static _ROMEO  romeo = {NULL}; | Line 60  static _ROMEO  romeo = {NULL}; | 
 | // 自前で検索する(矢野さん方式) | // 自前で検索する(矢野さん方式) | 
 |  |  | 
 | #define PCIBUSDEVFUNC(b, d, f)  (((b) << 8) | ((d) << 3) | (f)) | #define PCIBUSDEVFUNC(b, d, f)  (((b) << 8) | ((d) << 3) | (f)) | 
| #define DEVVEND(v, d)                   ((v) | ((d) << 16)) | #define DEVVEND(v, d)                   ((ULONG)((v) | ((d) << 16))) | 
 |  |  | 
 | static ULONG searchRomeo(void) { | static ULONG searchRomeo(void) { | 
 |  |  | 
| Line 103  const DLLPROC *dterm; | Line 103  const DLLPROC *dterm; | 
 | } | } | 
 | romeo.mod = mod; | romeo.mod = mod; | 
 | d = dllproc; | d = dllproc; | 
| dterm = d + sizeof(dllproc)/sizeof(DLLPROC); | dterm = d + NELEMENTS(dllproc); | 
 | while(d < dterm) { | while(d < dterm) { | 
 | proc = (long)GetProcAddress(mod, d->symbol); | proc = (long)GetProcAddress(mod, d->symbol); | 
 | if (proc == (long)NULL) { | if (proc == (long)NULL) { | 
 | MessageBox(NULL, "0", "?", MB_OK); |  | 
 | goto jini_err2; | goto jini_err2; | 
 | } | } | 
| *(long *)(((BYTE *)&romeo) + (d->addr)) = proc; | *(long *)(((UINT8 *)&romeo) + (d->addr)) = proc; | 
 | d++; | d++; | 
 | } | } | 
 |  |  | 
| Line 222  BOOL juliet_YMF288IsBusy(void) { | Line 221  BOOL juliet_YMF288IsBusy(void) { | 
 | ((romeo.in8(romeo.addr + ROMEO_YMF288ADDR1) & 0x80) != 0)); | ((romeo.in8(romeo.addr + ROMEO_YMF288ADDR1) & 0x80) != 0)); | 
 | } | } | 
 |  |  | 
| void juliet_YMF288A(UINT8 addr, UINT8 data) { | void juliet_YMF288A(UINT addr, UINT8 data) { | 
 |  |  | 
 | if (romeo.avail & ROMEO_YMF288) { | if (romeo.avail & ROMEO_YMF288) { | 
 | if (addr == 0x07) {                                                     // psg mix | if (addr == 0x07) {                                                     // psg mix | 
 | romeo.psgmix = data; | romeo.psgmix = data; | 
 | } | } | 
| else if ((addr & 0xf0) == 0x40) {                       // ttl | else if ((addr & (~15)) == 0x40) {                      // ttl | 
| romeo.ttl[addr & 0x0f] = data; | romeo.ttl[addr & 15] = data; | 
 | } | } | 
| else if ((addr & 0xfc) == 0xb0) {                       // algorithm | else if ((addr & (~3)) == 0xb0) {                       // algorithm | 
 | romeo.algo[addr & 3] = data; | romeo.algo[addr & 3] = data; | 
 | } | } | 
 | YMF288A(addr, data); | YMF288A(addr, data); | 
 | } | } | 
 | } | } | 
 |  |  | 
| void juliet_YMF288B(UINT8 addr, UINT8 data) { | void juliet_YMF288B(UINT addr, UINT8 data) { | 
 |  |  | 
 | if (romeo.avail & ROMEO_YMF288) { | if (romeo.avail & ROMEO_YMF288) { | 
| if ((addr & 0xf0) == 0x40) {                            // ttl | if ((addr & (~15)) == 0x40) {                           // ttl | 
| romeo.ttl[0x10 + (addr & 0x0f)] = data; | romeo.ttl[0x10 + (addr & 15)] = data; | 
 | } | } | 
| else if ((addr & 0xfc) == 0xb0) {                       // algorithm | else if ((addr & (~3)) == 0xb0) {                       // algorithm | 
 | romeo.algo[4 + (addr & 3)] = data; | romeo.algo[4 + (addr & 3)] = data; | 
 | } | } | 
 | YMF288B(addr, data); | YMF288B(addr, data); |