Initial CPU tester commit.

This commit is contained in:
Toni Wilen 2019-08-07 20:41:04 +03:00
parent 016b7cee26
commit 1795dc4199
33 changed files with 11706 additions and 2240 deletions

5
.gitignore vendored
View File

@ -11,7 +11,6 @@
*.idb
*.res
*.pch
*.ini
release
debug
bin
@ -63,10 +62,13 @@ aros.rom.cpp
/cpuemu_40.cpp
/cpuemu_50.cpp
/cpustbl.cpp
/cpustbl_test.cpp
/cputbl.h
/cputbl_test.h
/jit/compemu.cpp
/jit/compstbl.cpp
/jit/comptbl.h
/cputest/data
/linetoscr.cpp
*.iobj
*.ipdb
@ -76,3 +78,4 @@ packages.config
*.sqlite
*.db-shm
*.db-wal
*.o

439
assem.cpp Normal file
View File

@ -0,0 +1,439 @@
static const TCHAR *fpsizes[] = {
_T("L"),
_T("S"),
_T("X"),
_T("P"),
_T("W"),
_T("D"),
_T("B"),
_T("P")
};
static const int fpsizeconv[] = {
sz_long,
sz_single,
sz_extended,
sz_packed,
sz_word,
sz_double,
sz_byte,
sz_packed
};
static const int datasizes[] = {
1,
2,
4,
4,
8,
12,
12
};
static void showea_val(TCHAR *buffer, uae_u16 opcode, uaecptr addr, int size)
{
struct mnemolookup *lookup;
instr *table = &table68k[opcode];
if (addr >= 0xe90000 && addr < 0xf00000)
goto skip;
if (addr >= 0xdff000 && addr < 0xe00000)
goto skip;
for (lookup = lookuptab; lookup->mnemo != table->mnemo; lookup++)
;
if (!(lookup->flags & 1))
goto skip;
buffer += _tcslen(buffer);
if (debug_safe_addr(addr, datasizes[size])) {
bool cached = false;
switch (size)
{
case sz_byte:
{
uae_u8 v = get_byte_cache_debug(addr, &cached);
uae_u8 v2 = v;
if (cached)
v2 = get_byte_debug(addr);
if (v != v2) {
_stprintf(buffer, _T(" [%02x:%02x]"), v, v2);
} else {
_stprintf(buffer, _T(" [%s%02x]"), cached ? _T("*") : _T(""), v);
}
}
break;
case sz_word:
{
uae_u16 v = get_word_cache_debug(addr, &cached);
uae_u16 v2 = v;
if (cached)
v2 = get_word_debug(addr);
if (v != v2) {
_stprintf(buffer, _T(" [%04x:%04x]"), v, v2);
} else {
_stprintf(buffer, _T(" [%s%04x]"), cached ? _T("*") : _T(""), v);
}
}
break;
case sz_long:
{
uae_u32 v = get_long_cache_debug(addr, &cached);
uae_u32 v2 = v;
if (cached)
v2 = get_long_debug(addr);
if (v != v2) {
_stprintf(buffer, _T(" [%08x:%08x]"), v, v2);
} else {
_stprintf(buffer, _T(" [%s%08x]"), cached ? _T("*") : _T(""), v);
}
}
break;
case sz_single:
{
fpdata fp;
fpp_to_single(&fp, get_long_debug(addr));
_stprintf(buffer, _T("[%s]"), fpp_print(&fp, 0));
}
break;
case sz_double:
{
fpdata fp;
fpp_to_double(&fp, get_long_debug(addr), get_long_debug(addr + 4));
_stprintf(buffer, _T("[%s]"), fpp_print(&fp, 0));
}
break;
case sz_extended:
{
fpdata fp;
fpp_to_exten(&fp, get_long_debug(addr), get_long_debug(addr + 4), get_long_debug(addr + 8));
_stprintf(buffer, _T("[%s]"), fpp_print(&fp, 0));
break;
}
case sz_packed:
_stprintf(buffer, _T("[%08x%08x%08x]"), get_long_debug(addr), get_long_debug(addr + 4), get_long_debug(addr + 8));
break;
}
}
skip:
for (int i = 0; i < size; i++) {
TCHAR name[256];
if (debugmem_get_symbol(addr + i, name, sizeof(name) / sizeof(TCHAR))) {
_stprintf(buffer + _tcslen(buffer), _T(" %s"), name);
}
}
}
static uaecptr ShowEA_disp(uaecptr *pcp, uaecptr base, TCHAR *buffer, const TCHAR *name)
{
uaecptr addr;
uae_u16 dp;
int r;
uae_u32 dispreg;
uaecptr pc = *pcp;
TCHAR mult[20];
dp = get_iword_debug(pc);
pc += 2;
r = (dp & 0x7000) >> 12; // REGISTER
dispreg = dp & 0x8000 ? m68k_areg(regs, r) : m68k_dreg(regs, r);
if (!(dp & 0x800)) { // W/L
dispreg = (uae_s32)(uae_s16)(dispreg);
}
if (currprefs.cpu_model >= 68020) {
dispreg <<= (dp >> 9) & 3; // SCALE
}
int m = 1 << ((dp >> 9) & 3);
mult[0] = 0;
if (m > 1) {
_stprintf(mult, _T("*%d"), m);
}
buffer[0] = 0;
if ((dp & 0x100) && currprefs.cpu_model >= 68020) {
TCHAR dr[20];
// Full format extension (68020+)
uae_s32 outer = 0, disp = 0;
if (dp & 0x80) { // BS (base register suppress)
base = 0;
name = NULL;
}
_stprintf(dr, _T("%c%d.%c"), dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W');
if (dp & 0x40) { // IS (index suppress)
dispreg = 0;
dr[0] = 0;
}
_tcscpy(buffer, _T("("));
TCHAR *p = buffer + _tcslen(buffer);
if (dp & 3) {
// indirect
_stprintf(p, _T("["));
p += _tcslen(p);
} else {
// (an,dn,word/long)
if (name) {
_stprintf(p, _T("%s,"), name);
p += _tcslen(p);
}
if (dr[0]) {
_stprintf(p, _T("%s%s,"), dr, mult);
p += _tcslen(p);
}
}
if ((dp & 0x30) == 0x20) { // BD SIZE = 2 (WORD)
disp = (uae_s32)(uae_s16)get_iword_debug(pc);
_stprintf(p, _T("$%04x,"), (uae_s16)disp);
p += _tcslen(p);
pc += 2;
base += disp;
} else if ((dp & 0x30) == 0x30) { // BD SIZE = 3 (LONG)
disp = get_ilong_debug(pc);
_stprintf(p, _T("$%08x,"), disp);
p += _tcslen(p);
pc += 4;
base += disp;
}
if (dp & 3) {
if (name) {
_stprintf(p, _T("%s,"), name);
p += _tcslen(p);
}
if (!(dp & 0x04)) {
if (dr[0]) {
_stprintf(p, _T("%s%s,"), dr, mult);
p += _tcslen(p);
}
}
if (p[-1] == ',')
p--;
_stprintf(p, _T("],"));
p += _tcslen(p);
if ((dp & 0x04)) {
if (dr[0]) {
_stprintf(p, _T("%s%s,"), dr, mult);
p += _tcslen(p);
}
}
}
if ((dp & 0x03) == 0x02) {
outer = (uae_s32)(uae_s16)get_iword_debug(pc);
_stprintf(p, _T("$%04x,"), (uae_s16)outer);
p += _tcslen(p);
pc += 2;
} else if ((dp & 0x03) == 0x03) {
outer = get_ilong_debug(pc);
_stprintf(p, _T("$%08x,"), outer);
p += _tcslen(p);
pc += 4;
}
if (p[-1] == ',')
p--;
_stprintf(p, _T(")"));
p += _tcslen(p);
if ((dp & 0x4) == 0)
base += dispreg;
if (dp & 0x3)
base = get_long_debug(base);
if (dp & 0x4)
base += dispreg;
addr = base + outer;
_stprintf(p, _T(" == $%08x"), addr);
p += _tcslen(p);
} else {
// Brief format extension
TCHAR regstr[20];
uae_s8 disp8 = dp & 0xFF;
regstr[0] = 0;
_stprintf(regstr, _T(",%c%d.%c"), dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W');
addr = base + (uae_s32)((uae_s8)disp8) + dispreg;
_stprintf(buffer, _T("(%s%s%s,$%02x) == $%08x"), name, regstr, mult, disp8, addr);
if (dp & 0x100) {
_tcscat(buffer, _T(" (68020+)"));
}
}
*pcp = pc;
return addr;
}
uaecptr ShowEA (void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int safemode)
{
uaecptr addr = pc;
uae_s16 disp16;
uae_s32 offset = 0;
TCHAR buffer[80];
switch (mode){
case Dreg:
_stprintf (buffer, _T("D%d"), reg);
break;
case Areg:
_stprintf (buffer, _T("A%d"), reg);
break;
case Aind:
_stprintf (buffer, _T("(A%d)"), reg);
addr = regs.regs[reg + 8];
showea_val(buffer, opcode, addr, size);
break;
case Aipi:
_stprintf (buffer, _T("(A%d)+"), reg);
addr = regs.regs[reg + 8];
showea_val(buffer, opcode, addr, size);
break;
case Apdi:
_stprintf (buffer, _T("-(A%d)"), reg);
addr = regs.regs[reg + 8];
showea_val(buffer, opcode, addr - datasizes[size], size);
break;
case Ad16:
{
TCHAR offtxt[8];
disp16 = get_iword_debug (pc); pc += 2;
if (disp16 < 0)
_stprintf (offtxt, _T("-$%04x"), -disp16);
else
_stprintf (offtxt, _T("$%04x"), disp16);
addr = m68k_areg (regs, reg) + disp16;
_stprintf (buffer, _T("(A%d,%s) == $%08x"), reg, offtxt, addr);
showea_val(buffer, opcode, addr, size);
}
break;
case Ad8r:
{
TCHAR name[10];
_stprintf(name, _T("A%d"), reg);
addr = ShowEA_disp(&pc, m68k_areg(regs, reg), buffer, name);
showea_val(buffer, opcode, addr, size);
}
break;
case PC16:
disp16 = get_iword_debug (pc); pc += 2;
addr += (uae_s16)disp16;
_stprintf (buffer, _T("(PC,$%04x) == $%08x"), disp16 & 0xffff, addr);
showea_val(buffer, opcode, addr, size);
break;
case PC8r:
{
addr = ShowEA_disp(&pc, addr, buffer, _T("PC"));
showea_val(buffer, opcode, addr, size);
}
break;
case absw:
addr = (uae_s32)(uae_s16)get_iword_debug (pc);
_stprintf (buffer, _T("$%04x"), (uae_u16)addr);
pc += 2;
showea_val(buffer, opcode, addr, size);
break;
case absl:
addr = get_ilong_debug (pc);
_stprintf (buffer, _T("$%08x"), addr);
pc += 4;
showea_val(buffer, opcode, addr, size);
break;
case imm:
switch (size){
case sz_byte:
_stprintf (buffer, _T("#$%02x"), (get_iword_debug (pc) & 0xff));
pc += 2;
break;
case sz_word:
_stprintf (buffer, _T("#$%04x"), (get_iword_debug (pc) & 0xffff));
pc += 2;
break;
case sz_long:
_stprintf(buffer, _T("#$%08x"), (get_ilong_debug(pc)));
pc += 4;
break;
case sz_single:
{
fpdata fp;
fpp_to_single(&fp, get_ilong_debug(pc));
_stprintf(buffer, _T("#%s"), fpp_print(&fp, 0));
pc += 4;
}
break;
case sz_double:
{
fpdata fp;
fpp_to_double(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4));
_stprintf(buffer, _T("#%s"), fpp_print(&fp, 0));
pc += 8;
}
break;
case sz_extended:
{
fpdata fp;
fpp_to_exten(&fp, get_ilong_debug(pc), get_ilong_debug(pc + 4), get_ilong_debug(pc + 8));
_stprintf(buffer, _T("#%s"), fpp_print(&fp, 0));
pc += 12;
break;
}
case sz_packed:
_stprintf(buffer, _T("#$%08x%08x%08x"), get_ilong_debug(pc), get_ilong_debug(pc + 4), get_ilong_debug(pc + 8));
pc += 12;
break;
default:
break;
}
break;
case imm0:
offset = (uae_s32)(uae_s8)get_iword_debug (pc);
_stprintf (buffer, _T("#$%02x"), (uae_u32)(offset & 0xff));
addr = pc + 2 + offset;
if ((opcode & 0xf000) == 0x6000) {
showea_val(buffer, opcode, addr, 1);
}
pc += 2;
break;
case imm1:
offset = (uae_s32)(uae_s16)get_iword_debug (pc);
buffer[0] = 0;
_stprintf (buffer, _T("#$%04x"), (uae_u32)(offset & 0xffff));
addr = pc + offset;
if ((opcode & 0xf000) == 0x6000) {
showea_val(buffer, opcode, addr, 2);
}
pc += 2;
break;
case imm2:
offset = (uae_s32)get_ilong_debug (pc);
_stprintf (buffer, _T("#$%08x"), (uae_u32)offset);
addr = pc + offset;
if ((opcode & 0xf000) == 0x6000) {
showea_val(buffer, opcode, addr, 4);
}
pc += 4;
break;
case immi:
offset = (uae_s32)(uae_s8)(reg & 0xff);
_stprintf (buffer, _T("#$%02x"), (uae_u8)offset);
addr = pc + offset;
break;
default:
break;
}
if (buf == NULL)
f_out (f, _T("%s"), buffer);
else
_tcscat (buf, buffer);
if (eaddr)
*eaddr = addr;
return pc;
}

2556
cputest.cpp Normal file

File diff suppressed because it is too large Load Diff

2315
cputest/68kDisass.c Normal file

File diff suppressed because it is too large Load Diff

27
cputest/68kDisass.h Normal file
View File

@ -0,0 +1,27 @@
/*
Hatari - 68kDisass.h
This file is distributed under the GNU General Public License, version 2
or at your option any later version. Read the file gpl.txt for details.
*/
#ifndef HATARI_68KDISASS_H
#define HATARI_68KDISASS_H
extern Uint32 Disasm_GetNextPC(Uint32 pc);
extern void Disasm (FILE *f, uaecptr addr, uaecptr *nextpc, int cnt);
enum {
DISASM_COLUMN_ADDRESS = 0,
DISASM_COLUMN_HEXDUMP,
DISASM_COLUMN_LABEL,
DISASM_COLUMN_OPCODE,
DISASM_COLUMN_OPERAND,
DISASM_COLUMN_COMMENT,
DISASM_COLUMNS /* number of columns in disassembly output */
};
#define DISASM_COLUMN_DISABLE -1
void Disasm_SetCPUType ( int CPU , int FPU );
#endif /* HATARI_68KDISASS_H */

74
cputest/amiga.S Normal file
View File

@ -0,0 +1,74 @@
.text
.globl _allocate_absolute
.globl _free_absolute
.globl _touser
.globl _tosuper
.globl _testexit
.globl _get_cpu_model
| check left mouse button/joystick fire
_testexit:
moveq #0,d0
move.b 0xbfe001,d0
and.b #0xc0,d0
eor.b #0xc0,d0
| d0 != 0: -> exit
rts
| super mode, disable interrupts
_tosuper:
move.l a6,-(sp)
move.l 4.w,a6
jsr -0x78(a6) | Disable
jsr -0x96(a6) | SuperState
move.w #0x0200,0xdff096
move.l (sp)+,a6
rts
| back to user mode, enable interrupts
_touser:
move.l a6,-(sp)
move.l 4.w,a6
move.l 8(sp),d0
jsr -0x9c(a6) | UserState
move.w #0x8200,0xdff096
jsr -0x7e(a6) | Enable
move.l (sp)+,a6
rts
| free absolute allocated test memory
_free_absolute:
move.l a6,-(sp)
move.l 8(sp),a1
move.l 12(sp),d0
move.l 4.w,a6
jsr -0xd2(a6) | FreeMem
move.l (sp)+,a6
rts
| allocate absolute memory
_allocate_absolute:
move.l a6,-(sp)
move.l 8(sp),a1
move.l 12(sp),d0
move.l 4.w,a6
jsr -0xcc(a6) | AllocAbs
move.l (sp)+,a6
rts
| return CPU model (68000=0, 68010=1, 68020=2)
_get_cpu_model:
move.l 4.w,a0
moveq #0,d0
move.w 0x128(a0),d1
and.w #3,d1
beq.s .cpudone
moveq #2,d0
btst #1,d1
bne.s .cpudone
moveq #1,d0
.cpudone:
rts

340
cputest/asm.S Normal file
View File

@ -0,0 +1,340 @@
.text
.globl _execute_test000
.globl _execute_test010
.globl _execute_test020
.globl _execute_testfpu
.globl _exception010
.globl _exception020
.globl _exceptionfpu
.globl _exceptiontable000
.globl _setvbr
.globl _setcpu
.globl _flushcache
S_DREG = 0
S_AREG = S_DREG+8*4
S_SSP = S_AREG+8*4
S_MSP = S_SSP+4
S_PC = S_MSP+4
S_SR = S_PC+4
S_EXC = S_SR+4
S_FPU = S_EXC+4
S_FPIAR = S_FPU+8*12
S_FPCR = S_FPIAR+4
S_FPSR = S_FPCR+4
| set CPU special registers
_setcpu:
move.l 4(sp),d1 | cpu_lvl
move.l 8(sp),a1 | new
move.l 12(sp),a0 | store
cmp.w #1,d1
bcs.s .scend1
move.l a0,d0
beq.s .scend1
movec sfc,d0
move.l d0,(a0)+
movec dfc,d0
move.l d0,(a0)+
cmp.w #2,d1
bcs.s .scend1
movec cacr,d0
move.l d0,(a0)+
movec caar,d0
move.l d0,(a0)+
movec msp,d0
move.l d0,(a0)+
.scend1:
move.l a1,d0
beq.s .scend2
cmp.w #1,d1
bcs.s .scend2
move.l (a1)+,d0
movec d0,sfc
move.l (a1)+,d0
movec d0,dfc
cmp.w #2,d1
bcs.s .scend2
move.l (a1)+,d0
movec d0,cacr
move.l (a1)+,d0
movec d0,caar
move.l (a1)+,d0
move.c d0,msp
.scend2:
rts
_flushcache:
movec cacr,d0
bset #3,d0
movec d0,cacr
rts
| set and return old VBR
_setvbr:
move.l 4(sp),d1
movec vbr,d0
movec d1,vbr
rts
| 68000 test entrypoint
_execute_test000:
movem.l d1-d7/a0-a6,-(sp)
move.l 14*4+4(sp),a0 | register struct
move.w sr,-(sp)
lea datapointer(pc),a1
move.l a0,(a1)+
move.l sp,(a1)
move.l S_SSP(a0),sp
move.l S_PC(a0),a1
move.l a1,-(sp)
move.w (a1)+,d0
move.w (a1),d1
eor.w d1,d0
move.w d0,0xdff180 | opcode^first param = background color
move.w S_SR+2(a0),-(sp)
move.l S_AREG+7*4(a0),a1
move.l a1,USP
movem.l (a0),d0-d7/a0-a6
| cmp.l #0x,0x7a0000
| bne.s .not
| clr.w 0x100
|.not:
rte
| 68010+ test entrypoint
_execute_test010:
movem.l d1-d7/a0-a6,-(sp)
move.l 14*4+4(sp),a0 | register struct
move.w sr,-(sp)
lea datapointer(pc),a1
move.l a0,(a1)+
move.l sp,(a1)
move.l S_SSP(a0),sp
move.l S_PC(a0),a1
clr.w -(sp)
move.l a1,-(sp)
move.w (a1)+,d0
move.w (a1),d1
eor.w d1,d0
move.w d0,0xdff180 | opcode^first param = background color
move.w S_SR+2(a0),-(sp)
move.l S_AREG+7*4(a0),a1
move.l a1,USP
movem.l (a0),d0-d7/a0-a6
rte
| 68020 test entrypoint
_execute_test020:
movem.l d1-d7/a0-a6,-(sp)
move.l 14*4+4(sp),a0 | register struct
move.w sr,-(sp)
lea datapointer(pc),a1
move.l a0,(a1)+
move.l sp,(a1)
move.l S_SSP(a0),sp
move.l S_PC(a0),a1
clr.w -(sp)
move.l a1,-(sp)
move.w (a1)+,d0
move.w (a1),d1
eor.w d1,d0
move.w d0,0xdff180 | opcode^first param = background color
move.w S_SR+2(a0),-(sp)
move.l S_AREG+7*4(a0),a1
move.l a1,USP
move.l S_MSP(a0),a1
movec a1,MSP
movem.l (a0),d0-d7/a0-a6
rte
| 68020+FPU test entrypoint
_execute_testfpu:
movem.l d1-d7/a0-a6,-(sp)
move.l 14*4+4(sp),a0 | register struct
move.w sr,-(sp)
lea datapointer(pc),a1
move.l a0,(a1)+
move.l sp,(a1)
move.l S_SSP(a0),sp
move.l S_PC(a0),a1
clr.w -(sp)
move.l a1,-(sp)
move.w (a1)+,d0
move.w (a1),d1
eor.w d1,d0
move.w d0,0xdff180 | opcode^first param = background color
move.w S_SR+2(a0),-(sp)
move.l S_AREG+7*4(a0),a1
move.l a1,USP
move.l S_MSP(a0),a1
movec a1,MSP
fmovem.x S_FPU(a0),fp0-fp7
lea S_FPIAR(a0),a1
fmove.l (a1)+,fpiar
fmove.l (a1)+,fpcr
fmove.l (a1)+,fpsr
movem.l (a0),d0-d7/a0-a6
rte
_exceptiontable000:
bsr.s exception | 3
bsr.s exception | 4
bsr.s exception | 5
bsr.s exception | 6
bsr.s exception | 7
bsr.s exception | 8
bsr.s exception | 9
bsr.s exception | 10
bsr.s exception | 11
bsr.s exception | 12
bsr.s exception | 13
bsr.s exception | 14
bsr.s exception | 15
bsr.s exception | 16
bsr.s exception | 17
bsr.s exception | 18
bsr.s exception | 19
bsr.s exception | 20
bsr.s exception | 21
bsr.s exception | 22
bsr.s exception | 23
bsr.s exception | 24
bsr.s exception | 25
bsr.s exception | 26
bsr.s exception | 27
bsr.s exception | 28
bsr.s exception | 29
bsr.s exception | 30
bsr.s exception | 31
bsr.s exception | 32
bsr.s exception | 33
bsr.s exception | 34
bsr.s exception | 35
bsr.s exception | 36
bsr.s exception | 37
bsr.s exception | 38
bsr.s exception | 30
bsr.s exception | 40
bsr.s exception | 41
bsr.s exception | 42
bsr.s exception | 43
bsr.s exception | 44
bsr.s exception | 45
bsr.s exception | 46
bsr.s exception | 47
nop
exception:
move.l a0,-(sp)
move.l datapointer(pc),a0
movem.l d0-d7/a0-a6,(a0)
move.l (sp)+,8*4(a0)
move.l (sp)+,d0
lea _exceptiontable000(pc),a1
sub.l a1,d0
lsr.w #1,d0
addq.w #2,d0
move.w d0,S_EXC+2(a0)
cmp.w #3,d0
bne.s .noaddresserror
move.w (sp),S_EXC+0(a0)
addq.w #8,sp
.noaddresserror:
move.w (sp)+,S_SR+2(a0)
move.l (sp)+,S_PC(a0)
move.l USP,a1
move.l a1,S_AREG+7*4(a0)
move.l superstack(pc),sp
move.w (sp)+,sr
movem.l (sp)+,d1-d7/a0-a6
rts
_exception010:
move.l a0,-(sp)
move.l datapointer(pc),a0
movem.l d0-d7/a0-a6,(a0)
move.l (sp)+,8*4(a0)
move.w (sp)+,S_SR+2(a0)
move.l (sp)+,S_PC(a0)
move.w (sp),d0
and.w #0xfff,d0
lsr.w #2,d0
move.w d0,S_EXC+2(a0)
move.l USP,a1
move.l a1,S_AREG+7*4(a0)
move.l superstack(pc),sp
move.w (sp)+,sr
movem.l (sp)+,d1-d7/a0-a6
rts
_exception020:
move.l a0,-(sp)
move.l datapointer(pc),a0
movem.l d0-d7/a0-a6,(a0)
move.l (sp)+,8*4(a0)
move.w (sp)+,S_SR+2(a0)
move.l (sp)+,S_PC(a0)
move.w (sp),d0
and.w #0xfff,d0
lsr.w #2,d0
move.w d0,S_EXC+2(a0)
movec MSP,a1
move.l a1,S_MSP(a0)
move.l USP,a1
move.l a1,S_AREG+7*4(a0)
| restore SR first, then stack
| M-bit may have been set.
move.l superstack(pc),a0
move.w (a0)+,sr
move.l a0,sp
movem.l (sp)+,d1-d7/a0-a6
rts
_exceptionfpu:
move.l a0,-(sp)
move.l datapointer(pc),a0
movem.l d0-d7/a0-a6,(a0)
move.l (sp)+,8*4(a0)
move.w (sp)+,S_SR+2(a0)
move.l (sp)+,S_PC(a0)
move.w (sp),d0
and.w #0xfff,d0
lsr.w #2,d0
move.w d0,S_EXC+2(a0)
movec MSP,a1
move.l a1,S_MSP(a0)
move.l USP,a1
move.l a1,S_AREG+7*4(a0)
fmovem.x fp0-fp7,S_FPU(a0)
lea S_FPIAR(a0),a1
fmove.l fpiar,(a1)+
fmove.l fpcr,(a1)+
fmove.l fpsr,(a1)+
move.l superstack(pc),a0
move.w (a0)+,sr
move.l a0,sp
movem.l (sp)+,d1-d7/a0-a6
rts
datapointer:
dc.l 0
superstack:
dc.l 0

35
cputest/cputest_defines.h Normal file
View File

@ -0,0 +1,35 @@
#define CT_FPREG 0
#define CT_DREG 0
#define CT_AREG 8
#define CT_SSP 16
#define CT_MSP 17
#define CT_SR 18
#define CT_PC 19
#define CT_FPIAR 20
#define CT_FPSR 21
#define CT_FPCR 22
#define CT_MEMWRITE 30
#define CT_MEMWRITES 31
#define CT_DATA_MASK 31
#define CT_EXCEPTION_MASK 63
#define CT_SIZE_BYTE (0 << 5)
#define CT_SIZE_WORD (1 << 5)
#define CT_SIZE_LONG (2 << 5)
#define CT_SIZE_FPU (3 << 5) // CT_DREG -> CT_FPREG
#define CT_SIZE_MASK (3 << 5)
// if MEMWRITE or PC
#define CT_RELATIVE_START_WORD (0 << 5) // word
#define CT_ABSOLUTE_WORD (1 << 5)
#define CT_ABSOLUTE_LONG (2 << 5)
// if MEMWRITES
#define CT_PC_BYTES (3 << 5)
// if PC
#define CT_RELATIVE_START_BYTE (3 << 5)
#define CT_END 0x80
#define CT_END_FINISH 0xff
#define CT_END_INIT (0x80 | 0x40)
#define CT_END_SKIP (0x80 | 0x40 | 0x01)

66
cputest/cputestgen.ini Normal file
View File

@ -0,0 +1,66 @@
[cputest]
; CPU model (68000, 68020).
; Always select 68020 when testing FPU instructions, even if test hardware CPU is 68040 or 68060.
cpu=68000
; FPU model (empty string or 0, 68881, 68882, 68040, 68060)
; Enable only when testing FPU. Enabled FPU mode will slow down execution.
fpu=
; Write generated instructions to standard output. Always disabled in "all" mode.
verbose=1
; Where to generate test files
path=data/
; Low address space limits (0x0000 to 0x8000 is complete space)
test_low_memory_start=0x0000
test_low_memory_end=0x8000
; High address space limits (0x00ff8000 to 0x01000000 is complete space)
test_high_memory_start=0x00ff8000
test_high_memory_end=0x01000000
; ROM high address space
high_rom=D:\amiga\roms\Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom
; main test memory start and size (real hardware must have RAM in same address space)
test_memory_start=0x780000
test_memory_size=0x080000
; test word or long odd data access address errors (68000/010 only)
; 0 = do not generate address errors
; 1 = include address errors
; 2 = only generate test instructions that generate address errors
feature_exception3_data=1
; test branches to odd addresses
; same as above
feature_exception3_instruction=1
; SR extra mask.
; 0x8000 = T1
; 0x4000 = T0 (68020)
; 0x2000 = S
; 0x1000 = M (68020)
; Other bits are ignored.
; For example 0xa000 adds 3 extra test rounds: S=1/T1=0, S=0/T1=1 and S=1/T1=1
; Note: instructions that generate privilege violation exception will automatically add extra S=1 round.
feature_sr_mask=0x0000
; 68020+ addressing modes (this makes test files much larger if other addressing modes are also enabled)
; currently does not generate any reserved mode bit combinations.
feature_full_extension_format=0
; empty = all addressing modes (feature_full_extension_format=1 enables 68020+ modes)
; Dreg, Areg, Aind, Aipi, Apdi, Ad16, PC16, Ad8r, PC8r, absw, absl, imm.
; Ad8rf and PC8rf = 68020+ full extension only. For example "Aind,Aipi,imm"
; Note: FPU source EA is considered destination EA.
feature_addressing_modes_src=
feature_addressing_modes_dst=
; mnemonics separated by comma or all.
; all = generate all. tst = generate tst.b, tst.w and tst.l. tst.l = generate only tst.l
mode=abcd,mv2sr,mvsr2

1478
cputest/main.c Normal file

File diff suppressed because it is too large Load Diff

26
cputest/makefile Normal file
View File

@ -0,0 +1,26 @@
NOWDATE := "\"$(shell date "+%-d.%-m.%Y")\""
NOWTIME := "\"$(shell date "+%T")\""
CC=/opt/amiga/bin/m68k-amigaos-gcc
AS=/opt/amiga/bin/m68k-amigaos-as
CFLAGS = -mcrt=nix13 -O2 -m68000 -fomit-frame-pointer -msmall-code -msoft-float -DREVDATE=$(NOWDATE) -DREVTIME=$(NOWTIME) -DAMIGA
LINK_CFLAGS = -mcrt=nix13 -lm -s
OBJS = main.o 68kDisass.o asm.o amiga.o
all: $(OBJS)
$(CC) $(LINK_CFLAGS) -o cputest $^
main.o: main.c
$(CC) $(CFLAGS) -I. -c -o $@ main.c
68kDisass.o: main.c
$(CC) $(CFLAGS) -I. -c -o $@ 68kDisass.c
asm.o: asm.S
$(AS) -m68020 -o $@ asm.S
amiga.o: amiga.S
$(AS) -m68020 -o $@ amiga.S

1160
cputest/msc_dirent.h Normal file

File diff suppressed because it is too large Load Diff

100
cputest_support.cpp Normal file
View File

@ -0,0 +1,100 @@
#include "sysconfig.h"
#include "sysdeps.h"
#include "options.h"
#include "memory.h"
#include "newcpu.h"
#include "fpp.h"
void my_trim(TCHAR *s)
{
int len;
while (_tcslen(s) > 0 && _tcscspn(s, _T("\t \r\n")) == 0)
memmove(s, s + 1, (_tcslen(s + 1) + 1) * sizeof(TCHAR));
len = _tcslen(s);
while (len > 0 && _tcscspn(s + len - 1, _T("\t \r\n")) == 0)
s[--len] = '\0';
}
void write_log(const TCHAR *format, ...)
{
}
void f_out(void *f, const TCHAR *format, ...)
{
}
TCHAR *buf_out(TCHAR *buffer, int *bufsize, const TCHAR *format, ...)
{
int count;
va_list parms;
va_start(parms, format);
if (buffer == NULL)
return 0;
count = _vsntprintf(buffer, (*bufsize) - 1, format, parms);
va_end(parms);
*bufsize -= _tcslen(buffer);
return buffer + _tcslen(buffer);
}
void fpux_restore(int *v)
{
}
void fp_init_native(void)
{
wprintf(_T("fp_init_native called!"));
exit(0);
}
void fp_init_native_80(void)
{
wprintf(_T("fp_init_native_80 called!"));
exit(0);
}
void init_fpucw_x87(void)
{
}
void init_fpucw_x87_80(void)
{
}
int debugmem_get_segment(uaecptr addr, bool *exact, bool *ext, TCHAR *out, TCHAR *name)
{
return 0;
}
int debugmem_get_symbol(uaecptr addr, TCHAR *out, int maxsize)
{
return 0;
}
int debugmem_get_sourceline(uaecptr addr, TCHAR *out, int maxsize)
{
return -1;
}
bool debugger_get_library_symbol(uaecptr base, uaecptr addr, TCHAR *out)
{
return false;
}
int debug_safe_addr(uaecptr addr, int size)
{
return 1;
}
void set_cpu_caches(bool flush)
{
}
void flush_icache(int v)
{
}
void mmu_tt_modified(void)
{
}
uae_u16 REGPARAM2 mmu_set_tc(uae_u16 tc)
{
return 0;
}

2067
disasm.cpp Normal file

File diff suppressed because it is too large Load Diff

41
fpp.cpp
View File

@ -34,6 +34,12 @@
#include "cpummu030.h"
#include "debug.h"
#ifndef CPU_TESTER
#define SUPPORT_MMU 1
#else
#define SUPPORT_MMU 0
#endif
#include "softfloat/softfloat.h"
// global variable for JIT FPU
@ -989,7 +995,7 @@ static void fp_unimp_datatype(uae_u16 opcode, uae_u16 extra, uae_u32 ea, uaecptr
fsave_data.stag = 7; // undocumented
} else {
fpp_from_exten_fmovem(src, &fsave_data.et[0], &fsave_data.et[1], &fsave_data.et[2]);
fsave_data.stag = get_ftag(src, (opclass == 0) ? -1U : size);
fsave_data.stag = get_ftag(src, (opclass == 0) ? 0xffffffff : size);
if (fsave_data.stag == 5) {
fsave_data.et[0] = (size == 1) ? 0x3f800000 : 0x3c000000; // exponent for denormalized single and double
}
@ -1046,11 +1052,12 @@ static bool fault_if_no_fpu (uae_u16 opcode, uae_u16 extra, uaecptr ea, uaecptr
#if EXCEPTION_FPP
write_log (_T("no FPU: %04X-%04X PC=%08X\n"), opcode, extra, oldpc);
#endif
#if SUPPORT_MMU
if (fpu_mmu_fixup) {
m68k_areg (regs, mmufixup[0].reg) = mmufixup[0].value;
mmufixup[0].reg = -1;
}
#endif
fpu_op_illg(opcode, ea, oldpc);
return true;
}
@ -1358,17 +1365,21 @@ static int get_fp_value (uae_u32 opcode, uae_u16 extra, fpdata *src, uaecptr old
break;
case 3: // (An)+
// Also needed by fault_if_no_fpu
#if SUPPORT_MMU
mmufixup[0].reg = reg;
mmufixup[0].value = m68k_areg (regs, reg);
fpu_mmu_fixup = true;
#endif
ad = m68k_areg (regs, reg);
m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size];
break;
case 4: // -(An)
// Also needed by fault_if_no_fpu
#if SUPPORT_MMU
mmufixup[0].reg = reg;
mmufixup[0].value = m68k_areg (regs, reg);
fpu_mmu_fixup = true;
#endif
m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size];
ad = m68k_areg (regs, reg);
// 68060 no fpu -(an): EA points to -4, not -12 if extended precision
@ -1576,17 +1587,21 @@ static int put_fp_value (fpdata *value, uae_u32 opcode, uae_u16 extra, uaecptr o
break;
case 3: // (An)+
// Also needed by fault_if_no_fpu
#if SUPPORT_MMU
mmufixup[0].reg = reg;
mmufixup[0].value = m68k_areg (regs, reg);
fpu_mmu_fixup = true;
#endif
ad = m68k_areg (regs, reg);
m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size];
break;
case 4: // -(An)
// Also needed by fault_if_no_fpu
#if SUPPORT_MMU
mmufixup[0].reg = reg;
mmufixup[0].value = m68k_areg (regs, reg);
fpu_mmu_fixup = true;
#endif
m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size];
ad = m68k_areg (regs, reg);
// 68060 no fpu -(an): EA points to -4, not -12 if extended precision
@ -1866,7 +1881,7 @@ void fpuop_dbcc (uae_u32 opcode, uae_u16 extra)
if (fault_if_no_6888x (opcode, extra, pc - 4))
return;
disp = (uae_s32) (uae_s16) x_cp_next_iword ();
disp = (uae_s32) (uae_s16)x_cp_next_iword();
if (fault_if_no_fpu_u (opcode, extra, pc + disp, pc - 4))
return;
regs.fpiar = pc - 4;
@ -2432,6 +2447,7 @@ static uaecptr fmovem2mem (uaecptr ad, uae_u32 list, int incr, int regdir)
// 68030 MMU state saving is annoying!
if (currprefs.mmu_model == 68030) {
#if SUPPORT_MMU
int idx = 0;
uae_u32 wrd[3];
mmu030_state[1] |= MMU030_STATEFLAG1_MOVEM1;
@ -2461,6 +2477,7 @@ static uaecptr fmovem2mem (uaecptr ad, uae_u32 list, int incr, int regdir)
}
list <<= 1;
}
#endif
} else {
for (int r = 0; r < 8; r++) {
uae_u32 wrd1, wrd2, wrd3;
@ -2489,6 +2506,7 @@ static uaecptr fmovem2fpp (uaecptr ad, uae_u32 list, int incr, int regdir)
int reg;
if (currprefs.mmu_model == 68030) {
#if SUPPORT_MMU
uae_u32 wrd[3];
int idx = 0;
mmu030_state[1] |= MMU030_STATEFLAG1_MOVEM1 | MMU030_STATEFLAG1_FMOVEM;
@ -2522,6 +2540,7 @@ static uaecptr fmovem2fpp (uaecptr ad, uae_u32 list, int incr, int regdir)
}
list <<= 1;
}
#endif
} else {
for (int r = 0; r < 8; r++) {
uae_u32 wrd1, wrd2, wrd3;
@ -3083,9 +3102,11 @@ void fpuop_arithmetic (uae_u32 opcode, uae_u16 extra)
write_log(_T("FPUOP %04x %04x PC=%08x\n"), opcode, extra, M68K_GETPC);
#endif
fpuop_arithmetic2 (opcode, extra);
#if SUPPORT_MMU
if (fpu_mmu_fixup) {
mmufixup[0].reg = -1;
}
#endif
}
static void get_features(void)
@ -3099,6 +3120,8 @@ void fpu_clearstatus(void)
fpp_clear_status();
}
#ifndef CPU_TESTER
void fpu_modechange(void)
{
uae_u32 temp_ext[8][3];
@ -3131,6 +3154,8 @@ void fpu_modechange(void)
}
}
#endif
#if FPU_TEST
static void fpu_test(void)
@ -3149,6 +3174,7 @@ static void fpu_test(void)
void fpu_reset (void)
{
#ifndef CPU_TESTER
currprefs.fpu_mode = changed_prefs.fpu_mode;
if (currprefs.fpu_mode > 0) {
fp_init_softfloat(currprefs.fpu_model);
@ -3170,10 +3196,15 @@ void fpu_reset (void)
#ifdef MSVC_LONG_DOUBLE
init_fpucw_x87_80();
#endif
#endif
#else
fp_init_softfloat(currprefs.fpu_model);
use_long_double = false;
#endif
regs.fpiar = 0;
regs.fpu_exp_state = 0;
regs.fp_unimp_pend = 0;
get_features();
fpp_set_fpcr (0);
fpp_set_fpsr (0);
@ -3188,6 +3219,8 @@ void fpu_reset (void)
}
#ifndef CPU_TESTER
uae_u8 *restore_fpu (uae_u8 *src)
{
uae_u32 w1, w2, w3;
@ -3326,3 +3359,5 @@ uae_u8 *save_fpu (int *len, uae_u8 *dstptr)
*len = dst - dstbak;
return dstbak;
}
#endif

View File

@ -18,6 +18,8 @@
* Copyright 1995, 1996, 1997, 1998, 1999, 2000 Bernd Schmidt
*/
#define CPU_TESTER 0
#include "sysconfig.h"
#include "sysdeps.h"
#include <ctype.h>
@ -44,6 +46,8 @@ static int using_ce;
static int using_tracer;
static int using_waitstates;
static int using_simple_cycles;
static int using_debugmem;
static int using_test;
static int cpu_level, cpu_generic;
static int count_read, count_write, count_cycles, count_ncycles;
static int count_cycles_ce020;
@ -814,7 +818,7 @@ static void setpc (const char *format, ...)
if (using_mmu)
printf("\tm68k_setpci(%s);\n", buffer);
else if (using_prefetch || using_prefetch_020)
else if (using_prefetch || using_prefetch_020 || using_test)
printf ("\tm68k_setpci_j(%s);\n", buffer);
else
printf ("\tm68k_setpc_j(%s);\n", buffer);
@ -829,7 +833,7 @@ static void incpc (const char *format, ...)
_vsnprintf (buffer, 1000 - 1, format, parms);
va_end (parms);
if (using_mmu || using_prefetch || using_prefetch_020)
if (using_mmu || using_prefetch || using_prefetch_020 || using_test)
printf ("\tm68k_incpci (%s);\n", buffer);
else
printf ("\tm68k_incpc (%s);\n", buffer);
@ -2337,14 +2341,13 @@ static void genmovemel_ce (uae_u16 opcode)
int size = table68k[opcode].size == sz_long ? 4 : 2;
printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0));
printf ("\tuae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n");
printf ("\tuae_u32 v;\n");
if (table68k[opcode].dmode == Ad8r || table68k[opcode].dmode == PC8r)
addcycles000 (2);
genamode (NULL, table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1, GF_AA | GF_MOVE);
start_brace ();
if (table68k[opcode].size == sz_long) {
printf ("\twhile (dmask) {\n");
printf ("\t\tv = %s (srca) << 16;\n", srcw);
printf ("\t\tuae_u32 v = %s (srca) << 16;\n", srcw);
printf ("\t\tv |= %s (srca + 2);\n", srcw);
printf ("\t\tm68k_dreg (regs, movem_index1[dmask]) = v;\n");
printf ("\t\tsrca += %d;\n", size);
@ -2352,7 +2355,7 @@ static void genmovemel_ce (uae_u16 opcode)
addcycles000_nonce("\t\t", 8);
printf ("\t}\n");
printf ("\twhile (amask) {\n");
printf ("\t\tv = %s (srca) << 16;\n", srcw);
printf ("\t\tuae_u32 v = %s (srca) << 16;\n", srcw);
printf ("\t\tv |= %s (srca + 2);\n", srcw);
printf ("\t\tm68k_areg (regs, movem_index1[amask]) = v;\n");
printf ("\t\tsrca += %d;\n", size);
@ -3187,6 +3190,21 @@ static void resetvars (void)
dstb = "put_byte";
}
}
if (using_test) {
prefetch_word = "get_word_test_prefetch";
srcwi = "get_wordi_test";
srcl = "get_long_test";
dstl = "put_long_test";
srcw = "get_word_test";
dstw = "put_word_test";
srcb = "get_byte_test";
dstb = "put_byte_test";
do_cycles = "do_cycles_test";
getpc = "m68k_getpci()";
disp000 = "get_disp_ea_test";
}
if (!dstld)
dstld = dstl;
if (!dstwd)
@ -3771,6 +3789,7 @@ static void gen_opcode (unsigned int opcode)
int dualprefetch = curi->dmode == absl && (curi->smode != Dreg && curi->smode != Areg && curi->smode != imm);
genamode (curi, curi->smode, "srcreg", curi->size, "src", 1, 0, 0);
flags = GF_MOVE | GF_APDI;
//if (curi->size == sz_long && (curi->smode == Dreg || curi->smode == Areg))
// flags &= ~GF_APDI;
@ -3784,8 +3803,9 @@ static void gen_opcode (unsigned int opcode)
fill_prefetch_next ();
prefetch_done = 1;
}
if (curi->mnemo == i_MOVE)
genflags (flag_logical, curi->size, "src", "", "");
genflags(flag_logical, curi->size, "src", "", "");
if (curi->size == sz_long) {
if ((curi->dmode == Ad16 || curi->dmode == PC16) && curi->smode == imm) {
@ -3940,9 +3960,9 @@ static void gen_opcode (unsigned int opcode)
printf("\tuae_u16 sr = src;\n");
}
// STOP undocumented features:
// if SR is not set:
// if new SR S-bit is not set:
// 68000 (68010?): Update SR, increase PC and then cause privilege violation exception (handled in newcpu)
// 68000 (68010?): Traced STOP also runs 4 cycles faster.
// 68000 (68010?): Traced STOP runs 4 cycles faster.
// 68020 68030: STOP works normally
// 68040 68060: Immediate privilege violation exception
if ((cpu_level == 0 || cpu_level == 1) && using_ce) {
@ -3989,7 +4009,9 @@ static void gen_opcode (unsigned int opcode)
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
setpc ("pc");
printf("\tbranch_stack_pop_rte(oldpc);\n");
if (using_debugmem) {
printf("\tbranch_stack_pop_rte(oldpc);\n");
}
makefromsr();
} else if (cpu_level == 1 && using_prefetch) {
// 68010
@ -4019,7 +4041,9 @@ static void gen_opcode (unsigned int opcode)
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
setpc ("newpc");
printf("\tbranch_stack_pop_rte(oldpc);\n");
if (using_debugmem) {
printf("\tbranch_stack_pop_rte(oldpc);\n");
}
check_ipl ();
need_endlabel = 1;
} else {
@ -4093,7 +4117,9 @@ static void gen_opcode (unsigned int opcode)
printf ("\t\tgoto %s;\n", endlabelstr);
printf ("\t}\n");
setpc ("newpc");
printf("\tbranch_stack_pop_rte(oldpc);\n");
if (using_debugmem) {
printf("\tbranch_stack_pop_rte(oldpc);\n");
}
check_ipl ();
need_endlabel = 1;
}
@ -4173,7 +4199,7 @@ static void gen_opcode (unsigned int opcode)
printf("\t\tgoto %s;\n", endlabelstr);
printf("\t}\n");
}
if (using_indirect > 0 && !using_ce020 && !using_prefetch_020 && !using_ce) {
if (using_indirect > 0 && !using_ce020 && !using_prefetch_020 && !using_ce && !using_test) {
printf("\tm68k_do_rtsi_jit ();\n");
} else if (using_mmu) {
printf ("\tm68k_do_rts_mmu%s ();\n", mmu_postfix);
@ -4190,8 +4216,10 @@ static void gen_opcode (unsigned int opcode)
} else {
printf ("\tm68k_do_rts ();\n");
}
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_pop_rts(pc);\n");
if (using_debugmem) {
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_pop_rts(pc);\n");
}
printf ("\tif (%s & 1) {\n", getpc);
printf ("\t\tuaecptr faultpc = %s;\n", getpc);
setpc ("pc");
@ -4277,8 +4305,10 @@ static void gen_opcode (unsigned int opcode)
} else {
printf ("\t%s (m68k_areg (regs, 7), nextpc);\n", dstl);
}
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_push(oldpc, nextpc);\n");
if (using_debugmem) {
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_push(oldpc, nextpc);\n");
}
}
count_write += 2;
fill_prefetch_full_020 ();
@ -4336,7 +4366,7 @@ static void gen_opcode (unsigned int opcode)
addcycles000 (2);
printf("\tuaecptr oldpc = %s;\n", getpc);
printf("\tuaecptr nextpc = oldpc + %d;\n", m68k_pc_offset);
if (using_indirect > 0 && !using_ce020 && !using_prefetch_020 && !using_ce) {
if (using_indirect > 0 && !using_ce020 && !using_prefetch_020 && !using_ce && !using_test) {
printf("\tm68k_do_bsri_jit (nextpc, s);\n");
} else if (using_mmu) {
printf ("\tm68k_do_bsr_mmu%s (nextpc, s);\n", mmu_postfix);
@ -4351,8 +4381,10 @@ static void gen_opcode (unsigned int opcode)
} else {
printf ("\tm68k_do_bsr (nextpc, s);\n");
}
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_push(oldpc, nextpc);\n");
if (using_debugmem) {
printf("\tif (debugmem_trace)\n");
printf("\t\tbranch_stack_push(oldpc, nextpc);\n");
}
count_write += 2;
clear_m68k_offset();
fill_prefetch_full ();
@ -4708,7 +4740,7 @@ bccl_not68020:
printf ("\tcnt &= 63;\n");
printf ("\tCLEAR_CZNV ();\n");
printf ("\tif (cnt >= %d) {\n", bit_size (curi->size));
printf ("\t\tval = %s & (uae_u32)-sign;\n", bit_mask (curi->size));
printf ("\t\tval = %s & (uae_u32)(0 - sign);\n", bit_mask (curi->size));
printf ("\t\tSET_CFLG (sign);\n");
duplicate_carry (1);
if (source_is_imm1_8 (curi))
@ -4719,7 +4751,7 @@ bccl_not68020:
printf ("\t\tSET_CFLG (val & 1);\n");
duplicate_carry (1);
printf ("\t\tval >>= 1;\n");
printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)-sign;\n",
printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)(0 - sign);\n",
bit_mask (curi->size),
bit_size (curi->size));
printf ("\t\tval &= %s;\n", bit_mask (curi->size));
@ -5570,14 +5602,15 @@ bccl_not68020:
{
if ((opcode & 0xfff8) == 0xf620) {
/* MOVE16 (Ax)+,(Ay)+ */
printf ("\tuae_u32 v[4];\n");
printf ("\tuaecptr mems = m68k_areg (regs, srcreg) & ~15, memd;\n");
printf ("\tdstreg = (%s >> 12) & 7;\n", gen_nextiword (0));
printf ("\tmemd = m68k_areg (regs, dstreg) & ~15;\n");
if (using_mmu >= 68040) {
printf("\tuae_u32 v[4];\n");
printf ("\tget_move16_mmu (mems, v);\n");
printf ("\tput_move16_mmu (memd, v);\n");
} else {
printf("\tuae_u32 v[4];\n");
printf ("\tv[0] = %s (mems);\n", srcl);
printf ("\tv[1] = %s (mems + 4);\n", srcl);
printf ("\tv[2] = %s (mems + 8);\n", srcl);
@ -5592,18 +5625,19 @@ bccl_not68020:
printf ("\tm68k_areg (regs, dstreg) += 16;\n");
} else {
/* Other variants */
printf ("\tuae_u32 v[4];\n");
genamode (curi, curi->smode, "srcreg", curi->size, "mems", 0, 2, 0);
genamode (curi, curi->dmode, "dstreg", curi->size, "memd", 0, 2, 0);
if (using_mmu == 68040) {
printf ("\tget_move16_mmu (memsa, mmu040_move16);\n");
printf ("\tput_move16_mmu (memda, mmu040_move16);\n");
} else if (using_mmu == 68060) {
printf("\tuae_u32 v[4];\n");
printf ("\tget_move16_mmu (memsa, v);\n");
printf ("\tput_move16_mmu (memda, v);\n");
} else {
printf ("\tmemsa &= ~15;\n");
printf ("\tmemda &= ~15;\n");
printf("\tuae_u32 v[4];\n");
printf ("\tv[0] = %s (memsa);\n", srcl);
printf ("\tv[1] = %s (memsa + 4);\n", srcl);
printf ("\tv[2] = %s (memsa + 8);\n", srcl);
@ -6043,6 +6077,70 @@ static void generate_func (const char *extra)
fprintf (stblfile, "{ 0, 0 }};\n");
}
#if CPU_TESTER
static void generate_cpu_test(int mode)
{
char fname[100];
const char *extra = "_test", *extraup;
int rp;
int id = 90 + mode;
using_tracer = 0;
extraup = "";
postfix = id;
fprintf(stblfile, "#ifdef CPUEMU_%d%s\n", postfix, extraup);
sprintf(fname, "cpuemu_%d%s.cpp", postfix, extra);
if (freopen(fname, "wb", stdout) == NULL) {
abort();
}
using_exception_3 = 1;
using_prefetch = 0;
using_prefetch_020 = 0;
using_ce = 0;
using_ce020 = 0;
using_mmu = 0;
using_waitstates = 0;
memory_cycle_cnt = 4;
mmu_postfix = "";
xfc_postfix = "";
using_simple_cycles = 0;
using_indirect = 1;
cpu_generic = false;
cpu_level = 0;
using_prefetch = 1;
using_exception_3 = 1;
using_simple_cycles = 1;
if (mode == 1) {
cpu_level = 1;
} else if (mode == 2) {
cpu_level = 2;
using_prefetch = 0;
using_simple_cycles = 0;
}
read_counts();
for (rp = 0; rp < nr_cpuop_funcs; rp++)
opcode_next_clev[rp] = cpu_level;
printf("#include \"cputest.h\"\n");
if (!mode) {
fprintf(stblfile, "#include \"cputest.h\"\n");
}
fprintf(stblfile, "const struct cputbl CPUFUNC(op_smalltbl_%d%s)[] = {\n", postfix, extra);
endlabelno = id;
generate_func(extra);
fprintf(stblfile, "#endif /* CPUEMU_%d%s */\n", postfix, extraup);
}
#endif
static void generate_cpu (int id, int mode)
{
char fname[100];
@ -6232,8 +6330,6 @@ static void generate_cpu (int id, int mode)
int main(int argc, char *argv[])
{
int i;
read_table68k ();
do_merges ();
@ -6247,18 +6343,34 @@ int main(int argc, char *argv[])
* cputbl.h that way), but cpuopti can't cope. That could be fixed, but
* I don't dare to touch the 68k version. */
headerfile = fopen ("cputbl.h", "wb");
#if CPU_TESTER
stblfile = fopen ("cpustbl.cpp", "wb");
generate_includes (stblfile, 0);
using_test = 1;
headerfile = fopen("cputbl_test.h", "wb");
stblfile = fopen("cpustbl_test.cpp", "wb");
generate_stbl = 1;
generate_cpu_test(0);
generate_cpu_test(1);
generate_cpu_test(2);
for (i = 0; i <= 55; i++) {
#else
using_debugmem = 1;
headerfile = fopen("cputbl.h", "wb");
stblfile = fopen("cpustbl.cpp", "wb");
generate_includes(stblfile, 0);
for (int i = 0; i <= 55; i++) {
if ((i >= 6 && i < 11) || (i > 14 && i < 20) || (i > 25 && i < 31) || (i > 35 && i < 40))
continue;
generate_stbl = 1;
generate_cpu (i, 0);
}
#endif
free (table68k);
return 0;
}

58
include/cputest.h Normal file
View File

@ -0,0 +1,58 @@
#include "sysconfig.h"
#include "sysdeps.h"
#include "options.h"
#include "memory.h"
#include "newcpu.h"
#include "cputest/cputest_defines.h"
typedef uae_u32 REGPARAM3 cpuop_func(uae_u32) REGPARAM;
#include "cputbl_test.h"
#define CPUFUNC(x) x##_ff
#define SET_CFLG_ALWAYS(x) SET_CFLG(x)
#define SET_NFLG_ALWAYS(x) SET_NFLG(x)
#define m68k_dreg(r,num) ((r).regs[(num)])
#define m68k_areg(r,num) (((r).regs + 8)[(num)])
int cctrue(int);
extern const int areg_byteinc[];
extern const int imm8_table[];
extern const struct cputbl op_smalltbl_90_test_ff[];
extern const struct cputbl op_smalltbl_91_test_ff[];
extern const struct cputbl op_smalltbl_92_test_ff[];
extern struct flag_struct regflags;
extern int movem_index1[256];
extern int movem_index2[256];
extern int movem_next[256];
uae_u16 get_word_test_prefetch(int);
void put_byte_test(uaecptr, uae_u32);
void put_word_test(uaecptr, uae_u32);
void put_long_test(uaecptr, uae_u32);
uae_u32 get_byte_test(uaecptr);
uae_u32 get_word_test(uaecptr);
uae_u32 get_long_test(uaecptr);
uae_u32 get_disp_ea_test(uae_u32, uae_u32);
void m68k_incpci(int);
uaecptr m68k_getpci(void);
void m68k_setpci_j(uaecptr);
void m68k_do_rtsi(void);
void m68k_do_bsri(uaecptr, uae_s32);
void m68k_setstopped(void);
void check_t0_trace(void);
void cpureset(void);

10
include/disasm.h Normal file
View File

@ -0,0 +1,10 @@
uaecptr ShowEA (void *f, uaecptr pc, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int safemode);
uaecptr ShowEA_disp(uaecptr *pcp, uaecptr base, TCHAR *buffer, const TCHAR *name);
void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr pc, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, uaecptr lastpc, int safemode);
void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *nextpc, uaecptr lastpc);
uae_u32 REGPARAM2 op_illg_1(uae_u32 opcode);
uae_u32 REGPARAM2 op_unimpl_1(uae_u32 opcode);
extern struct cpum2c m2cregs[];
extern const TCHAR *fpuopcodes[];
extern const TCHAR *fpsizes[];

View File

@ -552,6 +552,52 @@ STATIC_INLINE uae_u32 get_wordi(uaecptr addr)
return memory_get_wordi(addr);
}
// do split memory access if it can cross memory banks
STATIC_INLINE uae_u32 get_long_compatible(uaecptr addr)
{
if ((addr &0xffff) < 0xfffd) {
return memory_get_long(addr);
} else if (addr & 1) {
uae_u8 v0 = memory_get_byte(addr + 0);
uae_u16 v1 = memory_get_word(addr + 1);
uae_u8 v3 = memory_get_byte(addr + 3);
return (v0 << 24) | (v1 << 8) | (v3 << 0);
} else {
uae_u16 v0 = memory_get_word(addr + 0);
uae_u16 v1 = memory_get_word(addr + 2);
return (v0 << 16) | (v1 << 0);
}
}
STATIC_INLINE uae_u32 get_word_compatible(uaecptr addr)
{
if ((addr & 0xffff) < 0xffff) {
return memory_get_word(addr);
} else {
uae_u8 v0 = memory_get_byte(addr + 0);
uae_u8 v1 = memory_get_byte(addr + 1);
return (v0 << 8) | (v1 << 0);
}
}
STATIC_INLINE uae_u32 get_byte_compatible(uaecptr addr)
{
return memory_get_byte(addr);
}
STATIC_INLINE uae_u32 get_longi_compatible(uaecptr addr)
{
if ((addr & 0xffff) < 0xfffd) {
return memory_get_longi(addr);
} else {
uae_u16 v0 = memory_get_wordi(addr + 0);
uae_u16 v1 = memory_get_wordi(addr + 2);
return (v0 << 16) | (v1 << 0);
}
}
STATIC_INLINE uae_u32 get_wordi_compatible(uaecptr addr)
{
return memory_get_wordi(addr);
}
STATIC_INLINE uae_u32 get_long_jit(uaecptr addr)
{
#ifdef JIT
@ -640,6 +686,35 @@ STATIC_INLINE void put_byte (uaecptr addr, uae_u32 b)
memory_put_byte(addr, b);
}
// do split memory access if it can cross memory banks
STATIC_INLINE void put_long_compatible(uaecptr addr, uae_u32 l)
{
if ((addr & 0xffff) < 0xfffd) {
memory_put_long(addr, l);
} else if (addr & 1) {
memory_put_byte(addr + 0, l >> 24);
memory_put_word(addr + 1, l >> 8);
memory_put_byte(addr + 3, l >> 0);
} else {
memory_put_word(addr + 0, l >> 16);
memory_put_word(addr + 2, l >> 0);
}
}
STATIC_INLINE void put_word_compatible(uaecptr addr, uae_u32 w)
{
if ((addr & 0xffff) < 0xffff) {
memory_put_word(addr, w);
} else {
memory_put_byte(addr + 0, w >> 8);
memory_put_byte(addr + 1, w >> 0);
}
}
STATIC_INLINE void put_byte_compatible(uaecptr addr, uae_u32 b)
{
memory_put_byte(addr, b);
}
STATIC_INLINE void put_long_jit(uaecptr addr, uae_u32 l)
{
#ifdef JIT

View File

@ -85,7 +85,7 @@ struct comptbl {
#endif
extern uae_u32 REGPARAM3 op_illg (uae_u32) REGPARAM;
extern void REGPARAM3 op_unimpl (uae_u16) REGPARAM;
extern void REGPARAM3 op_unimpl (uae_u32) REGPARAM;
typedef uae_u8 flagtype;

View File

@ -105,7 +105,7 @@ extern struct instr {
unsigned int dmode:5;
unsigned int suse:1;
unsigned int duse:1;
unsigned int unused1:1;
unsigned int ccuse:1;
unsigned int clev:3, unimpclev:3;
unsigned int isjmp:1;
unsigned int unused2:1;

View File

@ -347,7 +347,12 @@ bool ini_getval_multi(struct ini_data *ini, const TCHAR *section, const TCHAR *k
TCHAR *out2 = NULL;
if (!ini_getstring_multi(ini, section, key, &out2, ctx))
return false;
*v = _tstol(out2);
if (_tcslen(out2) > 2 && out2[0] == '0' && _totupper(out2[1]) == 'X') {
TCHAR *endptr;
*v = _tcstol(out2 + 2, &endptr, 16);
} else {
*v = _tstol(out2);
}
xfree(out2);
return true;
}

2229
newcpu.cpp

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,11 @@
#include "cpummu030.h"
#include "cpu_prefetch.h"
int get_cpu_model(void)
{
return currprefs.cpu_model;
}
void val_move2c2 (int regno, uae_u32 val)
{
switch (regno) {
@ -436,6 +441,7 @@ uae_u32 REGPARAM2 x_get_disp_ea_020 (uae_u32 base, int idx)
regd = (uae_s32)(uae_s16)regd;
regd <<= (dp >> 9) & 3;
if (dp & 0x100) {
uae_s32 outer = 0;
if (dp & 0x80)
base = 0;
@ -476,11 +482,15 @@ uae_u32 REGPARAM2 x_get_disp_ea_020 (uae_u32 base, int idx)
} else {
v = base + (uae_s32)((uae_s8)dp) + regd;
}
#ifndef CPU_TESTER
if (cycles && currprefs.cpu_cycle_exact)
x_do_cycles (cycles * cpucycleunit);
#endif
return v;
}
#ifndef CPU_TESTER
uae_u32 REGPARAM2 x_get_disp_ea_ce030 (uae_u32 base, int idx)
{
uae_u16 dp = next_iword_030ce ();
@ -612,6 +622,8 @@ uae_u32 REGPARAM2 x_get_disp_ea_040(uae_u32 base, int idx)
}
}
#endif
/*
* Compute exact number of CPU cycles taken
* by DIVU and DIVS on a 68000 processor.

View File

@ -0,0 +1,242 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Test|Win32">
<Configuration>Test</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Test|x64">
<Configuration>Test</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{EDD28611-EAD9-4EB5-A873-18160AC44434}</ProjectGuid>
<RootNamespace>cputester</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>..\..\include;..\..;..\</AdditionalIncludeDirectories>
<DisableSpecificWarnings>4996</DisableSpecificWarnings>
<PreprocessorDefinitions>_MBCS;%(PreprocessorDefinitions);CPUEMU_90;CPUEMU_91;CPUEMU_92;CPU_TESTER</PreprocessorDefinitions>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\cpudefs.cpp" />
<ClCompile Include="..\..\cpuemu_90_test.cpp" />
<ClCompile Include="..\..\cpuemu_91_test.cpp" />
<ClCompile Include="..\..\cpuemu_92_test.cpp" />
<ClCompile Include="..\..\cpustbl_test.cpp" />
<ClCompile Include="..\..\cputest.cpp" />
<ClCompile Include="..\..\cputest_support.cpp" />
<ClCompile Include="..\..\disasm.cpp" />
<ClCompile Include="..\..\fpp.cpp" />
<ClCompile Include="..\..\fpp_softfloat.cpp" />
<ClCompile Include="..\..\ini.cpp" />
<ClCompile Include="..\..\newcpu_common.cpp" />
<ClCompile Include="..\..\readcpu.cpp" />
<ClCompile Include="..\..\softfloat\softfloat.cpp" />
<ClCompile Include="..\..\softfloat\softfloat_decimal.cpp" />
<ClCompile Include="..\..\softfloat\softfloat_fpsp.cpp" />
<ClCompile Include="..\unicode.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Source Files\softfloat">
<UniqueIdentifier>{0ac04ffb-7253-4995-b1eb-8c49c2c61565}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\cpuemu_90_test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cputest.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\readcpu.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cpudefs.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cpustbl_test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\disasm.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cputest_support.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\unicode.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_92_test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\newcpu_common.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cpuemu_91_test.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\ini.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\fpp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\fpp_softfloat.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\softfloat\softfloat.cpp">
<Filter>Source Files\softfloat</Filter>
</ClCompile>
<ClCompile Include="..\..\softfloat\softfloat_decimal.cpp">
<Filter>Source Files\softfloat</Filter>
</ClCompile>
<ClCompile Include="..\..\softfloat\softfloat_fpsp.cpp">
<Filter>Source Files\softfloat</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{07609D0D-FE6B-4A84-8C87-F914A4566F6F}</ProjectGuid>
<RootNamespace>cputesterm68k</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\cputest\68kDisass.c" />
<ClCompile Include="..\..\cputest\main.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\cputest\main.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\cputest\68kDisass.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -34,8 +34,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unpackers", "..\unpackers\u
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "wix", "..\wix\wix.wixproj", "{BE211CE1-3955-4674-A664-5038FC791980}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cputester", "..\cputester\cputester.vcxproj", "{EDD28611-EAD9-4EB5-A873-18160AC44434}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cputester_m68k", "..\cputester_m68k\cputester_m68k.vcxproj", "{07609D0D-FE6B-4A84-8C87-F914A4566F6F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
FullRelease|Mixed Platforms = FullRelease|Mixed Platforms
FullRelease|Win32 = FullRelease|Win32
FullRelease|x64 = FullRelease|x64
@ -50,6 +57,12 @@ Global
Test|x64 = Test|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Win32.ActiveCfg = Debug|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|Win32.Build.0 = Debug|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x64.ActiveCfg = Debug|x64
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Debug|x64.Build.0 = Debug|x64
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -74,6 +87,11 @@ Global
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|Win32.Build.0 = Test|Win32
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x64.ActiveCfg = Test|x64
{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}.Test|x64.Build.0 = Test|x64
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Win32.ActiveCfg = Debug|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|Win32.Build.0 = Debug|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Debug|x64.ActiveCfg = Debug|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -90,6 +108,11 @@ Global
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|Mixed Platforms.Build.0 = Test|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|Win32.ActiveCfg = Test|Win32
{DEF7ACF7-050E-4069-BB99-5B5D93F60521}.Test|x64.ActiveCfg = Test|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Win32.ActiveCfg = Debug|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|Win32.Build.0 = Debug|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Debug|x64.ActiveCfg = Debug|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -106,6 +129,11 @@ Global
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|Mixed Platforms.Build.0 = Test|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|Win32.ActiveCfg = Test|Win32
{54197DFF-9CAA-4A9F-B9C2-2881EA04EACB}.Test|x64.ActiveCfg = Test|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Win32.ActiveCfg = Debug|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|Win32.Build.0 = Debug|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Debug|x64.ActiveCfg = Debug|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -122,6 +150,11 @@ Global
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|Mixed Platforms.Build.0 = Test|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|Win32.ActiveCfg = Test|Win32
{765B0AF0-B8D3-4998-89AF-D6F939E1CD18}.Test|x64.ActiveCfg = Test|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Win32.ActiveCfg = Debug|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|Win32.Build.0 = Debug|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Debug|x64.ActiveCfg = Debug|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -138,6 +171,11 @@ Global
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|Mixed Platforms.Build.0 = Test|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|Win32.ActiveCfg = Test|Win32
{AF3DBBDE-E006-4DC3-9A26-CB0D7D82AE3C}.Test|x64.ActiveCfg = Test|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Win32.ActiveCfg = Debug|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|Win32.Build.0 = Debug|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Debug|x64.ActiveCfg = Debug|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -154,6 +192,11 @@ Global
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|Mixed Platforms.Build.0 = Test|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|Win32.ActiveCfg = Test|Win32
{DAF2EB1A-546A-41B3-9755-187562C01E3C}.Test|x64.ActiveCfg = Test|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Win32.ActiveCfg = Debug|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|Win32.Build.0 = Debug|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Debug|x64.ActiveCfg = Debug|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -170,6 +213,11 @@ Global
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|Mixed Platforms.Build.0 = Test|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|Win32.ActiveCfg = Test|Win32
{C85288FB-A035-42CA-B5FB-8E6214319E97}.Test|x64.ActiveCfg = Test|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Win32.ActiveCfg = Debug|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|Win32.Build.0 = Debug|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Debug|x64.ActiveCfg = Debug|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -186,6 +234,11 @@ Global
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|Mixed Platforms.Build.0 = Test|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|Win32.ActiveCfg = Test|Win32
{960E83B5-9118-4EBD-AF50-18EFC1DC764B}.Test|x64.ActiveCfg = Test|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Win32.ActiveCfg = Debug|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|Win32.Build.0 = Debug|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Debug|x64.ActiveCfg = Debug|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -202,6 +255,11 @@ Global
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|Mixed Platforms.Build.0 = Test|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|Win32.ActiveCfg = Test|Win32
{79BDABE6-5308-4D64-8884-A5A35909D8D3}.Test|x64.ActiveCfg = Test|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Win32.ActiveCfg = Debug|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|Win32.Build.0 = Debug|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Debug|x64.ActiveCfg = Debug|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Mixed Platforms.ActiveCfg = FullRelease|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Mixed Platforms.Build.0 = FullRelease|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.FullRelease|Win32.ActiveCfg = FullRelease|Win32
@ -218,6 +276,11 @@ Global
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|Mixed Platforms.Build.0 = Test|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|Win32.ActiveCfg = Test|Win32
{E9F73E11-A463-45C6-A733-2BED75852BA1}.Test|x64.ActiveCfg = Test|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Win32.ActiveCfg = Debug|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|Win32.Build.0 = Debug|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Debug|x64.ActiveCfg = Debug|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.FullRelease|Win32.ActiveCfg = Release|Win32
@ -234,6 +297,11 @@ Global
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|Mixed Platforms.Build.0 = Test|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|Win32.ActiveCfg = Test|Win32
{38FAC3FB-A2B7-453F-8A6A-73B97201BB04}.Test|x64.ActiveCfg = Test|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Win32.ActiveCfg = Debug|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|Win32.Build.0 = Debug|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Debug|x64.ActiveCfg = Debug|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.FullRelease|Win32.ActiveCfg = Release|Win32
@ -250,6 +318,12 @@ Global
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|Mixed Platforms.Build.0 = Test|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|Win32.ActiveCfg = Test|Win32
{6181E50C-5F32-42DC-BEF6-827AA8A5429D}.Test|x64.ActiveCfg = Test|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Win32.ActiveCfg = Debug|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|Win32.Build.0 = Debug|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|x64.ActiveCfg = Debug|x64
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Debug|x64.Build.0 = Debug|x64
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.FullRelease|Win32.ActiveCfg = Release|Win32
@ -266,6 +340,12 @@ Global
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|Mixed Platforms.Build.0 = Test|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|Win32.ActiveCfg = Test|Win32
{2C44DD04-F5D6-4CC3-B0D6-1F4E51A0D962}.Test|x64.ActiveCfg = Test|x64
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Win32.ActiveCfg = Debug|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|Win32.Build.0 = Debug|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|x64.ActiveCfg = Debug|x64
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Debug|x64.Build.0 = Debug|x64
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.FullRelease|Win32.ActiveCfg = Release|Win32
@ -282,6 +362,12 @@ Global
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|Mixed Platforms.Build.0 = Test|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|Win32.ActiveCfg = Test|Win32
{8627DA33-98D1-4F60-B404-ECCEE0EE7BF9}.Test|x64.ActiveCfg = Test|x64
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Win32.ActiveCfg = Debug|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|Win32.Build.0 = Debug|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|x64.ActiveCfg = Debug|x64
{98BA115B-829F-4085-9729-ABD0D779A60A}.Debug|x64.Build.0 = Debug|x64
{98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.FullRelease|Win32.ActiveCfg = Release|Win32
@ -298,6 +384,9 @@ Global
{98BA115B-829F-4085-9729-ABD0D779A60A}.Test|Mixed Platforms.Build.0 = Test|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Test|Win32.ActiveCfg = Test|Win32
{98BA115B-829F-4085-9729-ABD0D779A60A}.Test|x64.ActiveCfg = Test|x64
{BE211CE1-3955-4674-A664-5038FC791980}.Debug|Mixed Platforms.ActiveCfg = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.Debug|Win32.ActiveCfg = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.Debug|x64.ActiveCfg = Release|x64
{BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Mixed Platforms.ActiveCfg = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Mixed Platforms.Build.0 = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.FullRelease|Win32.ActiveCfg = Release|x86
@ -313,6 +402,65 @@ Global
{BE211CE1-3955-4674-A664-5038FC791980}.Test|Mixed Platforms.Build.0 = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.Test|Win32.ActiveCfg = Release|x86
{BE211CE1-3955-4674-A664-5038FC791980}.Test|x64.ActiveCfg = Release|x86
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|Win32.ActiveCfg = Debug|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|Win32.Build.0 = Debug|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|x64.ActiveCfg = Debug|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Debug|x64.Build.0 = Debug|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|Win32.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|Win32.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|x64.ActiveCfg = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.FullRelease|x64.Build.0 = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|Mixed Platforms.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|Win32.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|Win32.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|x64.ActiveCfg = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Release|x64.Build.0 = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|Mixed Platforms.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|Mixed Platforms.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|Win32.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|Win32.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|x64.ActiveCfg = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.ReleaseXP|x64.Build.0 = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Test|Mixed Platforms.ActiveCfg = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Test|Mixed Platforms.Build.0 = Release|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Test|Win32.ActiveCfg = Test|Win32
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Test|x64.ActiveCfg = Release|x64
{EDD28611-EAD9-4EB5-A873-18160AC44434}.Test|x64.Build.0 = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|Win32.ActiveCfg = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|Win32.Build.0 = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|x64.ActiveCfg = Debug|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Debug|x64.Build.0 = Debug|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|Mixed Platforms.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|Mixed Platforms.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|Win32.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|Win32.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|x64.ActiveCfg = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.FullRelease|x64.Build.0 = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|Mixed Platforms.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|Win32.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|Win32.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|x64.ActiveCfg = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Release|x64.Build.0 = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|Mixed Platforms.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|Mixed Platforms.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|Win32.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|Win32.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|x64.ActiveCfg = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.ReleaseXP|x64.Build.0 = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|Mixed Platforms.ActiveCfg = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|Mixed Platforms.Build.0 = Release|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|Win32.ActiveCfg = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|Win32.Build.0 = Debug|Win32
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|x64.ActiveCfg = Release|x64
{07609D0D-FE6B-4A84-8C87-F914A4566F6F}.Test|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -47,7 +47,7 @@
<ProjectGuid>{4ADAA943-1AC8-4FB5-82E5-4FB753B6C2DA}</ProjectGuid>
<RootNamespace>winuae</RootNamespace>
<TargetPlatformVersion>8.1</TargetPlatformVersion>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'" Label="Configuration">
@ -200,15 +200,15 @@
<TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">winuae64</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Test|x64'">winuae64</TargetName>
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">winuae64</TargetName>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\dev\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|Win32'">C:\dev\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">C:\dev\lib;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\dev\lib;$(LibraryPath)</LibraryPath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<ReferencePath Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">$(VC_ReferencesPath_x86);</ReferencePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">C:\dev\lib;$(LibraryPath)</LibraryPath>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</EmbedManifest>
@ -216,15 +216,15 @@
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Test|Win32'">true</EmbedManifest>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</EmbedManifest>
<EmbedManifest Condition="'$(Configuration)|$(Platform)'=='FullRelease|Win32'">true</EmbedManifest>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">C:\dev\lib\x64;$(LibraryPath)</LibraryPath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Test|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Test|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">C:\dev\lib\x64;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='ReleaseXP|x64'">C:\dev\lib\x64;$(LibraryPath)</LibraryPath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='Test|x64'">C:\dev\lib\x64;$(LibraryPath)</LibraryPath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\ucrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\winrt;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\um;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\shared;$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.17763.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'">$(MSBuildProgramFiles32)\Windows Kits\10\Include\10.0.18362.0\km;c:\dev\include;$(IncludePath)</IncludePath>
<LibraryPath Condition="'$(Configuration)|$(Platform)'=='FullRelease|x64'">C:\dev\lib\x64;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Test|x64'">
@ -1080,6 +1080,7 @@
<ClCompile Include="..\..\debugmem.cpp" />
<ClCompile Include="..\..\def_icons.cpp" />
<ClCompile Include="..\..\devices.cpp" />
<ClCompile Include="..\..\disasm.cpp" />
<ClCompile Include="..\..\dlopen.cpp" />
<ClCompile Include="..\..\ethernet.cpp" />
<ClCompile Include="..\..\events.cpp" />

View File

@ -937,6 +937,9 @@
<ClCompile Include="..\..\pcem\mouse_ps2.cpp">
<Filter>x86</Filter>
</ClCompile>
<ClCompile Include="..\..\disasm.cpp">
<Filter>win32</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\resources\35floppy.ico">

View File

@ -264,12 +264,14 @@ out1:
int usesrc = 0, usedst = 0;
int srctype = 0;
int srcpos = -1, dstpos = -1;
int usecc = 0;
amodes srcmode = am_unknown, destmode = am_unknown;
int srcreg = -1, destreg = -1;
for (i = 0; i < lastbit; i++)
for (i = 0; i < lastbit; i++) {
bitcnt[i] = bitval[i] = 0;
}
vmsk = 1 << id.n_variable;
@ -285,6 +287,8 @@ out1:
bitcnt[currbit]++;
bitval[currbit] <<= 1;
bitval[currbit] |= bit_set;
if (currbit == bitC || currbit == bitc)
usecc = 1;
}
}
@ -717,6 +721,8 @@ endofline:
table68k[opc].mnemo = lookuptab[find].mnemo;
}
table68k[opc].cc = bitval[bitc];
table68k[opc].ccuse = usecc != 0;
mnemo = table68k[opc].mnemo;
if (mnemo == i_BTST
|| mnemo == i_BSET

View File

@ -325,7 +325,7 @@ static int32_t getDecimalExponent(int32_t aExp, uint64_t aSig)
zSig0 &= ~(((int64_t)(zSig1<<1) == 0) & 1);
}
zExp = zSign ? -zSig0 : zSig0;
zExp = zSign ? (0 - zSig0) : zSig0;
return zExp;
}