trunk/src/emu/sound/ymf271.c
| r23994 | r23995 | |
| 267 | 267 | { |
| 268 | 268 | double st; |
| 269 | 269 | |
| 270 | | if (slot->waveform == 7) // external waveform (PCM) |
| 270 | if (slot->waveform == 7) |
| 271 | 271 | { |
| 272 | // external waveform (PCM) |
| 272 | 273 | st = (double)(2 * (slot->fns | 2048)) * pow_table[slot->block] * fs_frequency[slot->fs]; |
| 273 | 274 | st = st * multiple_table[slot->multiple]; |
| 274 | 275 | |
| 275 | 276 | // LFO phase modulation |
| 276 | 277 | st *= slot->lfo_phasemod; |
| 277 | 278 | |
| 278 | | st /= (double)(524288/65536); // pre-multiply with 65536 |
| 279 | st /= (double)(524288/65536); // pre-multiply with 65536 |
| 279 | 280 | |
| 280 | 281 | slot->step = (UINT32)st; |
| 281 | 282 | } |
| 282 | | else // internal waveform (FM) |
| 283 | else |
| 283 | 284 | { |
| 285 | // internal waveform (FM) |
| 284 | 286 | st = (double)(2 * slot->fns) * pow_table[slot->block]; |
| 285 | 287 | st = st * multiple_table[slot->multiple] * (double)(SIN_LEN); |
| 286 | 288 | |
| 287 | 289 | // LFO phase modulation |
| 288 | 290 | st *= slot->lfo_phasemod; |
| 289 | 291 | |
| 290 | | st /= (double)(536870912/65536); // pre-multiply with 65536 |
| 292 | st /= (double)(536870912/65536); // pre-multiply with 65536 |
| 291 | 293 | |
| 292 | 294 | slot->step = (UINT32)st; |
| 293 | 295 | } |
| r23994 | r23995 | |
| 378 | 380 | rate = GET_KEYSCALED_RATE(slot->relrate * 4, keycode, slot->keyscale); |
| 379 | 381 | slot->env_release_step = (rate < 4) ? 0 : (int)(((double)(255-0) / m_lut_ar[rate]) * 65536.0); |
| 380 | 382 | |
| 381 | | slot->volume = (255-160) << ENV_VOLUME_SHIFT; // -60db |
| 383 | slot->volume = (255-160) << ENV_VOLUME_SHIFT; // -60db |
| 382 | 384 | slot->env_state = ENV_ATTACK; |
| 383 | 385 | } |
| 384 | 386 | |
| r23994 | r23995 | |
| 443 | 445 | |
| 444 | 446 | for (i = 0; i < length; i++) |
| 445 | 447 | { |
| 448 | // loop |
| 449 | if ((slot->stepptr>>16) > slot->endaddr) |
| 450 | { |
| 451 | slot->stepptr = slot->stepptr - ((UINT64)slot->endaddr<<16) + ((UINT64)slot->loopaddr<<16); |
| 452 | if ((slot->stepptr>>16) > slot->endaddr) |
| 453 | { |
| 454 | // overflow |
| 455 | slot->stepptr &= 0xffff; |
| 456 | slot->stepptr |= ((UINT64)slot->loopaddr<<16); |
| 457 | } |
| 458 | } |
| 459 | |
| 446 | 460 | if (slot->bits == 8) |
| 447 | 461 | { |
| 448 | 462 | // 8bit |
| r23994 | r23995 | |
| 472 | 486 | |
| 473 | 487 | *mixp++ += (sample * ch0_vol) >> 16; |
| 474 | 488 | *mixp++ += (sample * ch1_vol) >> 16; |
| 475 | | |
| 489 | |
| 490 | // go to next step |
| 476 | 491 | slot->stepptr += slot->step; |
| 477 | | if ((slot->stepptr>>16) > slot->endaddr) |
| 478 | | { |
| 479 | | // kill non-frac |
| 480 | | slot->stepptr &= 0xffff; |
| 481 | | slot->stepptr |= (slot->loopaddr<<16); |
| 482 | | } |
| 483 | 492 | } |
| 484 | 493 | } |
| 485 | 494 | |
| r23994 | r23995 | |
| 631 | 640 | |
| 632 | 641 | switch (slot_group->sync) |
| 633 | 642 | { |
| 634 | | case 0: // 4 operator FM |
| 643 | // 4 operator FM |
| 644 | case 0: |
| 635 | 645 | { |
| 636 | 646 | int slot1 = j + (0*12); |
| 637 | 647 | int slot2 = j + (1*12); |
| r23994 | r23995 | |
| 817 | 827 | break; |
| 818 | 828 | } |
| 819 | 829 | |
| 820 | | case 1: // 2x 2 operator FM |
| 830 | // 2x 2 operator FM |
| 831 | case 1: |
| 821 | 832 | { |
| 822 | 833 | for (op = 0; op < 2; op++) |
| 823 | 834 | { |
| r23994 | r23995 | |
| 871 | 882 | break; |
| 872 | 883 | } |
| 873 | 884 | |
| 874 | | case 2: // 3 operator FM + PCM |
| 885 | // 3 operator FM + PCM |
| 886 | case 2: |
| 875 | 887 | { |
| 876 | 888 | int slot1 = j + (0*12); |
| 877 | 889 | int slot2 = j + (1*12); |
| r23994 | r23995 | |
| 967 | 979 | break; |
| 968 | 980 | } |
| 969 | 981 | |
| 970 | | case 3: // PCM |
| 982 | // PCM |
| 983 | case 3: |
| 971 | 984 | { |
| 972 | 985 | update_pcm(j + (0*12), mixp, samples); |
| 973 | 986 | update_pcm(j + (1*12), mixp, samples); |
| r23994 | r23995 | |
| 992 | 1005 | |
| 993 | 1006 | switch (reg) |
| 994 | 1007 | { |
| 995 | | case 0: |
| 1008 | case 0x0: |
| 996 | 1009 | slot->ext_en = (data & 0x80) ? 1 : 0; |
| 997 | 1010 | slot->ext_out = (data>>3)&0xf; |
| 998 | 1011 | |
| r23994 | r23995 | |
| 1019 | 1032 | } |
| 1020 | 1033 | break; |
| 1021 | 1034 | |
| 1022 | | case 1: |
| 1035 | case 0x1: |
| 1023 | 1036 | slot->lfoFreq = data; |
| 1024 | 1037 | break; |
| 1025 | 1038 | |
| 1026 | | case 2: |
| 1039 | case 0x2: |
| 1027 | 1040 | slot->lfowave = data & 3; |
| 1028 | 1041 | slot->pms = (data >> 3) & 0x7; |
| 1029 | 1042 | slot->ams = (data >> 6) & 0x3; |
| 1030 | 1043 | break; |
| 1031 | 1044 | |
| 1032 | | case 3: |
| 1045 | case 0x3: |
| 1033 | 1046 | slot->multiple = data & 0xf; |
| 1034 | 1047 | slot->detune = (data >> 4) & 0x7; |
| 1035 | 1048 | break; |
| 1036 | 1049 | |
| 1037 | | case 4: |
| 1050 | case 0x4: |
| 1038 | 1051 | slot->tl = data & 0x7f; |
| 1039 | 1052 | break; |
| 1040 | 1053 | |
| 1041 | | case 5: |
| 1054 | case 0x5: |
| 1042 | 1055 | slot->ar = data & 0x1f; |
| 1043 | | slot->keyscale = (data>>5)&0x7; |
| 1056 | slot->keyscale = (data >> 5) & 0x7; |
| 1044 | 1057 | break; |
| 1045 | 1058 | |
| 1046 | | case 6: |
| 1059 | case 0x6: |
| 1047 | 1060 | slot->decay1rate = data & 0x1f; |
| 1048 | 1061 | break; |
| 1049 | 1062 | |
| 1050 | | case 7: |
| 1063 | case 0x7: |
| 1051 | 1064 | slot->decay2rate = data & 0x1f; |
| 1052 | 1065 | break; |
| 1053 | 1066 | |
| 1054 | | case 8: |
| 1067 | case 0x8: |
| 1055 | 1068 | slot->relrate = data & 0xf; |
| 1056 | 1069 | slot->decay1lvl = (data >> 4) & 0xf; |
| 1057 | 1070 | break; |
| 1058 | 1071 | |
| 1059 | | case 9: |
| 1060 | | slot->fns &= ~0xff; |
| 1061 | | slot->fns |= data; |
| 1072 | case 0x9: |
| 1073 | // write frequency and block here |
| 1074 | slot->fns = (slot->fns_hi << 8 & 0x0f00) | data; |
| 1075 | slot->block = slot->fns_hi >> 4 & 0xf; |
| 1062 | 1076 | break; |
| 1063 | 1077 | |
| 1064 | | case 10: |
| 1065 | | slot->fns &= ~0xff00; |
| 1066 | | slot->fns |= (data & 0xf)<<8; |
| 1067 | | slot->block = (data>>4)&0xf; |
| 1078 | case 0xa: |
| 1079 | slot->fns_hi = data; |
| 1068 | 1080 | break; |
| 1069 | 1081 | |
| 1070 | | case 11: |
| 1082 | case 0xb: |
| 1071 | 1083 | slot->waveform = data & 0x7; |
| 1072 | 1084 | slot->feedback = (data >> 4) & 0x7; |
| 1073 | 1085 | slot->accon = (data & 0x80) ? 1 : 0; |
| 1074 | 1086 | break; |
| 1075 | 1087 | |
| 1076 | | case 12: |
| 1088 | case 0xc: |
| 1077 | 1089 | slot->algorithm = data & 0xf; |
| 1078 | 1090 | break; |
| 1079 | 1091 | |
| 1080 | | case 13: |
| 1092 | case 0xd: |
| 1081 | 1093 | slot->ch0_level = data >> 4; |
| 1082 | 1094 | slot->ch1_level = data & 0xf; |
| 1083 | 1095 | break; |
| 1084 | 1096 | |
| 1085 | | case 14: |
| 1097 | case 0xe: |
| 1086 | 1098 | slot->ch2_level = data >> 4; |
| 1087 | 1099 | slot->ch3_level = data & 0xf; |
| 1088 | 1100 | break; |
| r23994 | r23995 | |
| 1124 | 1136 | int sync_mode = 0; |
| 1125 | 1137 | switch (m_groups[groupnum].sync) |
| 1126 | 1138 | { |
| 1127 | | case 0: // 4 slot mode |
| 1128 | | { |
| 1139 | // 4 slot mode |
| 1140 | case 0: |
| 1129 | 1141 | if (bank == 0) |
| 1130 | 1142 | sync_mode = 1; |
| 1131 | 1143 | break; |
| 1132 | | } |
| 1133 | | case 1: // 2x 2 slot mode |
| 1134 | | { |
| 1144 | |
| 1145 | // 2x 2 slot mode |
| 1146 | case 1: |
| 1135 | 1147 | if (bank == 0 || bank == 1) |
| 1136 | 1148 | sync_mode = 1; |
| 1137 | 1149 | break; |
| 1138 | | } |
| 1139 | | case 2: // 3 slot + 1 slot mode |
| 1140 | | { |
| 1150 | |
| 1151 | // 3 slot + 1 slot mode |
| 1152 | case 2: |
| 1141 | 1153 | if (bank == 0) |
| 1142 | 1154 | sync_mode = 1; |
| 1143 | 1155 | break; |
| 1144 | | } |
| 1145 | 1156 | |
| 1146 | 1157 | default: |
| 1147 | 1158 | break; |
| 1148 | 1159 | } |
| 1149 | 1160 | |
| 1150 | | if (sync_mode && sync_reg) // key-on slot & synced register |
| 1161 | // key-on slot & synced register |
| 1162 | if (sync_mode && sync_reg) |
| 1151 | 1163 | { |
| 1152 | 1164 | switch (m_groups[groupnum].sync) |
| 1153 | 1165 | { |
| 1154 | | case 0: // 4 slot mode |
| 1155 | | { |
| 1166 | // 4 slot mode |
| 1167 | case 0: |
| 1156 | 1168 | write_register((12 * 0) + groupnum, reg, data); |
| 1157 | 1169 | write_register((12 * 1) + groupnum, reg, data); |
| 1158 | 1170 | write_register((12 * 2) + groupnum, reg, data); |
| 1159 | 1171 | write_register((12 * 3) + groupnum, reg, data); |
| 1160 | 1172 | break; |
| 1161 | | } |
| 1162 | | case 1: // 2x 2 slot mode |
| 1163 | | { |
| 1164 | | if (bank == 0) // Slot 1 - Slot 3 |
| 1173 | |
| 1174 | // 2x 2 slot mode |
| 1175 | case 1: |
| 1176 | if (bank == 0) |
| 1165 | 1177 | { |
| 1178 | // Slot 1 - Slot 3 |
| 1166 | 1179 | write_register((12 * 0) + groupnum, reg, data); |
| 1167 | 1180 | write_register((12 * 2) + groupnum, reg, data); |
| 1168 | 1181 | } |
| 1169 | | else // Slot 2 - Slot 4 |
| 1182 | else |
| 1170 | 1183 | { |
| 1184 | // Slot 2 - Slot 4 |
| 1171 | 1185 | write_register((12 * 1) + groupnum, reg, data); |
| 1172 | 1186 | write_register((12 * 3) + groupnum, reg, data); |
| 1173 | 1187 | } |
| 1174 | 1188 | break; |
| 1175 | | } |
| 1176 | | case 2: // 3 slot + 1 slot mode |
| 1177 | | { |
| 1178 | | // 1 slot is handled normally |
| 1189 | |
| 1190 | // 3 slot + 1 slot mode (1 slot is handled normally) |
| 1191 | case 2: |
| 1179 | 1192 | write_register((12 * 0) + groupnum, reg, data); |
| 1180 | 1193 | write_register((12 * 1) + groupnum, reg, data); |
| 1181 | 1194 | write_register((12 * 2) + groupnum, reg, data); |
| 1182 | 1195 | break; |
| 1183 | | } |
| 1184 | 1196 | } |
| 1185 | 1197 | } |
| 1186 | | else // write register normally |
| 1198 | else |
| 1187 | 1199 | { |
| 1200 | // write register normally |
| 1188 | 1201 | write_register((12 * bank) + groupnum, reg, data); |
| 1189 | 1202 | } |
| 1190 | 1203 | } |
| 1191 | 1204 | |
| 1192 | | void ymf271_device::ymf271_write_pcm(UINT8 data) |
| 1205 | void ymf271_device::ymf271_write_pcm(UINT8 address, UINT8 data) |
| 1193 | 1206 | { |
| 1194 | | int slotnum = pcm_tab[m_pcmreg & 0xf]; |
| 1207 | int slotnum = pcm_tab[address & 0xf]; |
| 1195 | 1208 | if (slotnum == -1) |
| 1196 | 1209 | { |
| 1197 | | logerror("ymf271_write_pcm invalid slot %02X %02X\n", m_pcmreg, data); |
| 1210 | logerror("ymf271_write_pcm invalid slot %02X %02X\n", address, data); |
| 1198 | 1211 | return; |
| 1199 | 1212 | } |
| 1200 | 1213 | YMF271Slot *slot = &m_slots[slotnum]; |
| 1201 | 1214 | |
| 1202 | | switch (m_pcmreg >> 4 & 0xf) |
| 1215 | switch (address >> 4 & 0xf) |
| 1203 | 1216 | { |
| 1204 | | case 0: |
| 1217 | case 0x0: |
| 1205 | 1218 | slot->startaddr &= ~0xff; |
| 1206 | 1219 | slot->startaddr |= data; |
| 1207 | 1220 | break; |
| 1208 | 1221 | |
| 1209 | | case 1: |
| 1222 | case 0x1: |
| 1210 | 1223 | slot->startaddr &= ~0xff00; |
| 1211 | 1224 | slot->startaddr |= data<<8; |
| 1212 | 1225 | break; |
| 1213 | 1226 | |
| 1214 | | case 2: |
| 1227 | case 0x2: |
| 1215 | 1228 | slot->startaddr &= ~0xff0000; |
| 1216 | 1229 | slot->startaddr |= (data & 0x7f)<<16; |
| 1217 | 1230 | slot->altloop = (data & 0x80) ? 1 : 0; |
| r23994 | r23995 | |
| 1219 | 1232 | popmessage("ymf271 A/L, contact MAMEdev"); |
| 1220 | 1233 | break; |
| 1221 | 1234 | |
| 1222 | | case 3: |
| 1235 | case 0x3: |
| 1223 | 1236 | slot->endaddr &= ~0xff; |
| 1224 | 1237 | slot->endaddr |= data; |
| 1225 | 1238 | break; |
| 1226 | 1239 | |
| 1227 | | case 4: |
| 1240 | case 0x4: |
| 1228 | 1241 | slot->endaddr &= ~0xff00; |
| 1229 | 1242 | slot->endaddr |= data<<8; |
| 1230 | 1243 | break; |
| 1231 | 1244 | |
| 1232 | | case 5: |
| 1245 | case 0x5: |
| 1233 | 1246 | slot->endaddr &= ~0xff0000; |
| 1234 | 1247 | slot->endaddr |= (data & 0x7f)<<16; |
| 1235 | 1248 | break; |
| 1236 | 1249 | |
| 1237 | | case 6: |
| 1250 | case 0x6: |
| 1238 | 1251 | slot->loopaddr &= ~0xff; |
| 1239 | 1252 | slot->loopaddr |= data; |
| 1240 | 1253 | break; |
| 1241 | 1254 | |
| 1242 | | case 7: |
| 1255 | case 0x7: |
| 1243 | 1256 | slot->loopaddr &= ~0xff00; |
| 1244 | 1257 | slot->loopaddr |= data<<8; |
| 1245 | 1258 | break; |
| 1246 | 1259 | |
| 1247 | | case 8: |
| 1260 | case 0x8: |
| 1248 | 1261 | slot->loopaddr &= ~0xff0000; |
| 1249 | 1262 | slot->loopaddr |= (data & 0x7f)<<16; |
| 1250 | 1263 | break; |
| 1251 | 1264 | |
| 1252 | | case 9: |
| 1265 | case 0x9: |
| 1253 | 1266 | slot->fs = data & 0x3; |
| 1254 | 1267 | slot->bits = (data & 0x4) ? 12 : 8; |
| 1255 | 1268 | slot->srcnote = (data >> 3) & 0x3; |
| r23994 | r23995 | |
| 1321 | 1334 | return m_ext_read_handler(offset); |
| 1322 | 1335 | } |
| 1323 | 1336 | |
| 1324 | | void ymf271_device::ymf271_write_timer(UINT8 data) |
| 1337 | void ymf271_device::ymf271_write_timer(UINT8 address, UINT8 data) |
| 1325 | 1338 | { |
| 1326 | | if ((m_timerreg & 0xf0) == 0) |
| 1339 | if ((address & 0xf0) == 0) |
| 1327 | 1340 | { |
| 1328 | | int groupnum = fm_tab[m_timerreg & 0xf]; |
| 1341 | int groupnum = fm_tab[address & 0xf]; |
| 1329 | 1342 | if (groupnum == -1) |
| 1330 | 1343 | { |
| 1331 | | logerror("ymf271_write_timer invalid group %02X %02X\n", m_timerreg, data); |
| 1344 | logerror("ymf271_write_timer invalid group %02X %02X\n", address, data); |
| 1332 | 1345 | return; |
| 1333 | 1346 | } |
| 1334 | 1347 | YMF271Group *group = &m_groups[groupnum]; |
| r23994 | r23995 | |
| 1338 | 1351 | } |
| 1339 | 1352 | else |
| 1340 | 1353 | { |
| 1341 | | switch (m_timerreg) |
| 1354 | switch (address) |
| 1342 | 1355 | { |
| 1343 | 1356 | case 0x10: |
| 1344 | 1357 | m_timerA = data; |
| r23994 | r23995 | |
| 1430 | 1443 | WRITE8_MEMBER( ymf271_device::write ) |
| 1431 | 1444 | { |
| 1432 | 1445 | m_stream->update(); |
| 1446 | |
| 1447 | m_regs_main[offset & 0xf] = data; |
| 1433 | 1448 | |
| 1434 | | switch (offset) |
| 1449 | switch (offset & 0xf) |
| 1435 | 1450 | { |
| 1436 | | case 0: |
| 1437 | | m_reg0 = data; |
| 1451 | case 0x0: |
| 1452 | case 0x2: |
| 1453 | case 0x4: |
| 1454 | case 0x6: |
| 1455 | case 0x8: |
| 1456 | case 0xc: |
| 1457 | // address regs |
| 1438 | 1458 | break; |
| 1439 | 1459 | |
| 1440 | | case 1: |
| 1441 | | ymf271_write_fm(0, m_reg0, data); |
| 1460 | case 0x1: |
| 1461 | ymf271_write_fm(0, m_regs_main[0x0], data); |
| 1442 | 1462 | break; |
| 1443 | 1463 | |
| 1444 | | case 2: |
| 1445 | | m_reg1 = data; |
| 1464 | case 0x3: |
| 1465 | ymf271_write_fm(1, m_regs_main[0x2], data); |
| 1446 | 1466 | break; |
| 1447 | 1467 | |
| 1448 | | case 3: |
| 1449 | | ymf271_write_fm(1, m_reg1, data); |
| 1468 | case 0x5: |
| 1469 | ymf271_write_fm(2, m_regs_main[0x4], data); |
| 1450 | 1470 | break; |
| 1451 | 1471 | |
| 1452 | | case 4: |
| 1453 | | m_reg2 = data; |
| 1472 | case 0x7: |
| 1473 | ymf271_write_fm(3, m_regs_main[0x6], data); |
| 1454 | 1474 | break; |
| 1455 | 1475 | |
| 1456 | | case 5: |
| 1457 | | ymf271_write_fm(2, m_reg2, data); |
| 1476 | case 0x9: |
| 1477 | ymf271_write_pcm(m_regs_main[0x8], data); |
| 1458 | 1478 | break; |
| 1459 | 1479 | |
| 1460 | | case 6: |
| 1461 | | m_reg3 = data; |
| 1462 | | break; |
| 1463 | | |
| 1464 | | case 7: |
| 1465 | | ymf271_write_fm(3, m_reg3, data); |
| 1466 | | break; |
| 1467 | | |
| 1468 | | case 8: |
| 1469 | | m_pcmreg = data; |
| 1470 | | break; |
| 1471 | | |
| 1472 | | case 9: |
| 1473 | | ymf271_write_pcm(data); |
| 1474 | | break; |
| 1475 | | |
| 1476 | | case 0xc: |
| 1477 | | m_timerreg = data; |
| 1478 | | break; |
| 1479 | | |
| 1480 | 1480 | case 0xd: |
| 1481 | | ymf271_write_timer(data); |
| 1481 | ymf271_write_timer(m_regs_main[0xc], data); |
| 1482 | 1482 | break; |
| 1483 | 1483 | |
| 1484 | 1484 | default: |
| r23994 | r23995 | |
| 1488 | 1488 | |
| 1489 | 1489 | READ8_MEMBER( ymf271_device::read ) |
| 1490 | 1490 | { |
| 1491 | | switch(offset) |
| 1491 | switch (offset & 0xf) |
| 1492 | 1492 | { |
| 1493 | | case 0: |
| 1493 | case 0x0: |
| 1494 | 1494 | return m_status; |
| 1495 | |
| 1496 | case 0x1: |
| 1497 | // statusreg 2 |
| 1498 | return 0; |
| 1495 | 1499 | |
| 1496 | | case 2: |
| 1500 | case 0x2: |
| 1497 | 1501 | { |
| 1498 | 1502 | if (!m_ext_rw) |
| 1499 | 1503 | return 0xff; |
| r23994 | r23995 | |
| 1503 | 1507 | m_ext_readlatch = ymf271_read_memory(m_ext_address); |
| 1504 | 1508 | return ret; |
| 1505 | 1509 | } |
| 1510 | |
| 1511 | default: |
| 1512 | break; |
| 1506 | 1513 | } |
| 1507 | 1514 | |
| 1508 | | return 0; |
| 1515 | return 0xff; |
| 1509 | 1516 | } |
| 1510 | 1517 | |
| 1511 | 1518 | void ymf271_device::init_tables() |
| r23994 | r23995 | |
| 1651 | 1658 | save_item(NAME(m_slots[i].decay2rate), i); |
| 1652 | 1659 | save_item(NAME(m_slots[i].decay1lvl), i); |
| 1653 | 1660 | save_item(NAME(m_slots[i].relrate), i); |
| 1654 | | save_item(NAME(m_slots[i].fns), i); |
| 1655 | 1661 | save_item(NAME(m_slots[i].block), i); |
| 1662 | save_item(NAME(m_slots[i].fns_hi), i); |
| 1663 | save_item(NAME(m_slots[i].fns), i); |
| 1656 | 1664 | save_item(NAME(m_slots[i].feedback), i); |
| 1657 | 1665 | save_item(NAME(m_slots[i].waveform), i); |
| 1658 | 1666 | save_item(NAME(m_slots[i].accon), i); |
| r23994 | r23995 | |
| 1691 | 1699 | save_item(NAME(m_groups[i].pfm), i); |
| 1692 | 1700 | } |
| 1693 | 1701 | |
| 1702 | save_item(NAME(m_regs_main)); |
| 1694 | 1703 | save_item(NAME(m_timerA)); |
| 1695 | 1704 | save_item(NAME(m_timerB)); |
| 1696 | 1705 | save_item(NAME(m_irqstate)); |
| 1697 | 1706 | save_item(NAME(m_status)); |
| 1698 | 1707 | save_item(NAME(m_enable)); |
| 1699 | | save_item(NAME(m_reg0)); |
| 1700 | | save_item(NAME(m_reg1)); |
| 1701 | | save_item(NAME(m_reg2)); |
| 1702 | | save_item(NAME(m_reg3)); |
| 1703 | | save_item(NAME(m_pcmreg)); |
| 1704 | | save_item(NAME(m_timerreg)); |
| 1705 | 1708 | save_item(NAME(m_ext_address)); |
| 1706 | 1709 | save_item(NAME(m_ext_rw)); |
| 1707 | 1710 | save_item(NAME(m_ext_readlatch)); |
| r23994 | r23995 | |
| 1766 | 1769 | m_irqstate(0), |
| 1767 | 1770 | m_status(0), |
| 1768 | 1771 | m_enable(0), |
| 1769 | | m_reg0(0), |
| 1770 | | m_reg1(0), |
| 1771 | | m_reg2(0), |
| 1772 | | m_reg3(0), |
| 1773 | | m_pcmreg(0), |
| 1774 | | m_timerreg(0), |
| 1775 | 1772 | m_ext_address(0), |
| 1776 | 1773 | m_ext_rw(0), |
| 1777 | 1774 | m_ext_readlatch(0), |
| r23994 | r23995 | |
| 1781 | 1778 | { |
| 1782 | 1779 | memset(m_slots, 0, sizeof(m_slots)); |
| 1783 | 1780 | memset(m_groups, 0, sizeof(m_groups)); |
| 1781 | memset(m_regs_main, 0, sizeof(m_regs_main)); |
| 1784 | 1782 | } |
| 1785 | 1783 | |
| 1786 | 1784 | //------------------------------------------------- |