| version 1.9, 2005/03/20 13:12:50 | version 1.11, 2007/11/11 07:11:28 | 
| Line 21  extern COMMNG cm_mpu98; | Line 21  extern COMMNG cm_mpu98; | 
 | } | } | 
 | #endif | #endif | 
 |  |  | 
| static const TCHAR *mpuinterrupt[4] = { | static const CBPARAM cpInt[] = | 
| str_int0, str_int1, str_int2, str_int5}; | { | 
|  | {MAKEINTRESOURCE(IDS_INT0),             0}, | 
|  | {MAKEINTRESOURCE(IDS_INT1),             1}, | 
|  | {MAKEINTRESOURCE(IDS_INT2),             2}, | 
|  | {MAKEINTRESOURCE(IDS_INT5),             3}, | 
|  | }; | 
 |  |  | 
 | static  UINT8   mpu = 0; | static  UINT8   mpu = 0; | 
 |  |  | 
|  | static void setmpuio(HWND hWnd, UINT8 cValue) | 
| static void setmpuiopara(HWND hWnd, UINT16 res, UINT8 value) { | { | 
|  | dlgs_setcbcur(hWnd, IDC_MPUIO, (cValue & 0xf0)); | 
| SendDlgItemMessage(hWnd, res, CB_SETCURSEL, |  | 
| (WPARAM)((value >> 4) & 15), (LPARAM)0); |  | 
 | } | } | 
 |  |  | 
| static UINT8 getmpuio(HWND hWnd, UINT16 res) { | static UINT8 getmpuio(HWND hWnd) | 
|  | { | 
| TCHAR   work[8]; | return dlgs_getcbcur(hWnd, IDC_MPUIO, 0x00); | 
|  |  | 
| GetDlgItemText(hWnd, res, work, NELEMENTS(work)); |  | 
| return((miltchar_solveHEX(work) >> 6) & 0xf0); |  | 
 | } | } | 
 |  |  | 
| static void setmpuintpara(HWND hWnd, UINT16 res, UINT8 value) { | static void setmpuint(HWND hWnd, UINT8 cValue) | 
|  | { | 
| SendDlgItemMessage(hWnd, res, CB_SETCURSEL, | dlgs_setcbcur(hWnd, IDC_MPUINT, (cValue & 0x03)); | 
| (WPARAM)(value & 3), (LPARAM)0); |  | 
 | } | } | 
 |  |  | 
| static UINT8 getmpuint(HWND hWnd, UINT16 res) { | static UINT8 getmpuint(HWND hWnd) | 
|  | { | 
| TCHAR   work[8]; | return dlgs_getcbcur(hWnd, IDC_MPUINT, 0x00); | 
| TCHAR   ret; |  | 
|  |  | 
| GetDlgItemText(hWnd, res, work, NELEMENTS(work)); |  | 
| ret = work[3] - '0'; |  | 
| if (ret < 0) { |  | 
| ret = 0; |  | 
| } |  | 
| else if (ret >= 3) { |  | 
| ret = 3; |  | 
| } |  | 
| return((UINT8)ret); |  | 
 | } | } | 
 |  |  | 
| static void setmpujmp(HWND hWnd, UINT8 value, UINT8 bit) { | static void setmpujmp(HWND hWnd, UINT8 cValue, UINT8 cBit) | 
|  | { | 
| if ((mpu ^ value) & bit) { | if ((mpu ^ cValue) & cBit) | 
| mpu &= ~bit; | { | 
| mpu |= value; | mpu &= ~cBit; | 
|  | mpu |= cValue; | 
 | InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); | InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); | 
 | } | } | 
 | } | } | 
