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
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#ifndef V810_H
#define V810_H
#include "cpuintrf.h"
void v810_get_info(UINT32, cpuinfo*);
#define R_B(addr) (program_read_byte_32le(addr))
#define R_H(addr) (program_read_word_32le(addr))
#define R_W(addr) (program_read_dword_32le(addr))
#define W_B(addr, val) (program_write_byte_32le(addr,val))
#define W_H(addr, val) (program_write_word_32le(addr,val))
#define W_W(addr, val) (program_write_dword_32le(addr,val))
#define RIO_B(addr) (io_read_byte_32le(addr))
#define RIO_H(addr) (io_read_word_32le(addr))
#define RIO_W(addr) (io_read_dword_32le(addr))
#define WIO_B(addr, val) (io_write_byte_32le(addr,val))
#define WIO_H(addr, val) (io_write_word_32le(addr,val))
#define WIO_W(addr, val) (io_write_dword_32le(addr,val))
#define R_OP(addr) (R_H(addr))
#define GET1 (OP&0x1f)
#define GET2 ((OP>>5)&0x1f)
#define I5(x) (((x)&0x1f)|(((x)&0x10)?0xffffffe0:0))
#define UI5(x) ((x)&0x1f)
#define I16(x) (((x)&0xffff)|(((x)&0x8000)?0xffff0000:0))
#define UI16(x) ((x)&0xffff)
#define D16(x) (((x)&0xffff)|(((x)&0x8000)?0xffff0000:0))
#define D26(x,y) ((y)|((x&0x3ff)<<16 )|((x&0x200)?0xfc000000:0))
#define D9(x) ((x&0x1ff)|((x&0x100)?0xfffffe00:0))
#define SO(opcode) ((opcode)&0xfc00)>>10)
#define CHECK_CY(x) PSW=(PSW & ~8)|(((x) & (((UINT64)1) << 32)) ? 8 : 0)
#define CHECK_OVADD(x,y,z) PSW=(PSW & ~0x00000004) |(( ((x) ^ (z)) & ((y) ^ (z)) & 0x80000000) ? 4: 0)
#define CHECK_OVSUB(x,y,z) PSW=(PSW & ~0x00000004) |(( ((y) ^ (z)) & ((x) ^ (y)) & 0x80000000) ? 4: 0)
#define CHECK_ZS(x) PSW=(PSW & ~3)|((UINT32)(x)==0)|(((x)&0x80000000) ? 2: 0)
#define ADD(dst, src) { UINT64 res=(UINT64)(dst)+(UINT64)(src); SetCF(res); SetOF_Add(res,src,dst); SetSZPF(res); dst=(UINT32)res; }
#define SUB(dst, src) { UINT64 res=(UINT64)(dst)-(INT64)(src); SetCF(res); SetOF_Sub(res,src,dst); SetSZPF(res); dst=(UINT32)res; }
#ifdef MAME_DEBUG
offs_t v810_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
#endif
enum
{
V810_R0=1,
V810_R1,
V810_R2, /* R2 - handler stack pointer */
V810_SP, /* R3 - stack pointer */
V810_R4, /* R4 - global pointer */
V810_R5, /* R5 - text pointer */
V810_R6,
V810_R7,
V810_R8,
V810_R9,
V810_R10,
V810_R11,
V810_R12,
V810_R13,
V810_R14,
V810_R15,
V810_R16,
V810_R17,
V810_R18,
V810_R19,
V810_R20,
V810_R21,
V810_R22,
V810_R23,
V810_R24,
V810_R25,
V810_R26,
V810_R27,
V810_R28,
V810_R29,
V810_R30,
V810_R31, /* R31 - link pointer */
/* System Registers */
V810_EIPC, /* Exception/interrupt saving - PC */
V810_EIPSW,/* Exception/interrupt saving - PSW */
V810_FEPC, /* Duplexed exception/NMI saving - PC */
V810_FEPSW,/* Duplexed exception/NMI saving - PSW */
V810_ECR, /* Exception cause register */
V810_PSW, /* Program status word */
V810_PIR, /* Processor ID register */
V810_TKCW, /* Task control word */
V810_res08,
V810_res09,
V810_res10,
V810_res11,
V810_res12,
V810_res13,
V810_res14,
V810_res15,
V810_res16,
V810_res17,
V810_res18,
V810_res19,
V810_res20,
V810_res21,
V810_res22,
V810_res23,
V810_CHCW, /* Cache control word */
V810_ADTRE, /* Address trap register */
V810_res26,
V810_res27,
V810_res28,
V810_res29,
V810_res30,
V810_res31,
V810_PC
};
#endif
|