blob: 68fc190fcffb74f7583b6a6d934aef32b1120186 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#include "debugger.h"
#include "i860.h"
/**************************************************************************
* The core struct
**************************************************************************/
typedef struct _i860_state_t i860_state_t;
struct _i860_state_t
{
const device_config *device;
const address_space *program;
UINT32 pc;
UINT32 ppc;
int icount;
};
/**************************************************************************
* Functions specified by GET_INFO
**************************************************************************/
static CPU_INIT( i860 )
{
i860_state_t *i860 = device->token;
i860->device = device;
i860->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
}
static CPU_RESET( i860 )
{
logerror("i860 reset\n");
}
static CPU_EXECUTE( i860 )
{
/* Just a disassembler ATM */
return cycles;
}
extern CPU_DISASSEMBLE( i860 );
/**************************************************************************
* Generic set_info/get_info
**************************************************************************/
static CPU_SET_INFO( i860 )
{
i860_state_t *i860 = device->token;
switch(state)
{
/* Interfacing */
case CPUINFO_INT_PC:
case CPUINFO_INT_REGISTER + I860_PC: i860->pc = info->i & 0xffffffff; break;
}
}
CPU_GET_INFO( i860 )
{
i860_state_t *i860 = (device != NULL) ? device->token : NULL;
switch (state)
{
// --- the following bits of info are returned as 64-bit signed integers ---
case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(i860_state_t); break;
case CPUINFO_INT_INPUT_LINES: info->i = 0; break;
case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0x00000000; break;
case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_LITTLE; break;
case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break;
case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break;
case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 4; break;
case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 4; break;
case CPUINFO_INT_MIN_CYCLES: info->i = 1; break;
case CPUINFO_INT_MAX_CYCLES: info->i = 8; break;
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_PROGRAM: info->i = 0; break;
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_DATA: info->i = 0; break;
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
// --- the following bits of info are returned as pointers to data or functions ---
case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(i860); break;
case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i860); break;
case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(i860); break;
case CPUINFO_FCT_EXIT: info->exit = NULL; break;
case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(i860); break;
case CPUINFO_FCT_BURN: info->burn = NULL; break;
case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(i860); break;
case CPUINFO_FCT_DEBUG_INIT: info->debug_init = NULL; break;
case CPUINFO_FCT_TRANSLATE: info->translate = NULL; break;
case CPUINFO_FCT_READ: info->read = NULL; break;
case CPUINFO_FCT_WRITE: info->write = NULL; break;
case CPUINFO_FCT_READOP: info->readop = NULL; break;
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &i860->icount; break;
// --- the following bits of info are returned as NULL-terminated strings ---
case CPUINFO_STR_NAME: strcpy(info->s, "i860"); break;
case CPUINFO_STR_CORE_FAMILY: strcpy(info->s, "Intel"); break;
case CPUINFO_STR_CORE_VERSION: strcpy(info->s, "0.1"); break;
case CPUINFO_STR_CORE_FILE: strcpy(info->s, __FILE__); break;
case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Jason Eckhardt and Andrew Gardner"); break;
case CPUINFO_INT_PC: info->i = i860->pc; break;
case CPUINFO_INT_PREVIOUSPC: info->i = i860->ppc; break;
}
}
|