| Line 75  static void setmpujmp(HWND hWnd, UINT8 v | Line 64  static void setmpujmp(HWND hWnd, UINT8 v | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| static void mpucreate(HWND hWnd) { | static void mpucreate(HWND hWnd) | 
|  | { | 
 | UINT    i; | UINT    i; | 
| TCHAR   buf[8]; | TCHAR   szBuf[8]; | 
|  | int             nIndex; | 
 | HWND    sub; | HWND    sub; | 
 |  |  | 
 | mpu = np2cfg.mpuopt; | mpu = np2cfg.mpuopt; | 
| for (i=0; i<16; i++) { | for (i=0; i<16; i++) | 
| wsprintf(buf, tchar_4X, 0xC0D0 + (i << 10)); | { | 
| SendDlgItemMessage(hWnd, IDC_MPUIO, | wsprintf(szBuf, tchar_4X, 0xC0D0 + (i << 10)); | 
| CB_INSERTSTRING, (WPARAM)i, (LPARAM)buf); | nIndex = SendDlgItemMessage(hWnd, IDC_MPUIO, CB_ADDSTRING, | 
| } | 0, (LPARAM)szBuf); | 
| setmpuiopara(hWnd, IDC_MPUIO, mpu); | if (nIndex >= 0) | 
| SETLISTSTR(hWnd, IDC_MPUINT, mpuinterrupt); | { | 
| setmpuintpara(hWnd, IDC_MPUINT, mpu); | SendDlgItemMessage(hWnd, IDC_MPUIO, CB_SETITEMDATA, | 
|  | (WPARAM)nIndex, (LPARAM)(i << 4)); | 
|  | } | 
|  | } | 
|  | setmpuio(hWnd, mpu); | 
|  |  | 
|  | dlgs_setcbitem(hWnd, IDC_MPUINT, cpInt, NELEMENTS(cpInt)); | 
|  | setmpuint(hWnd, mpu); | 
 |  |  | 
 | dlgs_setlistmidiout(hWnd, IDC_MPU98MMAP, np2oscfg.mpu.mout); | dlgs_setlistmidiout(hWnd, IDC_MPU98MMAP, np2oscfg.mpu.mout); | 
 | dlgs_setlistmidiin(hWnd, IDC_MPU98MDIN, np2oscfg.mpu.min); | dlgs_setlistmidiin(hWnd, IDC_MPU98MDIN, np2oscfg.mpu.min); | 
| Line 174  static void mpucmddipsw(HWND hWnd) { | Line 171  static void mpucmddipsw(HWND hWnd) { | 
 | if ((p.x >= 2) && (p.x < 6)) { | if ((p.x >= 2) && (p.x < 6)) { | 
 | bit = 0x80 >> (p.x - 2); | bit = 0x80 >> (p.x - 2); | 
 | mpu ^= bit; | mpu ^= bit; | 
| setmpuiopara(hWnd, IDC_MPUIO, mpu); | setmpuio(hWnd, mpu); | 
 | redraw = TRUE; | redraw = TRUE; | 
 | } | } | 
 | else if ((p.x >= 9) && (p.x < 13)) { | else if ((p.x >= 9) && (p.x < 13)) { | 
| Line 182  static void mpucmddipsw(HWND hWnd) { | Line 179  static void mpucmddipsw(HWND hWnd) { | 
 | if ((mpu ^ bit) & 3) { | if ((mpu ^ bit) & 3) { | 
 | mpu &= ~0x3; | mpu &= ~0x3; | 
 | mpu |= bit; | mpu |= bit; | 
| setmpuintpara(hWnd, IDC_MPUINT, mpu); | setmpuint(hWnd, mpu); | 
 | redraw = TRUE; | redraw = TRUE; | 
 | } | } | 
 | } | } | 
| Line 210  LRESULT CALLBACK MidiDialogProc(HWND hWn | Line 207  LRESULT CALLBACK MidiDialogProc(HWND hWn | 
 | break; | break; | 
 |  |  | 
 | case IDC_MPUIO: | case IDC_MPUIO: | 
| setmpujmp(hWnd, getmpuio(hWnd, IDC_MPUIO), 0xf0); | setmpujmp(hWnd, getmpuio(hWnd), 0xf0); | 
 | return(FALSE); | return(FALSE); | 
 |  |  | 
 | case IDC_MPUINT: | case IDC_MPUINT: | 
| setmpujmp(hWnd, getmpuint(hWnd, IDC_MPUINT), 0x03); | setmpujmp(hWnd, getmpuint(hWnd), 0x03); | 
 | return(FALSE); | return(FALSE); | 
 |  |  | 
 | case IDC_MPUDEF: | case IDC_MPUDEF: | 
 | mpu = 0x82; | mpu = 0x82; | 
| setmpuiopara(hWnd, IDC_MPUIO, mpu); | setmpuio(hWnd, mpu); | 
| setmpuintpara(hWnd, IDC_MPUINT, mpu); | setmpuint(hWnd, mpu); | 
 | InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); | InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); | 
 | return(FALSE); | return(FALSE); | 
 |  |  |