annotate trans.c @ 1771:e59045f781ce mame_interp

Fix a couple issues in manual memory map read/write functions
author Michael Pavone <pavone@retrodev.com>
date Tue, 12 Mar 2019 21:57:35 -0700
parents 2455662378ed
children 374a5ae694e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
467
140af5509ce7 Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents: 440
diff changeset
1 /*
140af5509ce7 Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents: 440
diff changeset
2 Copyright 2013 Michael Pavone
567
8e395210f50f Refactor gen_x86 to use an interface more like gen_arm and to remove the need for the caller to decide whether an 8-bit or 32-bit displacement is needed in the rdisp functions. Update m68k_to_x86 to use the new version of the gen_x86 functions and do some minor refactoring there in the process
Michael Pavone <pavone@retrodev.com>
parents: 467
diff changeset
3 This file is part of BlastEm.
467
140af5509ce7 Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents: 440
diff changeset
4 BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text.
140af5509ce7 Added copyright notice to source files and added GPL license text in COPYING
Mike Pavone <pavone@retrodev.com>
parents: 440
diff changeset
5 */
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "68kinst.h"
569
9b7fcf748be0 Rename x86_68k_options and m68k_to_x86.h to m68k_options and m68k_core.h respectively
Michael Pavone <pavone@retrodev.com>
parents: 567
diff changeset
7 #include "m68k_core.h"
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 #include "mem.h"
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 #include <stdio.h>
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 #include <stdlib.h>
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
11 #include <string.h>
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
12
836
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
13 int headless = 1;
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
14 void render_errorbox(char * title, char * buf)
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
15 {
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
16 }
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
17
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
18 void render_infobox(char * title, char * buf)
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
19 {
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
20 }
124a58fdcf3a Get trans program compiling again
Michael Pavone <pavone@retrodev.com>
parents: 709
diff changeset
21
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
22 uint64_t total_cycles;
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
23
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
24 m68k_context * sync_components(m68k_context * context, uint32_t address)
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
25 {
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
26 if (context->current_cycle > 0x80000000) {
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
27 context->current_cycle -= 0x80000000;
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
28 total_cycles += 0x80000000;
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
29 }
1304
5b90d7669eee Fix exit trace mode edge case. Call do_sync if trace mode bit is changed in eori sr
Michael Pavone <pavone@retrodev.com>
parents: 1303
diff changeset
30 if (context->status & M68K_STATUS_TRACE || context->trace_pending) {
1303
208803173ebc Implemented M68K trace mode. Some edge cases/SR update paths still need work
Michael Pavone <pavone@retrodev.com>
parents: 1082
diff changeset
31 context->target_cycle = context->current_cycle;
208803173ebc Implemented M68K trace mode. Some edge cases/SR update paths still need work
Michael Pavone <pavone@retrodev.com>
parents: 1082
diff changeset
32 }
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
33 return context;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
34 }
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35
1082
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
36 m68k_context *reset_handler(m68k_context *context)
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
37 {
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
38 m68k_print_regs(context);
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
39 total_cycles += context->current_cycle;
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
40 printf("%ld cycles\n", total_cycles);
1082
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
41 exit(0);
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
42 //unreachable
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
43 return context;
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
44 }
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
45
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 int main(int argc, char ** argv)
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 {
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 long filesize;
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 unsigned short *filebuf;
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 char disbuf[1024];
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 unsigned short * cur;
569
9b7fcf748be0 Rename x86_68k_options and m68k_to_x86.h to m68k_options and m68k_core.h respectively
Michael Pavone <pavone@retrodev.com>
parents: 567
diff changeset
52 m68k_options opts;
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 FILE * f = fopen(argv[1], "rb");
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 fseek(f, 0, SEEK_END);
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 filesize = ftell(f);
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 fseek(f, 0, SEEK_SET);
572
0f32f52fc98e Make some small changes in trans so that it is more likely to produce the same output as mustrans when given misbehaving programs. Add lea to testcases.txt. Improve the output of comparetest.py so that known issues can easily be separated from new ones.
Michael Pavone <pavone@retrodev.com>
parents: 570
diff changeset
57 filebuf = malloc(0x400000);
0f32f52fc98e Make some small changes in trans so that it is more likely to produce the same output as mustrans when given misbehaving programs. Add lea to testcases.txt. Improve the output of comparetest.py so that known issues can easily be separated from new ones.
Michael Pavone <pavone@retrodev.com>
parents: 570
diff changeset
58 memset(filebuf, 0, 0x400000);
0f32f52fc98e Make some small changes in trans so that it is more likely to produce the same output as mustrans when given misbehaving programs. Add lea to testcases.txt. Improve the output of comparetest.py so that known issues can easily be separated from new ones.
Michael Pavone <pavone@retrodev.com>
parents: 570
diff changeset
59 fread(filebuf, 2, filesize/2 > 0x200000 ? 0x200000 : filesize/2, f);
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 fclose(f);
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 for(cur = filebuf; cur - filebuf < (filesize/2); ++cur)
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 {
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 *cur = (*cur >> 8) | (*cur << 8);
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 }
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
65 memmap_chunk memmap[2];
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
66 memset(memmap, 0, sizeof(memmap_chunk)*2);
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
67 memmap[0].end = 0x400000;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
68 memmap[0].mask = 0xFFFFFF;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
69 memmap[0].flags = MMAP_READ;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
70 memmap[0].buffer = filebuf;
567
8e395210f50f Refactor gen_x86 to use an interface more like gen_arm and to remove the need for the caller to decide whether an 8-bit or 32-bit displacement is needed in the rdisp functions. Update m68k_to_x86 to use the new version of the gen_x86 functions and do some minor refactoring there in the process
Michael Pavone <pavone@retrodev.com>
parents: 467
diff changeset
71
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
72 memmap[1].start = 0xE00000;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
73 memmap[1].end = 0x1000000;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
74 memmap[1].mask = 0xFFFF;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
75 memmap[1].flags = MMAP_READ | MMAP_WRITE | MMAP_CODE;
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
76 memmap[1].buffer = malloc(64 * 1024);
572
0f32f52fc98e Make some small changes in trans so that it is more likely to produce the same output as mustrans when given misbehaving programs. Add lea to testcases.txt. Improve the output of comparetest.py so that known issues can easily be separated from new ones.
Michael Pavone <pavone@retrodev.com>
parents: 570
diff changeset
77 memset(memmap[1].buffer, 0, 64 * 1024);
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
78 init_m68k_opts(&opts, memmap, 2, 7);
1082
2ec5e6eaf81d Add support for specifying a reset handler in the M68K core. Adjust memory map initialization to handle extra field. Improved handling of out of bounds execution.
Michael Pavone <pavone@retrodev.com>
parents: 836
diff changeset
79 m68k_context * context = init_68k_context(&opts, reset_handler);
709
3f065c20423c Fix trans so it compiles again
Michael Pavone <pavone@retrodev.com>
parents: 572
diff changeset
80 context->mem_pointers[0] = memmap[0].buffer;
3f065c20423c Fix trans so it compiles again
Michael Pavone <pavone@retrodev.com>
parents: 572
diff changeset
81 context->mem_pointers[1] = memmap[1].buffer;
3f065c20423c Fix trans so it compiles again
Michael Pavone <pavone@retrodev.com>
parents: 572
diff changeset
82 context->target_cycle = context->sync_cycle = 0x80000000;
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
83 /*
212
e657a99b5abf Fixed up trans for changes to translate_m68k_stream, but still need to deal with missing callbacks.
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
84 uint32_t address;
e657a99b5abf Fixed up trans for changes to translate_m68k_stream, but still need to deal with missing callbacks.
Mike Pavone <pavone@retrodev.com>
parents: 19
diff changeset
85 address = filebuf[2] << 16 | filebuf[3];
1507
2455662378ed Added MAME Z80 core, re-enabled 68K tracing in Musashi core, disabled a bunch of code gen stuff when using interpreters from MAME
Michael Pavone <pavone@retrodev.com>
parents: 1304
diff changeset
86 translate_m68k_stream(address, context);*/
709
3f065c20423c Fix trans so it compiles again
Michael Pavone <pavone@retrodev.com>
parents: 572
diff changeset
87 m68k_reset(context);
18
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 return 0;
3e7bfde7606e M68K to x86 translation works for a limited subset of instructions and addressing modes
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 }
440
306986209cba Fix 68K test harness
Mike Pavone <pavone@retrodev.com>
parents: 212
diff changeset
90