mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
(MESS) Added skeleton driver for RCA COSMAC Microkit. [Bill Degnan, Curt Coder]
cosmac: Added the original CDP1801 CPU variant and rewrote the disassembler. [Curt Coder]
This commit is contained in:
parent
2955153f71
commit
725996afbd
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -6178,6 +6178,7 @@ src/mess/drivers/mephisto.c svneol=native#text/plain
|
||||
src/mess/drivers/merlin.c svneol=native#text/plain
|
||||
src/mess/drivers/mes.c svneol=native#text/plain
|
||||
src/mess/drivers/microdec.c svneol=native#text/plain
|
||||
src/mess/drivers/microkit.c svneol=native#text/plain
|
||||
src/mess/drivers/micronic.c svneol=native#text/plain
|
||||
src/mess/drivers/microtan.c svneol=native#text/plain
|
||||
src/mess/drivers/microvsn.c svneol=native#text/plain
|
||||
|
@ -1,173 +1,195 @@
|
||||
/*****************************************************************************
|
||||
*
|
||||
* disasm.c
|
||||
* portable cosmac cdp1802 emulator interface
|
||||
*
|
||||
* Copyright Peter Trauner, all rights reserved.
|
||||
*
|
||||
* - This source code is released as freeware for non-commercial purposes.
|
||||
* - You are free to use and redistribute this code in modified or
|
||||
* unmodified form, provided you list me in the credits.
|
||||
* - If you modify this source code, you must add a notice to each modified
|
||||
* source file that it has been changed. If you're a nice person, you
|
||||
* will clearly mark each change too. :)
|
||||
* - If you wish to use this for commercial purposes, please contact me at
|
||||
* peter.trauner@jk.uni-linz.ac.at
|
||||
* - The author of this copywritten work reserves the right to change the
|
||||
* terms of its usage and license at any time, including retroactively
|
||||
* - This entire notice must remain in the source code.
|
||||
*
|
||||
*****************************************************************************/
|
||||
/***************************************************************************
|
||||
|
||||
cosdasm.c
|
||||
|
||||
Simple RCA COSMAC disassembler.
|
||||
Written by Curt Coder
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "debugger.h"
|
||||
|
||||
#include "cosmac.h"
|
||||
|
||||
enum Adr
|
||||
enum
|
||||
{
|
||||
Ill,
|
||||
Imm,
|
||||
Imp,
|
||||
Imp2, // lownibble contains register number
|
||||
Imp3, // bit 0,1,2 1..7 contains n0,n1,n2 level
|
||||
Low, // only low byte of address specified
|
||||
Abs
|
||||
TYPE_1801,
|
||||
TYPE_1802
|
||||
};
|
||||
|
||||
static const struct { const char *mnemonic; Adr adr; } table[]={
|
||||
{ "IDL", Imp }, { "LDN", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
#define CDP1801_OPCODE(...) \
|
||||
sprintf(buffer, __VA_ARGS__)
|
||||
|
||||
{ "INC", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
#define CDP1802_OPCODE(...) \
|
||||
if (variant < TYPE_1802) sprintf(buffer, "illegal"); else sprintf(buffer, __VA_ARGS__)
|
||||
|
||||
{ "DEC", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
|
||||
{ "BR", Low }, { "BQ", Low }, { "BZ", Low }, { "BDF", Low },
|
||||
{ "B1", Low }, { "B2", Low }, { "B3", Low }, { "B4", Low },
|
||||
{ "SKP", Low }, { "BNQ", Low }, { "BNZ", Low }, { "BNF", Low },
|
||||
{ "BN1", Low }, { "BN2", Low }, { "BN3", Low }, { "BN4", Low },
|
||||
|
||||
{ "LDA", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "STR", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "IRX", Imp } ,{ "OUT", Imp3},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 } ,{ "INP", Imp3},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "RET", Imp }, { "DIS", Imp }, { "LDXA", Imp }, { "STXD", Imp },
|
||||
{ "ADC", Imp }, { "SDB", Imp }, { "SHRC", Imp }, { "SMB", Imp },
|
||||
{ "SAV", Imp }, { "MARK", Imp }, { "REQ", Imp }, { "SEQ", Imp },
|
||||
{ "ADCI", Imm }, { "SDBI", Imm }, { "SHLC", Imp }, { "SMBI", Imm },
|
||||
|
||||
|
||||
{ "GLO", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "GHI", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "PLO", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "PHI", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "LBR", Abs }, { "LBQ", Abs }, { "LBZ", Abs }, { "LBDF", Abs },
|
||||
{ "NOP", Imp }, { "LSNQ", Imp }, { "LSNZ", Imp }, { "LSNF", Imp },
|
||||
{ "LSKP", Imp }, { "LBNQ", Abs }, { "LBNZ", Abs }, { "LBNF", Abs },
|
||||
{ "LSIE", Imp }, { "LSQ", Imp }, { "LSZ", Imp }, { "LSDF", Imp },
|
||||
|
||||
{ "SEP", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "SEX", Imp2},{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
{ 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 },
|
||||
|
||||
{ "LDX", Imp }, { "OR", Imp }, { "AND", Imp }, { "XOR", Imp },
|
||||
{ "ADD", Imp }, { "SD", Imp }, { "SHR", Imp }, { "SM", Imp },
|
||||
{ "LDI", Imm }, { "ORI", Imm }, { "ANI", Imm }, { "XRI", Imm },
|
||||
{ "ADI", Imm }, { "SDI", Imm }, { "SHL", Imp }, { "SMI", Imm },
|
||||
|
||||
};
|
||||
|
||||
CPU_DISASSEMBLE( cosmac )
|
||||
static offs_t implied(const UINT8 opcode)
|
||||
{
|
||||
return opcode & 0x0f;
|
||||
}
|
||||
|
||||
static offs_t immediate(const UINT8 **opram)
|
||||
{
|
||||
return *(*opram)++;
|
||||
}
|
||||
|
||||
static offs_t short_branch(offs_t pc, const UINT8 **opram)
|
||||
{
|
||||
return (pc & 0xff00) | immediate(opram);
|
||||
}
|
||||
|
||||
static offs_t long_branch(const UINT8 **opram)
|
||||
{
|
||||
return (immediate(opram) << 8) | immediate(opram);
|
||||
}
|
||||
|
||||
static offs_t short_skip(offs_t pc)
|
||||
{
|
||||
return pc + 2;
|
||||
}
|
||||
|
||||
static offs_t long_skip(offs_t pc)
|
||||
{
|
||||
return pc + 3;
|
||||
}
|
||||
|
||||
static UINT32 disassemble(device_t *device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 variant)
|
||||
{
|
||||
const UINT8 *startram = opram;
|
||||
UINT32 flags = 0;
|
||||
int oldpc = pc;
|
||||
int oper;
|
||||
UINT16 absolut;
|
||||
oldpc&=0xffff;
|
||||
pc=oldpc;
|
||||
oper=oprom[pc++ - oldpc];
|
||||
|
||||
switch(oper&0xf0) {
|
||||
case 0:
|
||||
if (oper==0) {
|
||||
sprintf(buffer,"%-5s",table[oper].mnemonic);
|
||||
} else {
|
||||
sprintf(buffer,"%-5sR%.1x",table[(oper&0xf0)|1].mnemonic, oper&0x0f);
|
||||
}
|
||||
break;
|
||||
case 0xd0:
|
||||
flags = DASMFLAG_STEP_OVER;
|
||||
/* fall through */
|
||||
case 0x10:
|
||||
case 0x20:
|
||||
case 0x40:
|
||||
case 0x50:
|
||||
case 0x80:
|
||||
case 0x90:
|
||||
case 0xa0:
|
||||
case 0xb0:
|
||||
case 0xe0:
|
||||
sprintf(buffer,"%-5sR%.1x",table[oper&0xf0].mnemonic, oper&0x0f);
|
||||
break;
|
||||
default:
|
||||
switch(oper&0xf8) {
|
||||
case 0x60:
|
||||
if (oper==0x60) {
|
||||
sprintf(buffer,"%-5s",table[oper].mnemonic);
|
||||
} else {
|
||||
sprintf(buffer,"%-5s%d",table[(oper&0xf8)|1].mnemonic, oper&0x7);
|
||||
}
|
||||
break;
|
||||
case 0x68:
|
||||
sprintf(buffer,"%-5s%d",table[(oper&0xf8)|1].mnemonic, oper&0x7);
|
||||
break;
|
||||
default:
|
||||
switch (table[oper].adr) {
|
||||
case Imp:
|
||||
sprintf(buffer,"%-5s",table[oper].mnemonic);
|
||||
if (oper == 0x70 || oper == 0x71)
|
||||
flags = DASMFLAG_STEP_OUT;
|
||||
break;
|
||||
case Imm:
|
||||
sprintf(buffer,"%-5s#%.2x",table[oper].mnemonic,oprom[pc++ - oldpc]);
|
||||
break;
|
||||
case Low:
|
||||
absolut=oprom[pc++ - oldpc];
|
||||
absolut|=pc&0xff00;
|
||||
sprintf(buffer,"%-5s%.4x",table[oper].mnemonic,absolut);
|
||||
break;
|
||||
case Abs:
|
||||
absolut=oprom[pc++ - oldpc]<<8;
|
||||
absolut|=oprom[pc++ - oldpc];
|
||||
sprintf(buffer,"%-5s%.4x",table[oper].mnemonic,absolut);
|
||||
break;
|
||||
default:
|
||||
sprintf(buffer,"%-5s%.2x","ill",oper);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
opram++;
|
||||
UINT8 opcode = *oprom++;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case 0x00: CDP1801_OPCODE("IDL"); break;
|
||||
case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
|
||||
case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f:
|
||||
CDP1801_OPCODE("LDN R%01X", implied(opcode)); break;
|
||||
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f:
|
||||
CDP1801_OPCODE("INC R%01X", implied(opcode)); break;
|
||||
case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
|
||||
case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x2c: case 0x2d: case 0x2e: case 0x2f:
|
||||
CDP1801_OPCODE("DEC R%01X", implied(opcode)); break;
|
||||
case 0x30: CDP1801_OPCODE("BR %04X", short_branch(pc, &opram)); break;
|
||||
case 0x32: CDP1801_OPCODE("BZ %04X", short_branch(pc, &opram)); break;
|
||||
case 0x33: CDP1801_OPCODE("BDF %04X", short_branch(pc, &opram)); break;
|
||||
case 0x34: CDP1801_OPCODE("B1 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x35: CDP1801_OPCODE("B2 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x36: CDP1801_OPCODE("B3 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x37: CDP1801_OPCODE("B4 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x38: CDP1801_OPCODE("SKP %04X", short_skip(pc)); break;
|
||||
case 0x3a: CDP1801_OPCODE("BNZ %04X", short_branch(pc, &opram)); break;
|
||||
case 0x3b: CDP1801_OPCODE("BNF %04X", short_branch(pc, &opram)); break;
|
||||
case 0x3c: CDP1801_OPCODE("BN1 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x3d: CDP1801_OPCODE("BN2 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x3e: CDP1801_OPCODE("BN3 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x3f: CDP1801_OPCODE("BN4 %04X", short_branch(pc, &opram)); break;
|
||||
case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
|
||||
case 0x48: case 0x49: case 0x4a: case 0x4b: case 0x4c: case 0x4d: case 0x4e: case 0x4f:
|
||||
CDP1801_OPCODE("LDA R%01X", implied(opcode)); break;
|
||||
case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
|
||||
case 0x58: case 0x59: case 0x5a: case 0x5b: case 0x5c: case 0x5d: case 0x5e: case 0x5f:
|
||||
CDP1801_OPCODE("STR R%01X", implied(opcode)); break;
|
||||
case 0x61: CDP1801_OPCODE("OUT 1"); break;
|
||||
case 0x62: CDP1801_OPCODE("OUT 2"); break;
|
||||
case 0x63: CDP1801_OPCODE("OUT 3"); break;
|
||||
case 0x64: CDP1801_OPCODE("OUT 4"); break;
|
||||
case 0x65: CDP1801_OPCODE("OUT 5"); break;
|
||||
case 0x66: CDP1801_OPCODE("OUT 6"); break;
|
||||
case 0x67: CDP1801_OPCODE("OUT 7"); break;
|
||||
case 0x69: CDP1801_OPCODE("INP 1"); break;
|
||||
case 0x6a: CDP1801_OPCODE("INP 2"); break;
|
||||
case 0x6b: CDP1801_OPCODE("INP 3"); break;
|
||||
case 0x6c: CDP1801_OPCODE("INP 4"); break;
|
||||
case 0x6d: CDP1801_OPCODE("INP 5"); break;
|
||||
case 0x6e: CDP1801_OPCODE("INP 6"); break;
|
||||
case 0x6f: CDP1801_OPCODE("INP 7"); break;
|
||||
case 0x70: CDP1801_OPCODE("RET"); flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x71: CDP1801_OPCODE("DIS"); flags = DASMFLAG_STEP_OUT; break;
|
||||
case 0x78: CDP1801_OPCODE("SAV"); break;
|
||||
case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0x87:
|
||||
case 0x88: case 0x89: case 0x8a: case 0x8b: case 0x8c: case 0x8d: case 0x8e: case 0x8f:
|
||||
CDP1801_OPCODE("GLO R%01X", implied(opcode)); break;
|
||||
case 0x90: case 0x91: case 0x92: case 0x93: case 0x94: case 0x95: case 0x96: case 0x97:
|
||||
case 0x98: case 0x99: case 0x9a: case 0x9b: case 0x9c: case 0x9d: case 0x9e: case 0x9f:
|
||||
CDP1801_OPCODE("GHI R%01X", implied(opcode)); break;
|
||||
case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
|
||||
case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
|
||||
CDP1801_OPCODE("PLO R%01X", implied(opcode)); break;
|
||||
case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
|
||||
case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf:
|
||||
CDP1801_OPCODE("PHI R%01X", implied(opcode)); break;
|
||||
case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
|
||||
case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
|
||||
CDP1801_OPCODE("SEP R%01X", implied(opcode)); flags = DASMFLAG_STEP_OVER; break;
|
||||
case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
|
||||
case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
|
||||
CDP1801_OPCODE("SEX R%01X", implied(opcode)); break;
|
||||
case 0xf0: CDP1801_OPCODE("LDX"); break;
|
||||
case 0xf1: CDP1801_OPCODE("OR"); break;
|
||||
case 0xf2: CDP1801_OPCODE("AND"); break;
|
||||
case 0xf3: CDP1801_OPCODE("XOR"); break;
|
||||
case 0xf4: CDP1801_OPCODE("ADD"); break;
|
||||
case 0xf5: CDP1801_OPCODE("SD"); break;
|
||||
case 0xf6: CDP1801_OPCODE("SHR"); break;
|
||||
case 0xf7: CDP1801_OPCODE("SM"); break;
|
||||
case 0xf8: CDP1801_OPCODE("LDI #%02X", immediate(&opram)); break;
|
||||
case 0xf9: CDP1801_OPCODE("ORI #%02X", immediate(&opram)); break;
|
||||
case 0xfa: CDP1801_OPCODE("ANI #%02X", immediate(&opram)); break;
|
||||
case 0xfb: CDP1801_OPCODE("XRI #%02X", immediate(&opram)); break;
|
||||
case 0xfc: CDP1801_OPCODE("ADI #%02X", immediate(&opram)); break;
|
||||
case 0xfd: CDP1801_OPCODE("SDI #%02X", immediate(&opram)); break;
|
||||
case 0xff: CDP1801_OPCODE("SMI #%02X", immediate(&opram)); break;
|
||||
// CDP1802
|
||||
case 0x31: CDP1802_OPCODE("BQ %04X", short_branch(pc, &opram)); break;
|
||||
case 0x39: CDP1802_OPCODE("BNQ %04X", short_branch(pc, &opram)); break;
|
||||
case 0x60: CDP1802_OPCODE("IRX"); break;
|
||||
case 0x72: CDP1802_OPCODE("LDXA"); break;
|
||||
case 0x73: CDP1802_OPCODE("STXD"); break;
|
||||
case 0x74: CDP1802_OPCODE("ADC"); break;
|
||||
case 0x75: CDP1802_OPCODE("SDB"); break;
|
||||
case 0x76: CDP1802_OPCODE("SHRC"); break;
|
||||
case 0x77: CDP1802_OPCODE("SMB"); break;
|
||||
case 0x79: CDP1802_OPCODE("MARK"); break;
|
||||
case 0x7a: CDP1802_OPCODE("REQ"); break;
|
||||
case 0x7b: CDP1802_OPCODE("SEQ"); break;
|
||||
case 0x7c: CDP1802_OPCODE("ADCI #%02X", immediate(&opram)); break;
|
||||
case 0x7d: CDP1802_OPCODE("SDBI #%02X", immediate(&opram)); break;
|
||||
case 0x7e: CDP1802_OPCODE("SHLC"); break;
|
||||
case 0x7f: CDP1802_OPCODE("SMBI #%02X", immediate(&opram)); break;
|
||||
case 0xc0: CDP1802_OPCODE("LBR %04X", long_branch(&opram)); break;
|
||||
case 0xc1: CDP1802_OPCODE("LBQ %04X", long_branch(&opram)); break;
|
||||
case 0xc2: CDP1802_OPCODE("LBZ %04X", long_branch(&opram)); break;
|
||||
case 0xc3: CDP1802_OPCODE("LBDF %04X", long_branch(&opram)); break;
|
||||
case 0xc4: CDP1802_OPCODE("NOP"); break;
|
||||
case 0xc5: CDP1802_OPCODE("LSNQ %04X", long_skip(pc)); break;
|
||||
case 0xc6: CDP1802_OPCODE("LSNZ %04X", long_skip(pc)); break;
|
||||
case 0xc7: CDP1802_OPCODE("LSNF %04X", long_skip(pc)); break;
|
||||
case 0xc8: CDP1802_OPCODE("LSKP %04X", long_skip(pc)); break;
|
||||
case 0xc9: CDP1802_OPCODE("LBNQ %04X", long_skip(pc)); break;
|
||||
case 0xca: CDP1802_OPCODE("LBNZ %04X", long_skip(pc)); break;
|
||||
case 0xcb: CDP1802_OPCODE("LBNF %04X", long_skip(pc)); break;
|
||||
case 0xcc: CDP1802_OPCODE("LSIE %04X", long_skip(pc)); break;
|
||||
case 0xcd: CDP1802_OPCODE("LSQ %04X", long_skip(pc)); break;
|
||||
case 0xce: CDP1802_OPCODE("LSZ %04X", long_skip(pc)); break;
|
||||
case 0xcf: CDP1802_OPCODE("LSDF %04X", long_skip(pc)); break;
|
||||
case 0xfe: CDP1802_OPCODE("SHL"); break;
|
||||
//
|
||||
default: CDP1801_OPCODE("illegal"); break;
|
||||
}
|
||||
|
||||
return (pc-oldpc) | flags | DASMFLAG_SUPPORTED;
|
||||
return (opram - startram) | flags | DASMFLAG_SUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE( cdp1801 )
|
||||
{
|
||||
return disassemble(device, buffer, pc, oprom, opram, TYPE_1801);
|
||||
}
|
||||
|
||||
|
||||
CPU_DISASSEMBLE( cdp1802 )
|
||||
{
|
||||
return disassemble(device, buffer, pc, oprom, opram, TYPE_1802);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/**********************************************************************
|
||||
|
||||
RCA "COSMAC" CPU emulation
|
||||
RCA COSMAC CPU emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
@ -12,16 +12,6 @@
|
||||
#include "cosmac.h"
|
||||
#include "coreutil.h"
|
||||
|
||||
|
||||
/*
|
||||
|
||||
TODO:
|
||||
|
||||
- divide clock by 8
|
||||
- min cycles -> 2 and 3
|
||||
|
||||
*/
|
||||
|
||||
// permit our enums to be saved
|
||||
ALLOW_SAVE_TYPE(cosmac_device::cosmac_mode);
|
||||
ALLOW_SAVE_TYPE(cosmac_device::cosmac_state);
|
||||
@ -88,89 +78,182 @@ const cosmac_state_code COSMAC_STATE_CODE[] =
|
||||
// STATIC OPCODE TABLES
|
||||
//**************************************************************************
|
||||
|
||||
const cosmac_device::ophandler cosmac_device::s_opcodetable[256] =
|
||||
const cosmac_device::ophandler cdp1801_device::s_opcodetable[256] =
|
||||
{
|
||||
&cosmac_device::idl, &cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn,
|
||||
&cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn,
|
||||
&cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn,
|
||||
&cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn, &cosmac_device::ldn,
|
||||
&cdp1801_device::idl, &cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn,
|
||||
&cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn,
|
||||
&cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn,
|
||||
&cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn, &cdp1801_device::ldn,
|
||||
|
||||
&cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc,
|
||||
&cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc,
|
||||
&cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc,
|
||||
&cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc, &cosmac_device::inc,
|
||||
&cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc,
|
||||
&cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc,
|
||||
&cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc,
|
||||
&cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc, &cdp1801_device::inc,
|
||||
|
||||
&cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec,
|
||||
&cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec,
|
||||
&cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec,
|
||||
&cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec, &cosmac_device::dec,
|
||||
&cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec,
|
||||
&cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec,
|
||||
&cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec,
|
||||
&cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec, &cdp1801_device::dec,
|
||||
|
||||
&cosmac_device::br, &cosmac_device::bq, &cosmac_device::bz, &cosmac_device::bdf,
|
||||
&cosmac_device::b, &cosmac_device::b, &cosmac_device::b, &cosmac_device::b,
|
||||
&cosmac_device::nbr, &cosmac_device::bnq, &cosmac_device::bnz, &cosmac_device::bnf,
|
||||
&cosmac_device::bn, &cosmac_device::bn, &cosmac_device::bn, &cosmac_device::bn,
|
||||
&cdp1801_device::br, &cdp1801_device::und, &cdp1801_device::bz, &cdp1801_device::bdf,
|
||||
&cdp1801_device::b, &cdp1801_device::b, &cdp1801_device::b, &cdp1801_device::b,
|
||||
&cdp1801_device::nbr, &cdp1801_device::und, &cdp1801_device::bnz, &cdp1801_device::bnf,
|
||||
&cdp1801_device::bn, &cdp1801_device::bn, &cdp1801_device::bn, &cdp1801_device::bn,
|
||||
|
||||
&cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda,
|
||||
&cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda,
|
||||
&cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda,
|
||||
&cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda, &cosmac_device::lda,
|
||||
&cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda,
|
||||
&cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda,
|
||||
&cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda,
|
||||
&cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda, &cdp1801_device::lda,
|
||||
|
||||
&cosmac_device::str, &cosmac_device::str, &cosmac_device::str, &cosmac_device::str,
|
||||
&cosmac_device::str, &cosmac_device::str, &cosmac_device::str, &cosmac_device::str,
|
||||
&cosmac_device::str, &cosmac_device::str, &cosmac_device::str, &cosmac_device::str,
|
||||
&cosmac_device::str, &cosmac_device::str, &cosmac_device::str, &cosmac_device::str,
|
||||
&cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str,
|
||||
&cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str,
|
||||
&cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str,
|
||||
&cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str, &cdp1801_device::str,
|
||||
|
||||
&cosmac_device::irx, &cosmac_device::out, &cosmac_device::out, &cosmac_device::out,
|
||||
&cosmac_device::out, &cosmac_device::out, &cosmac_device::out, &cosmac_device::out,
|
||||
&cosmac_device::inp, &cosmac_device::inp, &cosmac_device::inp, &cosmac_device::inp,
|
||||
&cosmac_device::inp, &cosmac_device::inp, &cosmac_device::inp, &cosmac_device::inp,
|
||||
&cdp1801_device::und, &cdp1801_device::out, &cdp1801_device::out, &cdp1801_device::out,
|
||||
&cdp1801_device::out, &cdp1801_device::out, &cdp1801_device::out, &cdp1801_device::out,
|
||||
&cdp1801_device::und, &cdp1801_device::inp, &cdp1801_device::inp, &cdp1801_device::inp,
|
||||
&cdp1801_device::inp, &cdp1801_device::inp, &cdp1801_device::inp, &cdp1801_device::inp,
|
||||
|
||||
&cosmac_device::ret, &cosmac_device::dis, &cosmac_device::ldxa, &cosmac_device::stxd,
|
||||
&cosmac_device::adc, &cosmac_device::sdb, &cosmac_device::shrc, &cosmac_device::smb,
|
||||
&cosmac_device::sav, &cosmac_device::mark, &cosmac_device::req, &cosmac_device::seq,
|
||||
&cosmac_device::adci, &cosmac_device::sdbi, &cosmac_device::shlc, &cosmac_device::smbi,
|
||||
&cdp1801_device::ret, &cdp1801_device::dis, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::sav, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
|
||||
&cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo,
|
||||
&cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo,
|
||||
&cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo,
|
||||
&cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo, &cosmac_device::glo,
|
||||
&cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo,
|
||||
&cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo,
|
||||
&cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo,
|
||||
&cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo, &cdp1801_device::glo,
|
||||
|
||||
&cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi,
|
||||
&cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi,
|
||||
&cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi,
|
||||
&cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi, &cosmac_device::ghi,
|
||||
&cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi,
|
||||
&cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi,
|
||||
&cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi,
|
||||
&cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi, &cdp1801_device::ghi,
|
||||
|
||||
&cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo,
|
||||
&cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo,
|
||||
&cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo,
|
||||
&cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo, &cosmac_device::plo,
|
||||
&cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo,
|
||||
&cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo,
|
||||
&cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo,
|
||||
&cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo, &cdp1801_device::plo,
|
||||
|
||||
&cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi,
|
||||
&cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi,
|
||||
&cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi,
|
||||
&cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi, &cosmac_device::phi,
|
||||
&cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi,
|
||||
&cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi,
|
||||
&cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi,
|
||||
&cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi, &cdp1801_device::phi,
|
||||
|
||||
&cosmac_device::lbr, &cosmac_device::lbq, &cosmac_device::lbz, &cosmac_device::lbdf,
|
||||
&cosmac_device::nop, &cosmac_device::lsnq, &cosmac_device::lsnz, &cosmac_device::lsnf,
|
||||
&cosmac_device::nlbr, &cosmac_device::lbnq, &cosmac_device::lbnz, &cosmac_device::lbnf,
|
||||
&cosmac_device::lsie, &cosmac_device::lsq, &cosmac_device::lsz, &cosmac_device::lsdf,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
&cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und, &cdp1801_device::und,
|
||||
|
||||
&cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep,
|
||||
&cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep,
|
||||
&cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep,
|
||||
&cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep, &cosmac_device::sep,
|
||||
&cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep,
|
||||
&cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep,
|
||||
&cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep,
|
||||
&cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep, &cdp1801_device::sep,
|
||||
|
||||
&cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex,
|
||||
&cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex,
|
||||
&cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex,
|
||||
&cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex, &cosmac_device::sex,
|
||||
&cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex,
|
||||
&cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex,
|
||||
&cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex,
|
||||
&cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex, &cdp1801_device::sex,
|
||||
|
||||
&cosmac_device::ldx, &cosmac_device::_or, &cosmac_device::_and, &cosmac_device::_xor,
|
||||
&cosmac_device::add, &cosmac_device::sd, &cosmac_device::shr, &cosmac_device::sm,
|
||||
&cosmac_device::ldi, &cosmac_device::ori, &cosmac_device::ani, &cosmac_device::xri,
|
||||
&cosmac_device::adi, &cosmac_device::sdi, &cosmac_device::shl, &cosmac_device::smi
|
||||
&cdp1801_device::ldx, &cdp1801_device::_or, &cdp1801_device::_and, &cdp1801_device::_xor,
|
||||
&cdp1801_device::add, &cdp1801_device::sd, &cdp1801_device::shr, &cdp1801_device::sm,
|
||||
&cdp1801_device::ldi, &cdp1801_device::ori, &cdp1801_device::ani, &cdp1801_device::xri,
|
||||
&cdp1801_device::adi, &cdp1801_device::sdi, &cdp1801_device::und, &cdp1801_device::smi
|
||||
};
|
||||
|
||||
cosmac_device::ophandler cdp1801_device::get_ophandler(UINT8 opcode)
|
||||
{
|
||||
return s_opcodetable[opcode];
|
||||
}
|
||||
|
||||
const cosmac_device::ophandler cdp1802_device::s_opcodetable[256] =
|
||||
{
|
||||
&cdp1802_device::idl, &cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn,
|
||||
&cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn,
|
||||
&cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn,
|
||||
&cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn, &cdp1802_device::ldn,
|
||||
|
||||
&cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc,
|
||||
&cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc,
|
||||
&cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc,
|
||||
&cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc, &cdp1802_device::inc,
|
||||
|
||||
&cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec,
|
||||
&cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec,
|
||||
&cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec,
|
||||
&cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec, &cdp1802_device::dec,
|
||||
|
||||
&cdp1802_device::br, &cdp1802_device::bq, &cdp1802_device::bz, &cdp1802_device::bdf,
|
||||
&cdp1802_device::b, &cdp1802_device::b, &cdp1802_device::b, &cdp1802_device::b,
|
||||
&cdp1802_device::nbr, &cdp1802_device::bnq, &cdp1802_device::bnz, &cdp1802_device::bnf,
|
||||
&cdp1802_device::bn, &cdp1802_device::bn, &cdp1802_device::bn, &cdp1802_device::bn,
|
||||
|
||||
&cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda,
|
||||
&cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda,
|
||||
&cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda,
|
||||
&cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda, &cdp1802_device::lda,
|
||||
|
||||
&cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str,
|
||||
&cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str,
|
||||
&cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str,
|
||||
&cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str, &cdp1802_device::str,
|
||||
|
||||
&cdp1802_device::irx, &cdp1802_device::out, &cdp1802_device::out, &cdp1802_device::out,
|
||||
&cdp1802_device::out, &cdp1802_device::out, &cdp1802_device::out, &cdp1802_device::out,
|
||||
&cdp1802_device::inp, &cdp1802_device::inp, &cdp1802_device::inp, &cdp1802_device::inp,
|
||||
&cdp1802_device::inp, &cdp1802_device::inp, &cdp1802_device::inp, &cdp1802_device::inp,
|
||||
|
||||
&cdp1802_device::ret, &cdp1802_device::dis, &cdp1802_device::ldxa, &cdp1802_device::stxd,
|
||||
&cdp1802_device::adc, &cdp1802_device::sdb, &cdp1802_device::shrc, &cdp1802_device::smb,
|
||||
&cdp1802_device::sav, &cdp1802_device::mark, &cdp1802_device::req, &cdp1802_device::seq,
|
||||
&cdp1802_device::adci, &cdp1802_device::sdbi, &cdp1802_device::shlc, &cdp1802_device::smbi,
|
||||
|
||||
&cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo,
|
||||
&cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo,
|
||||
&cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo,
|
||||
&cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo, &cdp1802_device::glo,
|
||||
|
||||
&cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi,
|
||||
&cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi,
|
||||
&cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi,
|
||||
&cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi, &cdp1802_device::ghi,
|
||||
|
||||
&cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo,
|
||||
&cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo,
|
||||
&cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo,
|
||||
&cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo, &cdp1802_device::plo,
|
||||
|
||||
&cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi,
|
||||
&cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi,
|
||||
&cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi,
|
||||
&cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi, &cdp1802_device::phi,
|
||||
|
||||
&cdp1802_device::lbr, &cdp1802_device::lbq, &cdp1802_device::lbz, &cdp1802_device::lbdf,
|
||||
&cdp1802_device::nop, &cdp1802_device::lsnq, &cdp1802_device::lsnz, &cdp1802_device::lsnf,
|
||||
&cdp1802_device::nlbr, &cdp1802_device::lbnq, &cdp1802_device::lbnz, &cdp1802_device::lbnf,
|
||||
&cdp1802_device::lsie, &cdp1802_device::lsq, &cdp1802_device::lsz, &cdp1802_device::lsdf,
|
||||
|
||||
&cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep,
|
||||
&cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep,
|
||||
&cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep,
|
||||
&cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep, &cdp1802_device::sep,
|
||||
|
||||
&cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex,
|
||||
&cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex,
|
||||
&cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex,
|
||||
&cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex, &cdp1802_device::sex,
|
||||
|
||||
&cdp1802_device::ldx, &cdp1802_device::_or, &cdp1802_device::_and, &cdp1802_device::_xor,
|
||||
&cdp1802_device::add, &cdp1802_device::sd, &cdp1802_device::shr, &cdp1802_device::sm,
|
||||
&cdp1802_device::ldi, &cdp1802_device::ori, &cdp1802_device::ani, &cdp1802_device::xri,
|
||||
&cdp1802_device::adi, &cdp1802_device::sdi, &cdp1802_device::shl, &cdp1802_device::smi
|
||||
};
|
||||
|
||||
cosmac_device::ophandler cdp1802_device::get_ophandler(UINT8 opcode)
|
||||
{
|
||||
return s_opcodetable[opcode];
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -178,23 +261,24 @@ const cosmac_device::ophandler cosmac_device::s_opcodetable[256] =
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
const device_type COSMAC = &device_creator<cosmac_device>;
|
||||
const device_type CDP1801 = &device_creator<cdp1801_device>;
|
||||
const device_type CDP1802 = &device_creator<cdp1802_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cosmac_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
cosmac_device::cosmac_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: cpu_device(mconfig, COSMAC, "COSMAC", tag, owner, clock),
|
||||
cosmac_device::cosmac_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
|
||||
: cpu_device(mconfig, type, name, tag, owner, clock),
|
||||
m_program_config("program", ENDIANNESS_LITTLE, 8, 16),
|
||||
m_io_config("io", ENDIANNESS_LITTLE, 8, 3),
|
||||
m_op(0),
|
||||
m_state(COSMAC_STATE_1_RESET),
|
||||
m_mode(COSMAC_MODE_RESET),
|
||||
m_irq(0),
|
||||
m_dmain(0),
|
||||
m_dmaout(0),
|
||||
m_irq(CLEAR_LINE),
|
||||
m_dmain(CLEAR_LINE),
|
||||
m_dmaout(CLEAR_LINE),
|
||||
m_program(NULL),
|
||||
m_io(NULL),
|
||||
m_direct(NULL)
|
||||
@ -204,6 +288,26 @@ cosmac_device::cosmac_device(const machine_config &mconfig, const char *tag, dev
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cdp1801_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
cdp1801_device::cdp1801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: cosmac_device(mconfig, CDP1801, "CDP1801", tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cdp1802_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
cdp1802_device::cdp1802_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: cosmac_device(mconfig, CDP1802, "CDP1802", tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
@ -420,12 +524,17 @@ UINT32 cosmac_device::disasm_max_opcode_bytes() const
|
||||
// helper function
|
||||
//-------------------------------------------------
|
||||
|
||||
offs_t cosmac_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
|
||||
offs_t cdp1801_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
|
||||
{
|
||||
extern CPU_DISASSEMBLE( cosmac );
|
||||
return CPU_DISASSEMBLE_NAME(cosmac)(this, buffer, pc, oprom, opram, options);
|
||||
extern CPU_DISASSEMBLE( cdp1801 );
|
||||
return CPU_DISASSEMBLE_NAME( cdp1801 )(this, buffer, pc, oprom, opram, options);
|
||||
}
|
||||
|
||||
offs_t cdp1802_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
|
||||
{
|
||||
extern CPU_DISASSEMBLE( cdp1802 );
|
||||
return CPU_DISASSEMBLE_NAME( cdp1802 )(this, buffer, pc, oprom, opram, options);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -821,7 +930,7 @@ inline void cosmac_device::initialize()
|
||||
inline void cosmac_device::execute_instruction()
|
||||
{
|
||||
// parse the instruction
|
||||
(this->*s_opcodetable[m_op])();
|
||||
(this->*this->get_ophandler(m_op))();
|
||||
|
||||
m_icount -= CLOCKS_EXECUTE;
|
||||
|
||||
@ -1107,6 +1216,7 @@ void cosmac_device::lsie() { long_skip(IE); }
|
||||
// control instructions opcode handlers
|
||||
void cosmac_device::idl() { /* idle */ }
|
||||
void cosmac_device::nop() { m_icount -= CLOCKS_EXECUTE; }
|
||||
void cosmac_device::und() { /* undefined opcode in CDP1801 */ m_icount -= CLOCKS_EXECUTE; }
|
||||
void cosmac_device::sep() { P = N; }
|
||||
void cosmac_device::sex() { X = N; }
|
||||
void cosmac_device::seq() { set_q_flag(1); }
|
||||
|
@ -1,11 +1,49 @@
|
||||
/**********************************************************************
|
||||
|
||||
RCA "COSMAC" CPU emulation
|
||||
RCA COSMAC CPU emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************
|
||||
_____ _____
|
||||
Vcc 1 |* \_/ | 40 Vdd
|
||||
_BUS 3 2 | | 39 _BUS 4
|
||||
_BUS 2 3 | | 38 _BUS 5
|
||||
_BUS 1 4 | | 37 _BUS 6
|
||||
_BUS 0 5 | | 36 _BUS 7
|
||||
_N0 6 | | 35 Vss
|
||||
_N1 7 | | 34 _EF1
|
||||
_N2 8 | | 33 _EF2
|
||||
_N3 9 | | 32 _EF3
|
||||
* 10 | CDP1801U | 31 _EF4
|
||||
* 11 | | 30 _DMA OUT
|
||||
* 12 | | 29 _INTERRUPT
|
||||
* 13 | | 28 _DMA IN
|
||||
* 14 | | 27 _CLEAR
|
||||
_CLOCK 15 | | 26 _LOAD
|
||||
_TPB 16 | | 25 _SC2
|
||||
_TPA 17 | | 24 _SC1
|
||||
* 18 | | 23 _SC0
|
||||
MWR 19 | | 22 _M READ
|
||||
Vss 20 |_____________| 21 *
|
||||
|
||||
_____ _____
|
||||
Vcc 1 |* \_/ | 28 Vdd
|
||||
_BUS 4 2 | | 27 _BUS 3
|
||||
_BUS 5 3 | | 26 _BUS 2
|
||||
_BUS 6 4 | | 25 _BUS 1
|
||||
_BUS 7 5 | | 24 _BUS 0
|
||||
_MA0 6 | | 23 *
|
||||
_MA1 7 | CDP1801C | 22 _TPB
|
||||
_MA2 8 | | 21 *
|
||||
_MA3 9 | | 20 *
|
||||
_MA4 10 | | 19 *
|
||||
_MA5 11 | | 18 *
|
||||
_MA6 12 | | 17 *
|
||||
_MA7 13 | | 16 *
|
||||
Vss 14 |_____________| 15 _CLEAR
|
||||
|
||||
_____ _____
|
||||
CLOCK 1 |* \_/ | 40 Vdd
|
||||
_WAIT 2 | | 39 _XTAL
|
||||
@ -144,7 +182,7 @@ class cosmac_device : public cpu_device,
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cosmac_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
cosmac_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// public interfaces
|
||||
offs_t get_memory_address();
|
||||
@ -173,7 +211,6 @@ protected:
|
||||
// device_disasm_interface overrides
|
||||
virtual UINT32 disasm_min_opcode_bytes() const;
|
||||
virtual UINT32 disasm_max_opcode_bytes() const;
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
|
||||
|
||||
// helpers
|
||||
inline UINT8 read_opcode(offs_t pc);
|
||||
@ -290,6 +327,7 @@ protected:
|
||||
// control instructions opcode handlers
|
||||
void idl();
|
||||
void nop();
|
||||
void und();
|
||||
void sep();
|
||||
void sex();
|
||||
void seq();
|
||||
@ -373,13 +411,49 @@ protected:
|
||||
|
||||
// opcode/condition tables
|
||||
typedef void (cosmac_device::*ophandler)();
|
||||
virtual cosmac_device::ophandler get_ophandler(UINT8 opcode) = 0;
|
||||
};
|
||||
|
||||
|
||||
// ======================> cdp1801_device
|
||||
|
||||
class cdp1801_device : public cosmac_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cdp1801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
protected:
|
||||
// device_disasm_interface overrides
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
|
||||
|
||||
virtual cosmac_device::ophandler get_ophandler(UINT8 opcode);
|
||||
|
||||
static const ophandler s_opcodetable[256];
|
||||
};
|
||||
|
||||
|
||||
// ======================> cdp1802_device
|
||||
|
||||
class cdp1802_device : public cosmac_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cdp1802_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
protected:
|
||||
// device_disasm_interface overrides
|
||||
virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
|
||||
|
||||
virtual cosmac_device::ophandler get_ophandler(UINT8 opcode);
|
||||
|
||||
static const ophandler s_opcodetable[256];
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type COSMAC;
|
||||
extern const device_type CDP1801;
|
||||
extern const device_type CDP1802;
|
||||
|
||||
|
||||
#endif /* __COSMAC_H__ */
|
||||
|
@ -460,7 +460,7 @@ void cidelsa_state::machine_reset()
|
||||
|
||||
static MACHINE_CONFIG_START( destryer, cidelsa_state )
|
||||
/* basic system hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DESTRYER_CHR1)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, DESTRYER_CHR1)
|
||||
MCFG_CPU_PROGRAM_MAP(destryer_map)
|
||||
MCFG_CPU_IO_MAP(destryer_io_map)
|
||||
MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
|
||||
@ -472,7 +472,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( destryera, cidelsa_state )
|
||||
/* basic system hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DESTRYER_CHR1)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, DESTRYER_CHR1)
|
||||
MCFG_CPU_PROGRAM_MAP(destryera_map)
|
||||
MCFG_CPU_IO_MAP(destryer_io_map)
|
||||
MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
|
||||
@ -484,7 +484,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( altair, cidelsa_state )
|
||||
/* basic system hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, ALTAIR_CHR1)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, ALTAIR_CHR1)
|
||||
MCFG_CPU_PROGRAM_MAP(altair_map)
|
||||
MCFG_CPU_IO_MAP(altair_io_map)
|
||||
MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
|
||||
@ -502,7 +502,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( draco, draco_state )
|
||||
/* basic system hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, DRACO_CHR1)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, DRACO_CHR1)
|
||||
MCFG_CPU_PROGRAM_MAP(draco_map)
|
||||
MCFG_CPU_IO_MAP(draco_io_map)
|
||||
MCFG_CPU_CONFIG(cidelsa_cdp1802_config)
|
||||
|
@ -61,7 +61,7 @@ static COSMAC_INTERFACE( cdp1802_config )
|
||||
|
||||
static MACHINE_CONFIG_START( play_1, play_1_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", COSMAC, 400000)
|
||||
MCFG_CPU_ADD("maincpu", CDP1802, 400000)
|
||||
MCFG_CPU_PROGRAM_MAP(play_1_map)
|
||||
MCFG_CPU_CONFIG(cdp1802_config)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -58,7 +58,7 @@ static COSMAC_INTERFACE( cdp1802_config )
|
||||
|
||||
static MACHINE_CONFIG_START( play_2, play_2_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", COSMAC, 2950000)
|
||||
MCFG_CPU_ADD("maincpu", CDP1802, 2950000)
|
||||
MCFG_CPU_PROGRAM_MAP(play_2_map)
|
||||
MCFG_CPU_CONFIG(cdp1802_config)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -62,7 +62,7 @@ static COSMAC_INTERFACE( cdp1802_config )
|
||||
|
||||
static MACHINE_CONFIG_START( play_3, play_3_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", COSMAC, 2950000)
|
||||
MCFG_CPU_ADD("maincpu", CDP1802, 2950000)
|
||||
MCFG_CPU_PROGRAM_MAP(play_3_map)
|
||||
MCFG_CPU_CONFIG(cdp1802_config)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -59,7 +59,7 @@ static COSMAC_INTERFACE( cdp1802_config )
|
||||
|
||||
static MACHINE_CONFIG_START( play_5, play_5_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", COSMAC, 2950000)
|
||||
MCFG_CPU_ADD("maincpu", CDP1802, 2950000)
|
||||
MCFG_CPU_PROGRAM_MAP(play_5_map)
|
||||
MCFG_CPU_CONFIG(cdp1802_config)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -681,7 +681,7 @@ void comx35_state::machine_reset()
|
||||
|
||||
static MACHINE_CONFIG_START( pal, comx35_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, CDP1869_CPU_CLK_PAL)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, CDP1869_CPU_CLK_PAL)
|
||||
MCFG_CPU_PROGRAM_MAP(comx35_mem)
|
||||
MCFG_CPU_IO_MAP(comx35_io)
|
||||
MCFG_CPU_CONFIG(cosmac_intf)
|
||||
@ -712,7 +712,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( ntsc, comx35_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, CDP1869_CPU_CLK_NTSC)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, CDP1869_CPU_CLK_NTSC)
|
||||
MCFG_CPU_PROGRAM_MAP(comx35_mem)
|
||||
MCFG_CPU_IO_MAP(comx35_io)
|
||||
MCFG_CPU_CONFIG(cosmac_intf)
|
||||
|
@ -562,7 +562,7 @@ static DM9368_INTERFACE( led_intf )
|
||||
|
||||
static MACHINE_CONFIG_START( cosmicos, cosmicos_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(cosmicos_mem)
|
||||
MCFG_CPU_IO_MAP(cosmicos_io)
|
||||
MCFG_CPU_CONFIG(cosmicos_config)
|
||||
|
@ -293,7 +293,7 @@ QUICKLOAD_LOAD_MEMBER( elf2_state, elf )
|
||||
|
||||
static MACHINE_CONFIG_START( elf2, elf2_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_3_579545MHz/2)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_579545MHz/2)
|
||||
MCFG_CPU_PROGRAM_MAP(elf2_mem)
|
||||
MCFG_CPU_IO_MAP(elf2_io)
|
||||
MCFG_CPU_CONFIG(elf2_config)
|
||||
|
@ -251,7 +251,7 @@ static const cassette_interface eti660_cassette_interface =
|
||||
|
||||
static MACHINE_CONFIG_START( eti660, eti660_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_8_867238MHz/5)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_8_867238MHz/5)
|
||||
MCFG_CPU_PROGRAM_MAP(eti660_map)
|
||||
MCFG_CPU_IO_MAP(eti660_io_map)
|
||||
MCFG_CPU_CONFIG(eti660_config)
|
||||
|
60
src/mess/drivers/microkit.c
Normal file
60
src/mess/drivers/microkit.c
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
|
||||
RCA COSMAC Microkit
|
||||
|
||||
http://www.vintagecomputer.net/browse_thread.cfm?id=511
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
|
||||
class microkit_state : public driver_device
|
||||
{
|
||||
public:
|
||||
microkit_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
{ }
|
||||
};
|
||||
|
||||
static ADDRESS_MAP_START( microkit_mem, AS_PROGRAM, 8, microkit_state )
|
||||
AM_RANGE(0x0000, 0x01ff) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( microkit_io, AS_IO, 8, microkit_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( microkit )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static COSMAC_INTERFACE( cosmac_intf )
|
||||
{
|
||||
DEVCB_LINE_VCC,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( microkit, microkit_state )
|
||||
// basic machine hardware
|
||||
MCFG_CPU_ADD("maincpu", CDP1801, 2000000)
|
||||
MCFG_CPU_PROGRAM_MAP(microkit_mem)
|
||||
MCFG_CPU_IO_MAP(microkit_io)
|
||||
MCFG_CPU_CONFIG(cosmac_intf)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( microkit )
|
||||
ROM_REGION( 0x200, "maincpu", ROMREGION_INVERT )
|
||||
ROM_LOAD( "3.2b", 0x000, 0x100, CRC(6799357e) SHA1(c46e3322b8b1b6534a7da04806be29fa265951b7) )
|
||||
ROM_LOAD( "4.2a", 0x100, 0x100, CRC(27267bad) SHA1(838df9be2dc175584a1a6ee1770039118e49482e) )
|
||||
ROM_END
|
||||
|
||||
COMP( 1975, microkit, 0, 0, microkit, microkit, driver_device, 0, "RCA", "COSMAC Microkit", GAME_NOT_WORKING | GAME_NO_SOUND )
|
@ -177,7 +177,7 @@ static const cassette_interface pecom_cassette_interface =
|
||||
static MACHINE_CONFIG_START( pecom64, pecom_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, CDP1869_DOT_CLK_PAL/3)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, CDP1869_DOT_CLK_PAL/3)
|
||||
MCFG_CPU_PROGRAM_MAP(pecom64_mem)
|
||||
MCFG_CPU_IO_MAP(pecom64_io)
|
||||
MCFG_CPU_CONFIG(pecom64_cdp1802_config)
|
||||
|
@ -539,7 +539,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( studio2, studio2_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, 1760000) /* the real clock is derived from an oscillator circuit */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, 1760000) /* the real clock is derived from an oscillator circuit */
|
||||
MCFG_CPU_PROGRAM_MAP(studio2_map)
|
||||
MCFG_CPU_IO_MAP(studio2_io_map)
|
||||
MCFG_CPU_CONFIG(studio2_cosmac_intf)
|
||||
@ -558,7 +558,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( visicom, visicom_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_3_579545MHz/2)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_579545MHz/2)
|
||||
MCFG_CPU_PROGRAM_MAP(visicom_map)
|
||||
MCFG_CPU_IO_MAP(visicom_io_map)
|
||||
MCFG_CPU_CONFIG(studio2_cosmac_intf)
|
||||
@ -577,7 +577,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( mpt02, mpt02_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, CDP1864_CLOCK)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, CDP1864_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(mpt02_map)
|
||||
MCFG_CPU_IO_MAP(mpt02_io_map)
|
||||
MCFG_CPU_CONFIG(mpt02_cosmac_intf)
|
||||
|
@ -140,7 +140,7 @@ static MACHINE_CONFIG_START( tim011,tim011_state )
|
||||
MCFG_CPU_IO_MAP(tim011_io)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", tim011_state, irq0_line_hold)
|
||||
|
||||
// MCFG_CPU_ADD("keyboard",COSMAC, XTAL_1_75MHz) // CDP1802, uknown clock
|
||||
// MCFG_CPU_ADD("keyboard",CDP1802, XTAL_1_75MHz) // CDP1802, uknown clock
|
||||
|
||||
// FDC9266 location U43 XTAL_8MHz
|
||||
MCFG_UPD765A_ADD(FDC9266_TAG, true, true)
|
||||
|
@ -783,7 +783,7 @@ QUICKLOAD_LOAD_MEMBER( tmc1800_base_state, tmc1800 )
|
||||
|
||||
static MACHINE_CONFIG_START( tmc1800, tmc1800_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(tmc1800_map)
|
||||
MCFG_CPU_IO_MAP(tmc1800_io_map)
|
||||
MCFG_CPU_CONFIG(tmc1800_config)
|
||||
@ -809,7 +809,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( osc1000b, osc1000b_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(osc1000b_map)
|
||||
MCFG_CPU_IO_MAP(osc1000b_io_map)
|
||||
MCFG_CPU_CONFIG(osc1000b_config)
|
||||
@ -835,7 +835,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( tmc2000, tmc2000_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(tmc2000_map)
|
||||
MCFG_CPU_IO_MAP(tmc2000_io_map)
|
||||
MCFG_CPU_CONFIG(tmc2000_config)
|
||||
@ -855,7 +855,7 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( nano, nano_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(nano_map)
|
||||
MCFG_CPU_IO_MAP(nano_io_map)
|
||||
MCFG_CPU_CONFIG(nano_config)
|
||||
|
@ -324,7 +324,7 @@ static const cassette_interface tmc2000_cassette_interface =
|
||||
|
||||
static MACHINE_CONFIG_START( tmc2000e, tmc2000e_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_1_75MHz)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_1_75MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(tmc2000e_map)
|
||||
MCFG_CPU_IO_MAP(tmc2000e_io_map)
|
||||
MCFG_CPU_CONFIG(tmc2000e_config)
|
||||
|
@ -290,7 +290,7 @@ static const floppy_interface tmc600_floppy_interface =
|
||||
|
||||
static MACHINE_CONFIG_START( tmc600, tmc600_state )
|
||||
// basic system hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, 3579545) // ???
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, 3579545) // ???
|
||||
MCFG_CPU_PROGRAM_MAP(tmc600_map)
|
||||
MCFG_CPU_IO_MAP(tmc600_io_map)
|
||||
MCFG_CPU_CONFIG(cosmac_intf)
|
||||
|
@ -764,7 +764,7 @@ QUICKLOAD_LOAD_MEMBER( vip_state, vip )
|
||||
|
||||
static MACHINE_CONFIG_START( vip, vip_state )
|
||||
// basic machine hardware
|
||||
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_3_52128MHz/2)
|
||||
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_52128MHz/2)
|
||||
MCFG_CPU_PROGRAM_MAP(vip_mem)
|
||||
MCFG_CPU_IO_MAP(vip_io)
|
||||
MCFG_CPU_CONFIG(cosmac_intf)
|
||||
|
@ -148,6 +148,7 @@ astrocdl // Bally Home Library Computer
|
||||
astrocdw // Bally Computer System (white case)
|
||||
|
||||
// RCA
|
||||
microkit
|
||||
vip // 1977 Cosmac VIP VP-711
|
||||
vp111 // 1977 Cosmac VIP VP-111
|
||||
studio2 // 1977 Studio II
|
||||
|
@ -1616,6 +1616,7 @@ $(MESSOBJ)/radio.a: \
|
||||
$(MESS_DRIVERS)/mikrosha.o \
|
||||
|
||||
$(MESSOBJ)/rca.a: \
|
||||
$(MESS_DRIVERS)/microkit.o \
|
||||
$(MESS_DRIVERS)/studio2.o \
|
||||
$(MESS_DRIVERS)/vip.o \
|
||||
$(MESS_MACHINE)/vip_byteio.o\
|
||||
|
@ -98,11 +98,12 @@ CPU_DISASSEMBLE( arm7thumb_be );
|
||||
CPU_DISASSEMBLE( asap );
|
||||
CPU_DISASSEMBLE( avr8 );
|
||||
CPU_DISASSEMBLE( ccpu );
|
||||
CPU_DISASSEMBLE( cdp1801 );
|
||||
CPU_DISASSEMBLE( cdp1802 );
|
||||
CPU_DISASSEMBLE( coldfire );
|
||||
CPU_DISASSEMBLE( cop410 );
|
||||
CPU_DISASSEMBLE( cop420 );
|
||||
CPU_DISASSEMBLE( cop444 );
|
||||
CPU_DISASSEMBLE( cosmac );
|
||||
CPU_DISASSEMBLE( cp1610 );
|
||||
CPU_DISASSEMBLE( cquestlin );
|
||||
CPU_DISASSEMBLE( cquestrot );
|
||||
@ -241,11 +242,12 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "asap", _32le, 0, CPU_DISASSEMBLE_NAME(asap) },
|
||||
{ "avr8", _16le, 0, CPU_DISASSEMBLE_NAME(avr8) },
|
||||
{ "ccpu", _8bit, 0, CPU_DISASSEMBLE_NAME(ccpu) },
|
||||
{ "cdp1801", _8bit, 0, CPU_DISASSEMBLE_NAME(cdp1801) },
|
||||
{ "cdp1802", _8bit, 0, CPU_DISASSEMBLE_NAME(cdp1802) },
|
||||
{ "coldfire", _16be, 0, CPU_DISASSEMBLE_NAME(coldfire) },
|
||||
{ "cop410", _8bit, 0, CPU_DISASSEMBLE_NAME(cop410) },
|
||||
{ "cop420", _8bit, 0, CPU_DISASSEMBLE_NAME(cop420) },
|
||||
{ "cop444", _8bit, 0, CPU_DISASSEMBLE_NAME(cop444) },
|
||||
{ "cosmac", _8bit, 0, CPU_DISASSEMBLE_NAME(cosmac) },
|
||||
{ "cp1610", _16be, -1, CPU_DISASSEMBLE_NAME(cp1610) },
|
||||
{ "cquestlin", _64be, -3, CPU_DISASSEMBLE_NAME(cquestlin) },
|
||||
{ "cquestrot", _64be, -3, CPU_DISASSEMBLE_NAME(cquestrot) },
|
||||
|
Loading…
Reference in New Issue
Block a user