Previous 15994 Revisions Next

r8908 Thursday 26th August, 2010 at 13:34:21 UTC by Miodrag Milanović
Cleanup of M6800 CPU core, also added bit 7 and 6 of flag register to be 1 on reset (Will commit this to MAME when I check all opcodes, since looks there are some errors still)
[src/emu/cpu/m6800]m6800.c

src/emu/cpu/m6800/m6800.c
r8907r8908
956956   cpustate->txstate = M6800_TX_STATE_INIT;
957957   cpustate->txbits = cpustate->rxbits = 0;
958958   cpustate->trcsr_read = 0;
959   
960   cpustate->cc = 0xc0;
959961}
960962
961963/****************************************************************************
r8907r8908
997999}
9981000
9991001/****************************************************************************
1000 * Execute one instruction
1001 ****************************************************************************/
1002
1003INLINE void m6800_execute_one(m6800_state *cpustate, UINT8 ireg)
1004{
1005   switch( ireg )
1006   {
1007      case 0x00: illegal(cpustate); break;
1008      case 0x01: nop(cpustate); break;
1009      case 0x02: illegal(cpustate); break;
1010      case 0x03: illegal(cpustate); break;
1011      case 0x04: illegal(cpustate); break;
1012      case 0x05: illegal(cpustate); break;
1013      case 0x06: tap(cpustate); break;
1014      case 0x07: tpa(cpustate); break;
1015      case 0x08: inx(cpustate); break;
1016      case 0x09: dex(cpustate); break;
1017      case 0x0A: CLV; break;
1018      case 0x0B: SEV; break;
1019      case 0x0C: CLC; break;
1020      case 0x0D: SEC; break;
1021      case 0x0E: cli(cpustate); break;
1022      case 0x0F: sei(cpustate); break;
1023      case 0x10: sba(cpustate); break;
1024      case 0x11: cba(cpustate); break;
1025      case 0x12: illegal(cpustate); break;
1026      case 0x13: illegal(cpustate); break;
1027      case 0x14: illegal(cpustate); break;
1028      case 0x15: illegal(cpustate); break;
1029      case 0x16: tab(cpustate); break;
1030      case 0x17: tba(cpustate); break;
1031      case 0x18: illegal(cpustate); break;
1032      case 0x19: daa(cpustate); break;
1033      case 0x1a: illegal(cpustate); break;
1034      case 0x1b: aba(cpustate); break;
1035      case 0x1c: illegal(cpustate); break;
1036      case 0x1d: illegal(cpustate); break;
1037      case 0x1e: illegal(cpustate); break;
1038      case 0x1f: illegal(cpustate); break;
1039      case 0x20: bra(cpustate); break;
1040      case 0x21: brn(cpustate); break;
1041      case 0x22: bhi(cpustate); break;
1042      case 0x23: bls(cpustate); break;
1043      case 0x24: bcc(cpustate); break;
1044      case 0x25: bcs(cpustate); break;
1045      case 0x26: bne(cpustate); break;
1046      case 0x27: beq(cpustate); break;
1047      case 0x28: bvc(cpustate); break;
1048      case 0x29: bvs(cpustate); break;
1049      case 0x2a: bpl(cpustate); break;
1050      case 0x2b: bmi(cpustate); break;
1051      case 0x2c: bge(cpustate); break;
1052      case 0x2d: blt(cpustate); break;
1053      case 0x2e: bgt(cpustate); break;
1054      case 0x2f: ble(cpustate); break;
1055      case 0x30: tsx(cpustate); break;
1056      case 0x31: ins(cpustate); break;
1057      case 0x32: pula(cpustate); break;
1058      case 0x33: pulb(cpustate); break;
1059      case 0x34: des(cpustate); break;
1060      case 0x35: txs(cpustate); break;
1061      case 0x36: psha(cpustate); break;
1062      case 0x37: pshb(cpustate); break;
1063      case 0x38: illegal(cpustate); break;
1064      case 0x39: rts(cpustate); break;
1065      case 0x3a: illegal(cpustate); break;
1066      case 0x3b: rti(cpustate); break;
1067      case 0x3c: illegal(cpustate); break;
1068      case 0x3d: illegal(cpustate); break;
1069      case 0x3e: wai(cpustate); break;
1070      case 0x3f: swi(cpustate); break;
1071      case 0x40: nega(cpustate); break;
1072      case 0x41: illegal(cpustate); break;
1073      case 0x42: illegal(cpustate); break;
1074      case 0x43: coma(cpustate); break;
1075      case 0x44: lsra(cpustate); break;
1076      case 0x45: illegal(cpustate); break;
1077      case 0x46: rora(cpustate); break;
1078      case 0x47: asra(cpustate); break;
1079      case 0x48: asla(cpustate); break;
1080      case 0x49: rola(cpustate); break;
1081      case 0x4a: deca(cpustate); break;
1082      case 0x4b: illegal(cpustate); break;
1083      case 0x4c: inca(cpustate); break;
1084      case 0x4d: tsta(cpustate); break;
1085      case 0x4e: illegal(cpustate); break;
1086      case 0x4f: clra(cpustate); break;
1087      case 0x50: negb(cpustate); break;
1088      case 0x51: illegal(cpustate); break;
1089      case 0x52: illegal(cpustate); break;
1090      case 0x53: comb(cpustate); break;
1091      case 0x54: lsrb(cpustate); break;
1092      case 0x55: illegal(cpustate); break;
1093      case 0x56: rorb(cpustate); break;
1094      case 0x57: asrb(cpustate); break;
1095      case 0x58: aslb(cpustate); break;
1096      case 0x59: rolb(cpustate); break;
1097      case 0x5a: decb(cpustate); break;
1098      case 0x5b: illegal(cpustate); break;
1099      case 0x5c: incb(cpustate); break;
1100      case 0x5d: tstb(cpustate); break;
1101      case 0x5e: illegal(cpustate); break;
1102      case 0x5f: clrb(cpustate); break;
1103      case 0x60: neg_ix(cpustate); break;
1104      case 0x61: illegal(cpustate); break;
1105      case 0x62: illegal(cpustate); break;
1106      case 0x63: com_ix(cpustate); break;
1107      case 0x64: lsr_ix(cpustate); break;
1108      case 0x65: illegal(cpustate); break;
1109      case 0x66: ror_ix(cpustate); break;
1110      case 0x67: asr_ix(cpustate); break;
1111      case 0x68: asl_ix(cpustate); break;
1112      case 0x69: rol_ix(cpustate); break;
1113      case 0x6a: dec_ix(cpustate); break;
1114      case 0x6b: illegal(cpustate); break;
1115      case 0x6c: inc_ix(cpustate); break;
1116      case 0x6d: tst_ix(cpustate); break;
1117      case 0x6e: jmp_ix(cpustate); break;
1118      case 0x6f: clr_ix(cpustate); break;
1119      case 0x70: neg_ex(cpustate); break;
1120      case 0x71: illegal(cpustate); break;
1121      case 0x72: illegal(cpustate); break;
1122      case 0x73: com_ex(cpustate); break;
1123      case 0x74: lsr_ex(cpustate); break;
1124      case 0x75: illegal(cpustate); break;
1125      case 0x76: ror_ex(cpustate); break;
1126      case 0x77: asr_ex(cpustate); break;
1127      case 0x78: asl_ex(cpustate); break;
1128      case 0x79: rol_ex(cpustate); break;
1129      case 0x7a: dec_ex(cpustate); break;
1130      case 0x7b: illegal(cpustate); break;
1131      case 0x7c: inc_ex(cpustate); break;
1132      case 0x7d: tst_ex(cpustate); break;
1133      case 0x7e: jmp_ex(cpustate); break;
1134      case 0x7f: clr_ex(cpustate); break;
1135      case 0x80: suba_im(cpustate); break;
1136      case 0x81: cmpa_im(cpustate); break;
1137      case 0x82: sbca_im(cpustate); break;
1138      case 0x83: illegal(cpustate); break;
1139      case 0x84: anda_im(cpustate); break;
1140      case 0x85: bita_im(cpustate); break;
1141      case 0x86: lda_im(cpustate); break;
1142      case 0x87: sta_im(cpustate); break;
1143      case 0x88: eora_im(cpustate); break;
1144      case 0x89: adca_im(cpustate); break;
1145      case 0x8a: ora_im(cpustate); break;
1146      case 0x8b: adda_im(cpustate); break;
1147      case 0x8c: cmpx_im(cpustate); break;
1148      case 0x8d: bsr(cpustate); break;
1149      case 0x8e: lds_im(cpustate); break;
1150      case 0x8f: sts_im(cpustate); /* orthogonality */ break;
1151      case 0x90: suba_di(cpustate); break;
1152      case 0x91: cmpa_di(cpustate); break;
1153      case 0x92: sbca_di(cpustate); break;
1154      case 0x93: illegal(cpustate); break;
1155      case 0x94: anda_di(cpustate); break;
1156      case 0x95: bita_di(cpustate); break;
1157      case 0x96: lda_di(cpustate); break;
1158      case 0x97: sta_di(cpustate); break;
1159      case 0x98: eora_di(cpustate); break;
1160      case 0x99: adca_di(cpustate); break;
1161      case 0x9a: ora_di(cpustate); break;
1162      case 0x9b: adda_di(cpustate); break;
1163      case 0x9c: cmpx_di(cpustate); break;
1164      case 0x9d: jsr_di(cpustate); break;
1165      case 0x9e: lds_di(cpustate); break;
1166      case 0x9f: sts_di(cpustate); break;
1167      case 0xa0: suba_ix(cpustate); break;
1168      case 0xa1: cmpa_ix(cpustate); break;
1169      case 0xa2: sbca_ix(cpustate); break;
1170      case 0xa3: illegal(cpustate); break;
1171      case 0xa4: anda_ix(cpustate); break;
1172      case 0xa5: bita_ix(cpustate); break;
1173      case 0xa6: lda_ix(cpustate); break;
1174      case 0xa7: sta_ix(cpustate); break;
1175      case 0xa8: eora_ix(cpustate); break;
1176      case 0xa9: adca_ix(cpustate); break;
1177      case 0xaa: ora_ix(cpustate); break;
1178      case 0xab: adda_ix(cpustate); break;
1179      case 0xac: cmpx_ix(cpustate); break;
1180      case 0xad: jsr_ix(cpustate); break;
1181      case 0xae: lds_ix(cpustate); break;
1182      case 0xaf: sts_ix(cpustate); break;
1183      case 0xb0: suba_ex(cpustate); break;
1184      case 0xb1: cmpa_ex(cpustate); break;
1185      case 0xb2: sbca_ex(cpustate); break;
1186      case 0xb3: illegal(cpustate); break;
1187      case 0xb4: anda_ex(cpustate); break;
1188      case 0xb5: bita_ex(cpustate); break;
1189      case 0xb6: lda_ex(cpustate); break;
1190      case 0xb7: sta_ex(cpustate); break;
1191      case 0xb8: eora_ex(cpustate); break;
1192      case 0xb9: adca_ex(cpustate); break;
1193      case 0xba: ora_ex(cpustate); break;
1194      case 0xbb: adda_ex(cpustate); break;
1195      case 0xbc: cmpx_ex(cpustate); break;
1196      case 0xbd: jsr_ex(cpustate); break;
1197      case 0xbe: lds_ex(cpustate); break;
1198      case 0xbf: sts_ex(cpustate); break;
1199      case 0xc0: subb_im(cpustate); break;
1200      case 0xc1: cmpb_im(cpustate); break;
1201      case 0xc2: sbcb_im(cpustate); break;
1202      case 0xc3: illegal(cpustate); break;
1203      case 0xc4: andb_im(cpustate); break;
1204      case 0xc5: bitb_im(cpustate); break;
1205      case 0xc6: ldb_im(cpustate); break;
1206      case 0xc7: stb_im(cpustate); break;
1207      case 0xc8: eorb_im(cpustate); break;
1208      case 0xc9: adcb_im(cpustate); break;
1209      case 0xca: orb_im(cpustate); break;
1210      case 0xcb: addb_im(cpustate); break;
1211      case 0xcc: illegal(cpustate); break;
1212      case 0xcd: illegal(cpustate); break;
1213      case 0xce: ldx_im(cpustate); break;
1214      case 0xcf: stx_im(cpustate); break;
1215      case 0xd0: subb_di(cpustate); break;
1216      case 0xd1: cmpb_di(cpustate); break;
1217      case 0xd2: sbcb_di(cpustate); break;
1218      case 0xd3: illegal(cpustate); break;
1219      case 0xd4: andb_di(cpustate); break;
1220      case 0xd5: bitb_di(cpustate); break;
1221      case 0xd6: ldb_di(cpustate); break;
1222      case 0xd7: stb_di(cpustate); break;
1223      case 0xd8: eorb_di(cpustate); break;
1224      case 0xd9: adcb_di(cpustate); break;
1225      case 0xda: orb_di(cpustate); break;
1226      case 0xdb: addb_di(cpustate); break;
1227      case 0xdc: illegal(cpustate); break;
1228      case 0xdd: illegal(cpustate); break;
1229      case 0xde: ldx_di(cpustate); break;
1230      case 0xdf: stx_di(cpustate); break;
1231      case 0xe0: subb_ix(cpustate); break;
1232      case 0xe1: cmpb_ix(cpustate); break;
1233      case 0xe2: sbcb_ix(cpustate); break;
1234      case 0xe3: illegal(cpustate); break;
1235      case 0xe4: andb_ix(cpustate); break;
1236      case 0xe5: bitb_ix(cpustate); break;
1237      case 0xe6: ldb_ix(cpustate); break;
1238      case 0xe7: stb_ix(cpustate); break;
1239      case 0xe8: eorb_ix(cpustate); break;
1240      case 0xe9: adcb_ix(cpustate); break;
1241      case 0xea: orb_ix(cpustate); break;
1242      case 0xeb: addb_ix(cpustate); break;
1243      case 0xec: illegal(cpustate); break;
1244      case 0xed: illegal(cpustate); break;
1245      case 0xee: ldx_ix(cpustate); break;
1246      case 0xef: stx_ix(cpustate); break;
1247      case 0xf0: subb_ex(cpustate); break;
1248      case 0xf1: cmpb_ex(cpustate); break;
1249      case 0xf2: sbcb_ex(cpustate); break;
1250      case 0xf3: illegal(cpustate); break;
1251      case 0xf4: andb_ex(cpustate); break;
1252      case 0xf5: bitb_ex(cpustate); break;
1253      case 0xf6: ldb_ex(cpustate); break;
1254      case 0xf7: stb_ex(cpustate); break;
1255      case 0xf8: eorb_ex(cpustate); break;
1256      case 0xf9: adcb_ex(cpustate); break;
1257      case 0xfa: orb_ex(cpustate); break;
1258      case 0xfb: addb_ex(cpustate); break;
1259      case 0xfc: addx_ex(cpustate); break;
1260      case 0xfd: illegal(cpustate); break;
1261      case 0xfe: ldx_ex(cpustate); break;
1262      case 0xff: stx_ex(cpustate); break;
1263   }
1264}
1265
1266/****************************************************************************
12671002 * Execute cycles CPU cycles. Return number of cycles really executed
12681003 ****************************************************************************/
12691004static CPU_EXECUTE( m6800 )
r8907r8908
12771012
12781013   do
12791014   {
1280      if( cpustate->wai_state & M6800_WAI )
1015      if( cpustate->wai_state & (M6800_WAI|M6800_SLP) )
12811016      {
12821017         EAT_CYCLES;
12831018      }
r8907r8908
12871022         debugger_instruction_hook(device, PCD);
12881023         ireg=M_RDOP(PCD);
12891024         PC++;
1290         m6800_execute_one(cpustate, ireg);
1291         increment_counter(cpustate, cycles_6800[ireg]);
1025         (*cpustate->insn[ireg])(cpustate);
1026         increment_counter(cpustate, cpustate->cycles[ireg]);
12921027      }
12931028   } while( cpustate->icount>0 );
12941029}
r8907r8908
13611096   state_register(cpustate, "m6803");
13621097}
13631098
1364/****************************************************************************
1365 * Execute one instruction
1366 ****************************************************************************/
1367
1368INLINE void m6803_execute_one(m6800_state *cpustate, UINT8 ireg)
1369{
1370   switch( ireg )
1371   {
1372      case 0x00: illegal(cpustate); break;
1373      case 0x01: nop(cpustate); break;
1374      case 0x02: illegal(cpustate); break;
1375      case 0x03: illegal(cpustate); break;
1376      case 0x04: lsrd(cpustate); /* 6803 only */; break;
1377      case 0x05: asld(cpustate); /* 6803 only */; break;
1378      case 0x06: tap(cpustate); break;
1379      case 0x07: tpa(cpustate); break;
1380      case 0x08: inx(cpustate); break;
1381      case 0x09: dex(cpustate); break;
1382      case 0x0A: CLV; break;
1383      case 0x0B: SEV; break;
1384      case 0x0C: CLC; break;
1385      case 0x0D: SEC; break;
1386      case 0x0E: cli(cpustate); break;
1387      case 0x0F: sei(cpustate); break;
1388      case 0x10: sba(cpustate); break;
1389      case 0x11: cba(cpustate); break;
1390      case 0x12: illegal(cpustate); break;
1391      case 0x13: illegal(cpustate); break;
1392      case 0x14: illegal(cpustate); break;
1393      case 0x15: illegal(cpustate); break;
1394      case 0x16: tab(cpustate); break;
1395      case 0x17: tba(cpustate); break;
1396      case 0x18: illegal(cpustate); break;
1397      case 0x19: daa(cpustate); break;
1398      case 0x1a: illegal(cpustate); break;
1399      case 0x1b: aba(cpustate); break;
1400      case 0x1c: illegal(cpustate); break;
1401      case 0x1d: illegal(cpustate); break;
1402      case 0x1e: illegal(cpustate); break;
1403      case 0x1f: illegal(cpustate); break;
1404      case 0x20: bra(cpustate); break;
1405      case 0x21: brn(cpustate); break;
1406      case 0x22: bhi(cpustate); break;
1407      case 0x23: bls(cpustate); break;
1408      case 0x24: bcc(cpustate); break;
1409      case 0x25: bcs(cpustate); break;
1410      case 0x26: bne(cpustate); break;
1411      case 0x27: beq(cpustate); break;
1412      case 0x28: bvc(cpustate); break;
1413      case 0x29: bvs(cpustate); break;
1414      case 0x2a: bpl(cpustate); break;
1415      case 0x2b: bmi(cpustate); break;
1416      case 0x2c: bge(cpustate); break;
1417      case 0x2d: blt(cpustate); break;
1418      case 0x2e: bgt(cpustate); break;
1419      case 0x2f: ble(cpustate); break;
1420      case 0x30: tsx(cpustate); break;
1421      case 0x31: ins(cpustate); break;
1422      case 0x32: pula(cpustate); break;
1423      case 0x33: pulb(cpustate); break;
1424      case 0x34: des(cpustate); break;
1425      case 0x35: txs(cpustate); break;
1426      case 0x36: psha(cpustate); break;
1427      case 0x37: pshb(cpustate); break;
1428      case 0x38: pulx(cpustate); /* 6803 only */ break;
1429      case 0x39: rts(cpustate); break;
1430      case 0x3a: abx(cpustate); /* 6803 only */ break;
1431      case 0x3b: rti(cpustate); break;
1432      case 0x3c: pshx(cpustate); /* 6803 only */ break;
1433      case 0x3d: mul(cpustate); /* 6803 only */ break;
1434      case 0x3e: wai(cpustate); break;
1435      case 0x3f: swi(cpustate); break;
1436      case 0x40: nega(cpustate); break;
1437      case 0x41: illegal(cpustate); break;
1438      case 0x42: illegal(cpustate); break;
1439      case 0x43: coma(cpustate); break;
1440      case 0x44: lsra(cpustate); break;
1441      case 0x45: illegal(cpustate); break;
1442      case 0x46: rora(cpustate); break;
1443      case 0x47: asra(cpustate); break;
1444      case 0x48: asla(cpustate); break;
1445      case 0x49: rola(cpustate); break;
1446      case 0x4a: deca(cpustate); break;
1447      case 0x4b: illegal(cpustate); break;
1448      case 0x4c: inca(cpustate); break;
1449      case 0x4d: tsta(cpustate); break;
1450      case 0x4e: illegal(cpustate); break;
1451      case 0x4f: clra(cpustate); break;
1452      case 0x50: negb(cpustate); break;
1453      case 0x51: illegal(cpustate); break;
1454      case 0x52: illegal(cpustate); break;
1455      case 0x53: comb(cpustate); break;
1456      case 0x54: lsrb(cpustate); break;
1457      case 0x55: illegal(cpustate); break;
1458      case 0x56: rorb(cpustate); break;
1459      case 0x57: asrb(cpustate); break;
1460      case 0x58: aslb(cpustate); break;
1461      case 0x59: rolb(cpustate); break;
1462      case 0x5a: decb(cpustate); break;
1463      case 0x5b: illegal(cpustate); break;
1464      case 0x5c: incb(cpustate); break;
1465      case 0x5d: tstb(cpustate); break;
1466      case 0x5e: illegal(cpustate); break;
1467      case 0x5f: clrb(cpustate); break;
1468      case 0x60: neg_ix(cpustate); break;
1469      case 0x61: illegal(cpustate); break;
1470      case 0x62: illegal(cpustate); break;
1471      case 0x63: com_ix(cpustate); break;
1472      case 0x64: lsr_ix(cpustate); break;
1473      case 0x65: illegal(cpustate); break;
1474      case 0x66: ror_ix(cpustate); break;
1475      case 0x67: asr_ix(cpustate); break;
1476      case 0x68: asl_ix(cpustate); break;
1477      case 0x69: rol_ix(cpustate); break;
1478      case 0x6a: dec_ix(cpustate); break;
1479      case 0x6b: illegal(cpustate); break;
1480      case 0x6c: inc_ix(cpustate); break;
1481      case 0x6d: tst_ix(cpustate); break;
1482      case 0x6e: jmp_ix(cpustate); break;
1483      case 0x6f: clr_ix(cpustate); break;
1484      case 0x70: neg_ex(cpustate); break;
1485      case 0x71: illegal(cpustate); break;
1486      case 0x72: illegal(cpustate); break;
1487      case 0x73: com_ex(cpustate); break;
1488      case 0x74: lsr_ex(cpustate); break;
1489      case 0x75: illegal(cpustate); break;
1490      case 0x76: ror_ex(cpustate); break;
1491      case 0x77: asr_ex(cpustate); break;
1492      case 0x78: asl_ex(cpustate); break;
1493      case 0x79: rol_ex(cpustate); break;
1494      case 0x7a: dec_ex(cpustate); break;
1495      case 0x7b: illegal(cpustate); break;
1496      case 0x7c: inc_ex(cpustate); break;
1497      case 0x7d: tst_ex(cpustate); break;
1498      case 0x7e: jmp_ex(cpustate); break;
1499      case 0x7f: clr_ex(cpustate); break;
1500      case 0x80: suba_im(cpustate); break;
1501      case 0x81: cmpa_im(cpustate); break;
1502      case 0x82: sbca_im(cpustate); break;
1503      case 0x83: subd_im(cpustate); /* 6803 only */ break;
1504      case 0x84: anda_im(cpustate); break;
1505      case 0x85: bita_im(cpustate); break;
1506      case 0x86: lda_im(cpustate); break;
1507      case 0x87: sta_im(cpustate); break;
1508      case 0x88: eora_im(cpustate); break;
1509      case 0x89: adca_im(cpustate); break;
1510      case 0x8a: ora_im(cpustate); break;
1511      case 0x8b: adda_im(cpustate); break;
1512      case 0x8c: cpx_im(cpustate); /* 6803 difference */ break;
1513      case 0x8d: bsr(cpustate); break;
1514      case 0x8e: lds_im(cpustate); break;
1515      case 0x8f: sts_im(cpustate); /* orthogonality */ break;
1516      case 0x90: suba_di(cpustate); break;
1517      case 0x91: cmpa_di(cpustate); break;
1518      case 0x92: sbca_di(cpustate); break;
1519      case 0x93: subd_di(cpustate); /* 6803 only */ break;
1520      case 0x94: anda_di(cpustate); break;
1521      case 0x95: bita_di(cpustate); break;
1522      case 0x96: lda_di(cpustate); break;
1523      case 0x97: sta_di(cpustate); break;
1524      case 0x98: eora_di(cpustate); break;
1525      case 0x99: adca_di(cpustate); break;
1526      case 0x9a: ora_di(cpustate); break;
1527      case 0x9b: adda_di(cpustate); break;
1528      case 0x9c: cpx_di(cpustate); /* 6803 difference */ break;
1529      case 0x9d: jsr_di(cpustate); break;
1530      case 0x9e: lds_di(cpustate); break;
1531      case 0x9f: sts_di(cpustate); break;
1532      case 0xa0: suba_ix(cpustate); break;
1533      case 0xa1: cmpa_ix(cpustate); break;
1534      case 0xa2: sbca_ix(cpustate); break;
1535      case 0xa3: subd_ix(cpustate); /* 6803 only */ break;
1536      case 0xa4: anda_ix(cpustate); break;
1537      case 0xa5: bita_ix(cpustate); break;
1538      case 0xa6: lda_ix(cpustate); break;
1539      case 0xa7: sta_ix(cpustate); break;
1540      case 0xa8: eora_ix(cpustate); break;
1541      case 0xa9: adca_ix(cpustate); break;
1542      case 0xaa: ora_ix(cpustate); break;
1543      case 0xab: adda_ix(cpustate); break;
1544      case 0xac: cpx_ix(cpustate); /* 6803 difference */ break;
1545      case 0xad: jsr_ix(cpustate); break;
1546      case 0xae: lds_ix(cpustate); break;
1547      case 0xaf: sts_ix(cpustate); break;
1548      case 0xb0: suba_ex(cpustate); break;
1549      case 0xb1: cmpa_ex(cpustate); break;
1550      case 0xb2: sbca_ex(cpustate); break;
1551      case 0xb3: subd_ex(cpustate); /* 6803 only */ break;
1552      case 0xb4: anda_ex(cpustate); break;
1553      case 0xb5: bita_ex(cpustate); break;
1554      case 0xb6: lda_ex(cpustate); break;
1555      case 0xb7: sta_ex(cpustate); break;
1556      case 0xb8: eora_ex(cpustate); break;
1557      case 0xb9: adca_ex(cpustate); break;
1558      case 0xba: ora_ex(cpustate); break;
1559      case 0xbb: adda_ex(cpustate); break;
1560      case 0xbc: cpx_ex(cpustate); /* 6803 difference */ break;
1561      case 0xbd: jsr_ex(cpustate); break;
1562      case 0xbe: lds_ex(cpustate); break;
1563      case 0xbf: sts_ex(cpustate); break;
1564      case 0xc0: subb_im(cpustate); break;
1565      case 0xc1: cmpb_im(cpustate); break;
1566      case 0xc2: sbcb_im(cpustate); break;
1567      case 0xc3: addd_im(cpustate); /* 6803 only */ break;
1568      case 0xc4: andb_im(cpustate); break;
1569      case 0xc5: bitb_im(cpustate); break;
1570      case 0xc6: ldb_im(cpustate); break;
1571      case 0xc7: stb_im(cpustate); break;
1572      case 0xc8: eorb_im(cpustate); break;
1573      case 0xc9: adcb_im(cpustate); break;
1574      case 0xca: orb_im(cpustate); break;
1575      case 0xcb: addb_im(cpustate); break;
1576      case 0xcc: ldd_im(cpustate); /* 6803 only */ break;
1577      case 0xcd: std_im(cpustate); /* 6803 only -- orthogonality */ break;
1578      case 0xce: ldx_im(cpustate); break;
1579      case 0xcf: stx_im(cpustate); break;
1580      case 0xd0: subb_di(cpustate); break;
1581      case 0xd1: cmpb_di(cpustate); break;
1582      case 0xd2: sbcb_di(cpustate); break;
1583      case 0xd3: addd_di(cpustate); /* 6803 only */ break;
1584      case 0xd4: andb_di(cpustate); break;
1585      case 0xd5: bitb_di(cpustate); break;
1586      case 0xd6: ldb_di(cpustate); break;
1587      case 0xd7: stb_di(cpustate); break;
1588      case 0xd8: eorb_di(cpustate); break;
1589      case 0xd9: adcb_di(cpustate); break;
1590      case 0xda: orb_di(cpustate); break;
1591      case 0xdb: addb_di(cpustate); break;
1592      case 0xdc: ldd_di(cpustate); /* 6803 only */ break;
1593      case 0xdd: std_di(cpustate); /* 6803 only */ break;
1594      case 0xde: ldx_di(cpustate); break;
1595      case 0xdf: stx_di(cpustate); break;
1596      case 0xe0: subb_ix(cpustate); break;
1597      case 0xe1: cmpb_ix(cpustate); break;
1598      case 0xe2: sbcb_ix(cpustate); break;
1599      case 0xe3: addd_ix(cpustate); /* 6803 only */ break;
1600      case 0xe4: andb_ix(cpustate); break;
1601      case 0xe5: bitb_ix(cpustate); break;
1602      case 0xe6: ldb_ix(cpustate); break;
1603      case 0xe7: stb_ix(cpustate); break;
1604      case 0xe8: eorb_ix(cpustate); break;
1605      case 0xe9: adcb_ix(cpustate); break;
1606      case 0xea: orb_ix(cpustate); break;
1607      case 0xeb: addb_ix(cpustate); break;
1608      case 0xec: ldd_ix(cpustate); /* 6803 only */ break;
1609      case 0xed: std_ix(cpustate); /* 6803 only */ break;
1610      case 0xee: ldx_ix(cpustate); break;
1611      case 0xef: stx_ix(cpustate); break;
1612      case 0xf0: subb_ex(cpustate); break;
1613      case 0xf1: cmpb_ex(cpustate); break;
1614      case 0xf2: sbcb_ex(cpustate); break;
1615      case 0xf3: addd_ex(cpustate); /* 6803 only */ break;
1616      case 0xf4: andb_ex(cpustate); break;
1617      case 0xf5: bitb_ex(cpustate); break;
1618      case 0xf6: ldb_ex(cpustate); break;
1619      case 0xf7: stb_ex(cpustate); break;
1620      case 0xf8: eorb_ex(cpustate); break;
1621      case 0xf9: adcb_ex(cpustate); break;
1622      case 0xfa: orb_ex(cpustate); break;
1623      case 0xfb: addb_ex(cpustate); break;
1624      case 0xfc: ldd_ex(cpustate); /* 6803 only */ break;
1625      case 0xfd: std_ex(cpustate); /* 6803 only */ break;
1626      case 0xfe: ldx_ex(cpustate); break;
1627      case 0xff: stx_ex(cpustate); break;
1628   }
1629}
1630
1631/****************************************************************************
1632 * Execute cycles CPU cycles. Return number of cycles really executed
1633 ****************************************************************************/
1634static CPU_EXECUTE( m6803 )
1635{
1636   m6800_state *cpustate = get_safe_token(device);
1637   UINT8 ireg;
1638
1639   CHECK_IRQ_LINES(cpustate); /* HJB 990417 */
1640
1641   CLEANUP_COUNTERS();
1642
1643   do
1644   {
1645      if( cpustate->wai_state & M6800_WAI )
1646      {
1647         EAT_CYCLES;
1648      }
1649      else
1650      {
1651         pPPC = pPC;
1652         debugger_instruction_hook(device, PCD);
1653         ireg=M_RDOP(PCD);
1654         PC++;
1655         m6803_execute_one(cpustate, ireg);
1656         increment_counter(cpustate, cycles_6803[ireg]);
1657      }
1658   } while( cpustate->icount>0 );
1659}
1660
1661
16621099static READ8_HANDLER( m6803_internal_registers_r );
16631100static WRITE8_HANDLER( m6803_internal_registers_w );
16641101
r8907r8908
17141151   state_register(cpustate, "hd63701");
17151152}
17161153
1717/****************************************************************************
1718 * Execute one instruction
1719 ****************************************************************************/
1720
1721INLINE void hd63071_execute_one(m6800_state *cpustate, UINT8 ireg)
1722{
1723   switch( ireg )
1724   {
1725      case 0x00: trap(cpustate); break;
1726      case 0x01: nop(cpustate); break;
1727      case 0x02: trap(cpustate); break;
1728      case 0x03: trap(cpustate); break;
1729      case 0x04: lsrd(cpustate); /* 6803 only */; break;
1730      case 0x05: asld(cpustate); /* 6803 only */; break;
1731      case 0x06: tap(cpustate); break;
1732      case 0x07: tpa(cpustate); break;
1733      case 0x08: inx(cpustate); break;
1734      case 0x09: dex(cpustate); break;
1735      case 0x0A: CLV; break;
1736      case 0x0B: SEV; break;
1737      case 0x0C: CLC; break;
1738      case 0x0D: SEC; break;
1739      case 0x0E: cli(cpustate); break;
1740      case 0x0F: sei(cpustate); break;
1741      case 0x10: sba(cpustate); break;
1742      case 0x11: cba(cpustate); break;
1743      case 0x12: undoc1(cpustate); break;
1744      case 0x13: undoc2(cpustate); break;
1745      case 0x14: trap(cpustate); break;
1746      case 0x15: trap(cpustate); break;
1747      case 0x16: tab(cpustate); break;
1748      case 0x17: tba(cpustate); break;
1749      case 0x18: xgdx(cpustate); /* HD63701YO only */; break;
1750      case 0x19: daa(cpustate); break;
1751      case 0x1a: slp(cpustate); break;
1752      case 0x1b: aba(cpustate); break;
1753      case 0x1c: trap(cpustate); break;
1754      case 0x1d: trap(cpustate); break;
1755      case 0x1e: trap(cpustate); break;
1756      case 0x1f: trap(cpustate); break;
1757      case 0x20: bra(cpustate); break;
1758      case 0x21: brn(cpustate); break;
1759      case 0x22: bhi(cpustate); break;
1760      case 0x23: bls(cpustate); break;
1761      case 0x24: bcc(cpustate); break;
1762      case 0x25: bcs(cpustate); break;
1763      case 0x26: bne(cpustate); break;
1764      case 0x27: beq(cpustate); break;
1765      case 0x28: bvc(cpustate); break;
1766      case 0x29: bvs(cpustate); break;
1767      case 0x2a: bpl(cpustate); break;
1768      case 0x2b: bmi(cpustate); break;
1769      case 0x2c: bge(cpustate); break;
1770      case 0x2d: blt(cpustate); break;
1771      case 0x2e: bgt(cpustate); break;
1772      case 0x2f: ble(cpustate); break;
1773      case 0x30: tsx(cpustate); break;
1774      case 0x31: ins(cpustate); break;
1775      case 0x32: pula(cpustate); break;
1776      case 0x33: pulb(cpustate); break;
1777      case 0x34: des(cpustate); break;
1778      case 0x35: txs(cpustate); break;
1779      case 0x36: psha(cpustate); break;
1780      case 0x37: pshb(cpustate); break;
1781      case 0x38: pulx(cpustate); /* 6803 only */ break;
1782      case 0x39: rts(cpustate); break;
1783      case 0x3a: abx(cpustate); /* 6803 only */ break;
1784      case 0x3b: rti(cpustate); break;
1785      case 0x3c: pshx(cpustate); /* 6803 only */ break;
1786      case 0x3d: mul(cpustate); /* 6803 only */ break;
1787      case 0x3e: wai(cpustate); break;
1788      case 0x3f: swi(cpustate); break;
1789      case 0x40: nega(cpustate); break;
1790      case 0x41: trap(cpustate); break;
1791      case 0x42: trap(cpustate); break;
1792      case 0x43: coma(cpustate); break;
1793      case 0x44: lsra(cpustate); break;
1794      case 0x45: trap(cpustate); break;
1795      case 0x46: rora(cpustate); break;
1796      case 0x47: asra(cpustate); break;
1797      case 0x48: asla(cpustate); break;
1798      case 0x49: rola(cpustate); break;
1799      case 0x4a: deca(cpustate); break;
1800      case 0x4b: trap(cpustate); break;
1801      case 0x4c: inca(cpustate); break;
1802      case 0x4d: tsta(cpustate); break;
1803      case 0x4e: trap(cpustate); break;
1804      case 0x4f: clra(cpustate); break;
1805      case 0x50: negb(cpustate); break;
1806      case 0x51: trap(cpustate); break;
1807      case 0x52: trap(cpustate); break;
1808      case 0x53: comb(cpustate); break;
1809      case 0x54: lsrb(cpustate); break;
1810      case 0x55: trap(cpustate); break;
1811      case 0x56: rorb(cpustate); break;
1812      case 0x57: asrb(cpustate); break;
1813      case 0x58: aslb(cpustate); break;
1814      case 0x59: rolb(cpustate); break;
1815      case 0x5a: decb(cpustate); break;
1816      case 0x5b: trap(cpustate); break;
1817      case 0x5c: incb(cpustate); break;
1818      case 0x5d: tstb(cpustate); break;
1819      case 0x5e: trap(cpustate); break;
1820      case 0x5f: clrb(cpustate); break;
1821      case 0x60: neg_ix(cpustate); break;
1822      case 0x61: aim_ix(cpustate); /* HD63701YO only */; break;
1823      case 0x62: oim_ix(cpustate); /* HD63701YO only */; break;
1824      case 0x63: com_ix(cpustate); break;
1825      case 0x64: lsr_ix(cpustate); break;
1826      case 0x65: eim_ix(cpustate); /* HD63701YO only */; break;
1827      case 0x66: ror_ix(cpustate); break;
1828      case 0x67: asr_ix(cpustate); break;
1829      case 0x68: asl_ix(cpustate); break;
1830      case 0x69: rol_ix(cpustate); break;
1831      case 0x6a: dec_ix(cpustate); break;
1832      case 0x6b: tim_ix(cpustate); /* HD63701YO only */; break;
1833      case 0x6c: inc_ix(cpustate); break;
1834      case 0x6d: tst_ix(cpustate); break;
1835      case 0x6e: jmp_ix(cpustate); break;
1836      case 0x6f: clr_ix(cpustate); break;
1837      case 0x70: neg_ex(cpustate); break;
1838      case 0x71: aim_di(cpustate); /* HD63701YO only */; break;
1839      case 0x72: oim_di(cpustate); /* HD63701YO only */; break;
1840      case 0x73: com_ex(cpustate); break;
1841      case 0x74: lsr_ex(cpustate); break;
1842      case 0x75: eim_di(cpustate); /* HD63701YO only */; break;
1843      case 0x76: ror_ex(cpustate); break;
1844      case 0x77: asr_ex(cpustate); break;
1845      case 0x78: asl_ex(cpustate); break;
1846      case 0x79: rol_ex(cpustate); break;
1847      case 0x7a: dec_ex(cpustate); break;
1848      case 0x7b: tim_di(cpustate); /* HD63701YO only */; break;
1849      case 0x7c: inc_ex(cpustate); break;
1850      case 0x7d: tst_ex(cpustate); break;
1851      case 0x7e: jmp_ex(cpustate); break;
1852      case 0x7f: clr_ex(cpustate); break;
1853      case 0x80: suba_im(cpustate); break;
1854      case 0x81: cmpa_im(cpustate); break;
1855      case 0x82: sbca_im(cpustate); break;
1856      case 0x83: subd_im(cpustate); /* 6803 only */ break;
1857      case 0x84: anda_im(cpustate); break;
1858      case 0x85: bita_im(cpustate); break;
1859      case 0x86: lda_im(cpustate); break;
1860      case 0x87: sta_im(cpustate); break;
1861      case 0x88: eora_im(cpustate); break;
1862      case 0x89: adca_im(cpustate); break;
1863      case 0x8a: ora_im(cpustate); break;
1864      case 0x8b: adda_im(cpustate); break;
1865      case 0x8c: cpx_im(cpustate); /* 6803 difference */ break;
1866      case 0x8d: bsr(cpustate); break;
1867      case 0x8e: lds_im(cpustate); break;
1868      case 0x8f: sts_im(cpustate); /* orthogonality */ break;
1869      case 0x90: suba_di(cpustate); break;
1870      case 0x91: cmpa_di(cpustate); break;
1871      case 0x92: sbca_di(cpustate); break;
1872      case 0x93: subd_di(cpustate); /* 6803 only */ break;
1873      case 0x94: anda_di(cpustate); break;
1874      case 0x95: bita_di(cpustate); break;
1875      case 0x96: lda_di(cpustate); break;
1876      case 0x97: sta_di(cpustate); break;
1877      case 0x98: eora_di(cpustate); break;
1878      case 0x99: adca_di(cpustate); break;
1879      case 0x9a: ora_di(cpustate); break;
1880      case 0x9b: adda_di(cpustate); break;
1881      case 0x9c: cpx_di(cpustate); /* 6803 difference */ break;
1882      case 0x9d: jsr_di(cpustate); break;
1883      case 0x9e: lds_di(cpustate); break;
1884      case 0x9f: sts_di(cpustate); break;
1885      case 0xa0: suba_ix(cpustate); break;
1886      case 0xa1: cmpa_ix(cpustate); break;
1887      case 0xa2: sbca_ix(cpustate); break;
1888      case 0xa3: subd_ix(cpustate); /* 6803 only */ break;
1889      case 0xa4: anda_ix(cpustate); break;
1890      case 0xa5: bita_ix(cpustate); break;
1891      case 0xa6: lda_ix(cpustate); break;
1892      case 0xa7: sta_ix(cpustate); break;
1893      case 0xa8: eora_ix(cpustate); break;
1894      case 0xa9: adca_ix(cpustate); break;
1895      case 0xaa: ora_ix(cpustate); break;
1896      case 0xab: adda_ix(cpustate); break;
1897      case 0xac: cpx_ix(cpustate); /* 6803 difference */ break;
1898      case 0xad: jsr_ix(cpustate); break;
1899      case 0xae: lds_ix(cpustate); break;
1900      case 0xaf: sts_ix(cpustate); break;
1901      case 0xb0: suba_ex(cpustate); break;
1902      case 0xb1: cmpa_ex(cpustate); break;
1903      case 0xb2: sbca_ex(cpustate); break;
1904      case 0xb3: subd_ex(cpustate); /* 6803 only */ break;
1905      case 0xb4: anda_ex(cpustate); break;
1906      case 0xb5: bita_ex(cpustate); break;
1907      case 0xb6: lda_ex(cpustate); break;
1908      case 0xb7: sta_ex(cpustate); break;
1909      case 0xb8: eora_ex(cpustate); break;
1910      case 0xb9: adca_ex(cpustate); break;
1911      case 0xba: ora_ex(cpustate); break;
1912      case 0xbb: adda_ex(cpustate); break;
1913      case 0xbc: cpx_ex(cpustate); /* 6803 difference */ break;
1914      case 0xbd: jsr_ex(cpustate); break;
1915      case 0xbe: lds_ex(cpustate); break;
1916      case 0xbf: sts_ex(cpustate); break;
1917      case 0xc0: subb_im(cpustate); break;
1918      case 0xc1: cmpb_im(cpustate); break;
1919      case 0xc2: sbcb_im(cpustate); break;
1920      case 0xc3: addd_im(cpustate); /* 6803 only */ break;
1921      case 0xc4: andb_im(cpustate); break;
1922      case 0xc5: bitb_im(cpustate); break;
1923      case 0xc6: ldb_im(cpustate); break;
1924      case 0xc7: stb_im(cpustate); break;
1925      case 0xc8: eorb_im(cpustate); break;
1926      case 0xc9: adcb_im(cpustate); break;
1927      case 0xca: orb_im(cpustate); break;
1928      case 0xcb: addb_im(cpustate); break;
1929      case 0xcc: ldd_im(cpustate); /* 6803 only */ break;
1930      case 0xcd: std_im(cpustate); /* 6803 only -- orthogonality */ break;
1931      case 0xce: ldx_im(cpustate); break;
1932      case 0xcf: stx_im(cpustate); break;
1933      case 0xd0: subb_di(cpustate); break;
1934      case 0xd1: cmpb_di(cpustate); break;
1935      case 0xd2: sbcb_di(cpustate); break;
1936      case 0xd3: addd_di(cpustate); /* 6803 only */ break;
1937      case 0xd4: andb_di(cpustate); break;
1938      case 0xd5: bitb_di(cpustate); break;
1939      case 0xd6: ldb_di(cpustate); break;
1940      case 0xd7: stb_di(cpustate); break;
1941      case 0xd8: eorb_di(cpustate); break;
1942      case 0xd9: adcb_di(cpustate); break;
1943      case 0xda: orb_di(cpustate); break;
1944      case 0xdb: addb_di(cpustate); break;
1945      case 0xdc: ldd_di(cpustate); /* 6803 only */ break;
1946      case 0xdd: std_di(cpustate); /* 6803 only */ break;
1947      case 0xde: ldx_di(cpustate); break;
1948      case 0xdf: stx_di(cpustate); break;
1949      case 0xe0: subb_ix(cpustate); break;
1950      case 0xe1: cmpb_ix(cpustate); break;
1951      case 0xe2: sbcb_ix(cpustate); break;
1952      case 0xe3: addd_ix(cpustate); /* 6803 only */ break;
1953      case 0xe4: andb_ix(cpustate); break;
1954      case 0xe5: bitb_ix(cpustate); break;
1955      case 0xe6: ldb_ix(cpustate); break;
1956      case 0xe7: stb_ix(cpustate); break;
1957      case 0xe8: eorb_ix(cpustate); break;
1958      case 0xe9: adcb_ix(cpustate); break;
1959      case 0xea: orb_ix(cpustate); break;
1960      case 0xeb: addb_ix(cpustate); break;
1961      case 0xec: ldd_ix(cpustate); /* 6803 only */ break;
1962      case 0xed: std_ix(cpustate); /* 6803 only */ break;
1963      case 0xee: ldx_ix(cpustate); break;
1964      case 0xef: stx_ix(cpustate); break;
1965      case 0xf0: subb_ex(cpustate); break;
1966      case 0xf1: cmpb_ex(cpustate); break;
1967      case 0xf2: sbcb_ex(cpustate); break;
1968      case 0xf3: addd_ex(cpustate); /* 6803 only */ break;
1969      case 0xf4: andb_ex(cpustate); break;
1970      case 0xf5: bitb_ex(cpustate); break;
1971      case 0xf6: ldb_ex(cpustate); break;
1972      case 0xf7: stb_ex(cpustate); break;
1973      case 0xf8: eorb_ex(cpustate); break;
1974      case 0xf9: adcb_ex(cpustate); break;
1975      case 0xfa: orb_ex(cpustate); break;
1976      case 0xfb: addb_ex(cpustate); break;
1977      case 0xfc: ldd_ex(cpustate); /* 6803 only */ break;
1978      case 0xfd: std_ex(cpustate); /* 6803 only */ break;
1979      case 0xfe: ldx_ex(cpustate); break;
1980      case 0xff: stx_ex(cpustate); break;
1981   }
1982}
1983
1984/****************************************************************************
1985 * Execute cycles CPU cycles. Return number of cycles really executed
1986 ****************************************************************************/
1987static CPU_EXECUTE( hd63701 )
1988{
1989   m6800_state *cpustate = get_safe_token(device);
1990   UINT8 ireg;
1991
1992   CHECK_IRQ_LINES(cpustate); /* HJB 990417 */
1993
1994   CLEANUP_COUNTERS();
1995
1996   do
1997   {
1998      if( cpustate->wai_state & (M6800_WAI|M6800_SLP) )
1999      {
2000         EAT_CYCLES;
2001      }
2002      else
2003      {
2004         pPPC = pPC;
2005         debugger_instruction_hook(device, PCD);
2006         ireg=M_RDOP(PCD);
2007         PC++;
2008         hd63071_execute_one(cpustate, ireg);
2009         increment_counter(cpustate, cycles_63701[ireg]);
2010      }
2011   } while( cpustate->icount>0 );
2012}
2013
20141154/*
20151155    if change_pc(cpustate) direccted these areas ,Call hd63701_trap_pc(cpustate).
20161156    'mode' is selected by the sense of p2.0,p2.1,and p2.3 at reset timming.
r8907r8908
20581198   state_register(cpustate, "nsc8105");
20591199}
20601200
2061/****************************************************************************
2062 * Execute one instruction
2063 ****************************************************************************/
2064
2065INLINE void nsc8105_execute_one(m6800_state *cpustate, UINT8 ireg)
2066{
2067   switch( ireg )
2068   {
2069      case 0x00: illegal(cpustate); break;
2070      case 0x01: illegal(cpustate); break;
2071      case 0x02: nop(cpustate); break;
2072      case 0x03: illegal(cpustate); break;
2073      case 0x04: illegal(cpustate); break;
2074      case 0x05: tap(cpustate); break;
2075      case 0x06: illegal(cpustate); break;
2076      case 0x07: tpa(cpustate); break;
2077      case 0x08: inx(cpustate); break;
2078      case 0x09: CLV; break;
2079      case 0x0a: dex(cpustate); break;
2080      case 0x0b: SEV; break;
2081      case 0x0c: CLC; break;
2082      case 0x0d: cli(cpustate); break;
2083      case 0x0e: SEC; break;
2084      case 0x0f: sei(cpustate); break;
2085      case 0x10: sba(cpustate); break;
2086      case 0x11: illegal(cpustate); break;
2087      case 0x12: cba(cpustate); break;
2088      case 0x13: illegal(cpustate); break;
2089      case 0x14: illegal(cpustate); break;
2090      case 0x15: tab(cpustate); break;
2091      case 0x16: illegal(cpustate); break;
2092      case 0x17: tba(cpustate); break;
2093      case 0x18: illegal(cpustate); break;
2094      case 0x19: illegal(cpustate); break;
2095      case 0x1a: daa(cpustate); break;
2096      case 0x1b: aba(cpustate); break;
2097      case 0x1c: illegal(cpustate); break;
2098      case 0x1d: illegal(cpustate); break;
2099      case 0x1e: illegal(cpustate); break;
2100      case 0x1f: illegal(cpustate); break;
2101      case 0x20: bra(cpustate); break;
2102      case 0x21: bhi(cpustate); break;
2103      case 0x22: brn(cpustate); break;
2104      case 0x23: bls(cpustate); break;
2105      case 0x24: bcc(cpustate); break;
2106      case 0x25: bne(cpustate); break;
2107      case 0x26: bcs(cpustate); break;
2108      case 0x27: beq(cpustate); break;
2109      case 0x28: bvc(cpustate); break;
2110      case 0x29: bpl(cpustate); break;
2111      case 0x2a: bvs(cpustate); break;
2112      case 0x2b: bmi(cpustate); break;
2113      case 0x2c: bge(cpustate); break;
2114      case 0x2d: bgt(cpustate); break;
2115      case 0x2e: blt(cpustate); break;
2116      case 0x2f: ble(cpustate); break;
2117      case 0x30: tsx(cpustate); break;
2118      case 0x31: pula(cpustate); break;
2119      case 0x32: ins(cpustate); break;
2120      case 0x33: pulb(cpustate); break;
2121      case 0x34: des(cpustate); break;
2122      case 0x35: psha(cpustate); break;
2123      case 0x36: txs(cpustate); break;
2124      case 0x37: pshb(cpustate); break;
2125      case 0x38: illegal(cpustate); break;
2126      case 0x39: illegal(cpustate); break;
2127      case 0x3a: rts(cpustate); break;
2128      case 0x3b: rti(cpustate); break;
2129      case 0x3c: illegal(cpustate); break;
2130      case 0x3d: wai(cpustate); break;
2131      case 0x3e: illegal(cpustate); break;
2132      case 0x3f: swi(cpustate); break;
2133      case 0x40: suba_im(cpustate); break;
2134      case 0x41: sbca_im(cpustate); break;
2135      case 0x42: cmpa_im(cpustate); break;
2136      case 0x43: illegal(cpustate); break;
2137      case 0x44: anda_im(cpustate); break;
2138      case 0x45: lda_im(cpustate); break;
2139      case 0x46: bita_im(cpustate); break;
2140      case 0x47: sta_im(cpustate); break;
2141      case 0x48: eora_im(cpustate); break;
2142      case 0x49: ora_im(cpustate); break;
2143      case 0x4a: adca_im(cpustate); break;
2144      case 0x4b: adda_im(cpustate); break;
2145      case 0x4c: cmpx_im(cpustate); break;
2146      case 0x4d: lds_im(cpustate); break;
2147      case 0x4e: bsr(cpustate); break;
2148      case 0x4f: sts_im(cpustate); /* orthogonality */ break;
2149      case 0x50: suba_di(cpustate); break;
2150      case 0x51: sbca_di(cpustate); break;
2151      case 0x52: cmpa_di(cpustate); break;
2152      case 0x53: illegal(cpustate); break;
2153      case 0x54: anda_di(cpustate); break;
2154      case 0x55: lda_di(cpustate); break;
2155      case 0x56: bita_di(cpustate); break;
2156      case 0x57: sta_di(cpustate); break;
2157      case 0x58: eora_di(cpustate); break;
2158      case 0x59: ora_di(cpustate); break;
2159      case 0x5a: adca_di(cpustate); break;
2160      case 0x5b: adda_di(cpustate); break;
2161      case 0x5c: cmpx_di(cpustate); break;
2162      case 0x5d: lds_di(cpustate); break;
2163      case 0x5e: jsr_di(cpustate); break;
2164      case 0x5f: sts_di(cpustate); break;
2165      case 0x60: suba_ix(cpustate); break;
2166      case 0x61: sbca_ix(cpustate); break;
2167      case 0x62: cmpa_ix(cpustate); break;
2168      case 0x63: illegal(cpustate); break;
2169      case 0x64: anda_ix(cpustate); break;
2170      case 0x65: lda_ix(cpustate); break;
2171      case 0x66: bita_ix(cpustate); break;
2172      case 0x67: sta_ix(cpustate); break;
2173      case 0x68: eora_ix(cpustate); break;
2174      case 0x69: ora_ix(cpustate); break;
2175      case 0x6a: adca_ix(cpustate); break;
2176      case 0x6b: adda_ix(cpustate); break;
2177      case 0x6c: cmpx_ix(cpustate); break;
2178      case 0x6d: lds_ix(cpustate); break;
2179      case 0x6e: jsr_ix(cpustate); break;
2180      case 0x6f: sts_ix(cpustate); break;
2181      case 0x70: suba_ex(cpustate); break;
2182      case 0x71: sbca_ex(cpustate); break;
2183      case 0x72: cmpa_ex(cpustate); break;
2184      case 0x73: illegal(cpustate); break;
2185      case 0x74: anda_ex(cpustate); break;
2186      case 0x75: lda_ex(cpustate); break;
2187      case 0x76: bita_ex(cpustate); break;
2188      case 0x77: sta_ex(cpustate); break;
2189      case 0x78: eora_ex(cpustate); break;
2190      case 0x79: ora_ex(cpustate); break;
2191      case 0x7a: adca_ex(cpustate); break;
2192      case 0x7b: adda_ex(cpustate); break;
2193      case 0x7c: cmpx_ex(cpustate); break;
2194      case 0x7d: lds_ex(cpustate); break;
2195      case 0x7e: jsr_ex(cpustate); break;
2196      case 0x7f: sts_ex(cpustate); break;
2197      case 0x80: nega(cpustate); break;
2198      case 0x81: illegal(cpustate); break;
2199      case 0x82: illegal(cpustate); break;
2200      case 0x83: coma(cpustate); break;
2201      case 0x84: lsra(cpustate); break;
2202      case 0x85: rora(cpustate); break;
2203      case 0x86: illegal(cpustate); break;
2204      case 0x87: asra(cpustate); break;
2205      case 0x88: asla(cpustate); break;
2206      case 0x89: deca(cpustate); break;
2207      case 0x8a: rola(cpustate); break;
2208      case 0x8b: illegal(cpustate); break;
2209      case 0x8c: inca(cpustate); break;
2210      case 0x8d: illegal(cpustate); break;
2211      case 0x8e: tsta(cpustate); break;
2212      case 0x8f: clra(cpustate); break;
2213      case 0x90: negb(cpustate); break;
2214      case 0x91: illegal(cpustate); break;
2215      case 0x92: illegal(cpustate); break;
2216      case 0x93: comb(cpustate); break;
2217      case 0x94: lsrb(cpustate); break;
2218      case 0x95: rorb(cpustate); break;
2219      case 0x96: illegal(cpustate); break;
2220      case 0x97: asrb(cpustate); break;
2221      case 0x98: aslb(cpustate); break;
2222      case 0x99: decb(cpustate); break;
2223      case 0x9a: rolb(cpustate); break;
2224      case 0x9b: illegal(cpustate); break;
2225      case 0x9c: incb(cpustate); break;
2226      case 0x9d: illegal(cpustate); break;
2227      case 0x9e: tstb(cpustate); break;
2228      case 0x9f: clrb(cpustate); break;
2229      case 0xa0: neg_ix(cpustate); break;
2230      case 0xa1: illegal(cpustate); break;
2231      case 0xa2: illegal(cpustate); break;
2232      case 0xa3: com_ix(cpustate); break;
2233      case 0xa4: lsr_ix(cpustate); break;
2234      case 0xa5: ror_ix(cpustate); break;
2235      case 0xa6: illegal(cpustate); break;
2236      case 0xa7: asr_ix(cpustate); break;
2237      case 0xa8: asl_ix(cpustate); break;
2238      case 0xa9: dec_ix(cpustate); break;
2239      case 0xaa: rol_ix(cpustate); break;
2240      case 0xab: illegal(cpustate); break;
2241      case 0xac: inc_ix(cpustate); break;
2242      case 0xad: jmp_ix(cpustate); break;
2243      case 0xae: tst_ix(cpustate); break;
2244      case 0xaf: clr_ix(cpustate); break;
2245      case 0xb0: neg_ex(cpustate); break;
2246      case 0xb1: illegal(cpustate); break;
2247      case 0xb2: illegal(cpustate); break;
2248      case 0xb3: com_ex(cpustate); break;
2249      case 0xb4: lsr_ex(cpustate); break;
2250      case 0xb5: ror_ex(cpustate); break;
2251      case 0xb6: illegal(cpustate); break;
2252      case 0xb7: asr_ex(cpustate); break;
2253      case 0xb8: asl_ex(cpustate); break;
2254      case 0xb9: dec_ex(cpustate); break;
2255      case 0xba: rol_ex(cpustate); break;
2256      case 0xbb: illegal(cpustate); break;
2257      case 0xbc: inc_ex(cpustate); break;
2258      case 0xbd: jmp_ex(cpustate); break;
2259      case 0xbe: tst_ex(cpustate); break;
2260      case 0xbf: clr_ex(cpustate); break;
2261      case 0xc0: subb_im(cpustate); break;
2262      case 0xc1: sbcb_im(cpustate); break;
2263      case 0xc2: cmpb_im(cpustate); break;
2264      case 0xc3: illegal(cpustate); break;
2265      case 0xc4: andb_im(cpustate); break;
2266      case 0xc5: ldb_im(cpustate); break;
2267      case 0xc6: bitb_im(cpustate); break;
2268      case 0xc7: stb_im(cpustate); break;
2269      case 0xc8: eorb_im(cpustate); break;
2270      case 0xc9: orb_im(cpustate); break;
2271      case 0xca: adcb_im(cpustate); break;
2272      case 0xcb: addb_im(cpustate); break;
2273      case 0xcc: illegal(cpustate); break;
2274      case 0xcd: ldx_im(cpustate); break;
2275      case 0xce: illegal(cpustate); break;
2276      case 0xcf: stx_im(cpustate); break;
2277      case 0xd0: subb_di(cpustate); break;
2278      case 0xd1: sbcb_di(cpustate); break;
2279      case 0xd2: cmpb_di(cpustate); break;
2280      case 0xd3: illegal(cpustate); break;
2281      case 0xd4: andb_di(cpustate); break;
2282      case 0xd5: ldb_di(cpustate); break;
2283      case 0xd6: bitb_di(cpustate); break;
2284      case 0xd7: stb_di(cpustate); break;
2285      case 0xd8: eorb_di(cpustate); break;
2286      case 0xd9: orb_di(cpustate); break;
2287      case 0xda: adcb_di(cpustate); break;
2288      case 0xdb: addb_di(cpustate); break;
2289      case 0xdc: illegal(cpustate); break;
2290      case 0xdd: ldx_di(cpustate); break;
2291      case 0xde: illegal(cpustate); break;
2292      case 0xdf: stx_di(cpustate); break;
2293      case 0xe0: subb_ix(cpustate); break;
2294      case 0xe1: sbcb_ix(cpustate); break;
2295      case 0xe2: cmpb_ix(cpustate); break;
2296      case 0xe3: illegal(cpustate); break;
2297      case 0xe4: andb_ix(cpustate); break;
2298      case 0xe5: ldb_ix(cpustate); break;
2299      case 0xe6: bitb_ix(cpustate); break;
2300      case 0xe7: stb_ix(cpustate); break;
2301      case 0xe8: eorb_ix(cpustate); break;
2302      case 0xe9: orb_ix(cpustate); break;
2303      case 0xea: adcb_ix(cpustate); break;
2304      case 0xeb: addb_ix(cpustate); break;
2305      case 0xec: adcx_im(cpustate); break; /* NSC8105 only */
2306      case 0xed: ldx_ix(cpustate); break;
2307      case 0xee: illegal(cpustate); break;
2308      case 0xef: stx_ix(cpustate); break;
2309      case 0xf0: subb_ex(cpustate); break;
2310      case 0xf1: sbcb_ex(cpustate); break;
2311      case 0xf2: cmpb_ex(cpustate); break;
2312      case 0xf3: illegal(cpustate); break;
2313      case 0xf4: andb_ex(cpustate); break;
2314      case 0xf5: ldb_ex(cpustate); break;
2315      case 0xf6: bitb_ex(cpustate); break;
2316      case 0xf7: stb_ex(cpustate); break;
2317      case 0xf8: eorb_ex(cpustate); break;
2318      case 0xf9: orb_ex(cpustate); break;
2319      case 0xfa: adcb_ex(cpustate); break;
2320      case 0xfb: addb_ex(cpustate); break;
2321      case 0xfc: addx_ex(cpustate); break;
2322      case 0xfd: ldx_ex(cpustate); break;
2323      case 0xfe: illegal(cpustate); break;
2324      case 0xff: stx_ex(cpustate); break;
2325   }
2326}
2327
2328/****************************************************************************
2329 * Execute cycles CPU cycles. Return number of cycles really executed
2330 ****************************************************************************/
2331static CPU_EXECUTE( nsc8105 )
2332{
2333   m6800_state *cpustate = get_safe_token(device);
2334   UINT8 ireg;
2335
2336   CHECK_IRQ_LINES(cpustate); /* HJB 990417 */
2337
2338   CLEANUP_COUNTERS();
2339
2340   do
2341   {
2342      if( cpustate->wai_state & M6800_WAI )
2343      {
2344         EAT_CYCLES;
2345      }
2346      else
2347      {
2348         pPPC = pPC;
2349         debugger_instruction_hook(device, PCD);
2350         ireg=M_RDOP(PCD);
2351         PC++;
2352         nsc8105_execute_one(cpustate, ireg);
2353         increment_counter(cpustate, cycles_nsc8105[ireg]);
2354      }
2355   } while( cpustate->icount>0 );
2356}
2357
2358
2359
23601201static READ8_HANDLER( m6803_internal_registers_r )
23611202{
23621203   m6800_state *cpustate = get_safe_token(space->cpu);
r8907r8908
27761617
27771618      /* --- the following bits of info are returned as pointers to data or functions --- */
27781619      case CPUINFO_FCT_INIT:                     info->init = CPU_INIT_NAME(m6801);            break;
2779      case CPUINFO_FCT_EXECUTE:                  info->execute = CPU_EXECUTE_NAME(m6803);         break;
27801620      case CPUINFO_FCT_DISASSEMBLE:               info->disassemble = CPU_DISASSEMBLE_NAME(m6801);         break;
27811621
27821622      /* --- the following bits of info are returned as NULL-terminated strings --- */
r8907r8908
28251665
28261666      /* --- the following bits of info are returned as pointers to data or functions --- */
28271667      case CPUINFO_FCT_INIT:                     info->init = CPU_INIT_NAME(m6803);            break;
2828      case CPUINFO_FCT_EXECUTE:                  info->execute = CPU_EXECUTE_NAME(m6803);         break;
28291668      case CPUINFO_FCT_DISASSEMBLE:               info->disassemble = CPU_DISASSEMBLE_NAME(m6803);         break;
28301669
28311670      case DEVINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = ADDRESS_MAP_NAME(m6803_mem); break;
r8907r8908
28761715
28771716      /* --- the following bits of info are returned as pointers to data or functions --- */
28781717      case CPUINFO_FCT_INIT:                     info->init = CPU_INIT_NAME(hd63701);            break;
2879      case CPUINFO_FCT_EXECUTE:                  info->execute = CPU_EXECUTE_NAME(hd63701);      break;
28801718      case CPUINFO_FCT_DISASSEMBLE:               info->disassemble = CPU_DISASSEMBLE_NAME(hd63701);      break;
28811719
28821720      /* --- the following bits of info are returned as NULL-terminated strings --- */
r8907r8908
29001738
29011739      /* --- the following bits of info are returned as pointers to data or functions --- */
29021740      case CPUINFO_FCT_INIT:                     info->init = CPU_INIT_NAME(nsc8105);            break;
2903      case CPUINFO_FCT_EXECUTE:                  info->execute = CPU_EXECUTE_NAME(nsc8105);      break;
29041741      case CPUINFO_FCT_DISASSEMBLE:               info->disassemble = CPU_DISASSEMBLE_NAME(nsc8105);      break;
29051742
29061743      /* --- the following bits of info are returned as NULL-terminated strings --- */

Previous 15994 Revisions Next


© 1998-2018 The MESS Team