Mercurial > repos > blastem
annotate jaguar.c @ 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.
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 06 Oct 2016 09:34:31 -0700 |
parents | 382614130914 |
children | f6e998227300 |
rev | line source |
---|---|
1080
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #include <stdint.h> |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #include <stdio.h> |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #include <stddef.h> |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include <stdlib.h> |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include "m68k_core.h" |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "jaguar.h" |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #include "util.h" |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 //BIOS Area Memory map |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 // 10 00 00 - 10 04 00 : Video mode/ Memory control registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 // 10 04 00 - 10 08 00 : CLUT |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 // 10 08 00 - 10 10 00 : Line buffer A |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 // 10 10 00 - 10 18 00 : Line buffer B |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 // 10 18 00 - 10 20 00 : Write Line buffer |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 // 10 21 00 - 10 30 00 : GPU/blitter registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 // 10 30 00 - 10 40 00 : GPU Local RAM (mirrored every 1K?) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 // 11 00 00 - 11 00 40 : Timer/Clock registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 // 11 40 00 - 11 40 04 : Joystick Interface |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 // 11 A1 00 - 11 A1 52 : DSP/DAC/I2S Registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 // 11 B0 00 - 11 D0 00 : DSP Local RAM (8KB) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 // 11 D0 00 - 11 E0 00 : Wave table ROM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 int headless = 1; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 void rom0_write_16(uint32_t address, jaguar_context *system, uint16_t value) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 //TODO: Use write_latch and write_pending to turn two 16-bit writes into a 32-bit one |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 //Documentation heavily suggests that writes to most registers should be 32-bits wide |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 if (address < 0x100000 || address >= 0x120000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 //Boot ROM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 fprintf(stderr, "Invalid write to Boot ROM - %X:%X\n", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 return; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 if (address < 0x103000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 if (address < 0x101000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 if (address < 0x100400) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 //Video mode / Memory control registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 fprintf(stderr, "Unhanelde write to video mode/memory control registers - %X:%X", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 } else if (address < 0x100800) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 //CLUT |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 address = address >> 1 & 255; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 system->clut[address] = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 //Line buffer A |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 system->line_buffer_a[address] = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 } else if (address < 0x101800) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 //Line buffer B |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 system->line_buffer_b[address] = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 } else if (address < 0x102100) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 //Write Line Buffer |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 system->write_line_buffer[address] = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 //GPU/Blitter registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 fprintf(stderr, "Unhandled write to GPU/Blitter registers %X: %X\n", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } else if (address < 0x11A100) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 if (address < 0x110000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 //GPU Local RAM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 uint32_t offset = address >> 2 & (GPU_RAM_BYTES / sizeof(uint32_t) - 1); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 uint32_t value32 = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 if (address & 2) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 system->gpu_local[offset] &= 0xFFFF0000; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 system->gpu_local[offset] &= 0x0000FFFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 value32 = value32 << 16; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 system->gpu_local[offset] |= value32; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 } else if (address < 0x114000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 //timer clock registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 fprintf(stderr, "Unhanelde write to timer/clock registers - %X:%X", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 //joystick interface |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 fprintf(stderr, "Unhanelde write to joystick interface - %X:%X", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 } else if (address < 0x11B000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 //DSP/DAC/I2S Registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 fprintf(stderr, "Unhanelde write to DSP/DAC/I2S registers - %X:%X", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 } else if (address < 0x11D000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 //DSP local RAM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 uint32_t offset = address >> 2 & (DSP_RAM_BYTES / sizeof(uint32_t) - 1); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 uint32_t value32 = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 if (address & 2) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 system->dsp_local[offset] &= 0xFFFF0000; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 system->dsp_local[offset] &= 0x0000FFFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 value32 = value32 << 16; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 system->gpu_local[offset] |= value32; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 //Wave table ROM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 fprintf(stderr, "Invalid write to wave table ROM - %X:%X\n", address, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 uint16_t rom0_read_16(uint32_t address, jaguar_context *system) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 if (address < 0x100000 || address >= 0x120000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 //Boot ROM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 address = address >> 1 & ((system->bios_size >> 1) - 1); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 return system->bios[address]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 if (address < 0x103000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 if (address < 0x101000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 if (address < 0x100400) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 //Video mode / Memory control registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 fprintf(stderr, "Unhandled read from video mode/memory control registers - %X", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 } else if (address < 0x100800) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 //CLUT |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 address = address >> 1 & 255; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 return system->clut[address]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 //Line buffer A |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 return system->line_buffer_a[address]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 } else if (address < 0x101800) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 //Line buffer B |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 return system->line_buffer_b[address]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 } else if (address < 0x102100) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 //Write Line Buffer |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 address = address >> 1 & 0x3FF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 if (address < LINEBUFFER_WORDS) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 return system->write_line_buffer[address]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 //GPU/Blitter registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 fprintf(stderr, "Unhandled read from GPU/Blitter registers %X\n", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 } else if (address < 0x11A100) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 if (address < 0x110000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 //GPU Local RAM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 uint32_t offset = address >> 2 & (GPU_RAM_BYTES / sizeof(uint32_t) - 1); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 if (address & 2) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 return system->gpu_local[offset]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 return system->gpu_local[offset] >> 16; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 } else if (address < 0x114000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 //timer clock registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 fprintf(stderr, "Unhandled read from timer/clock registers - %X", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 //joystick interface |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 fprintf(stderr, "Unhandled read from joystick interface - %X", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 } else if (address < 0x11B000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 //DSP/DAC/I2S Registers |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 fprintf(stderr, "Unhandled read from DSP/DAC/I2S registers - %X", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 } else if (address < 0x11D000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 //DSP local RAM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 uint32_t offset = address >> 2 & (DSP_RAM_BYTES / sizeof(uint32_t) - 1); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 if (address & 2) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 return system->dsp_local[offset]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 return system->dsp_local[offset] >> 16; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 } else { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 //Wave table ROM |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 fprintf(stderr, "Unhandled read from wave table ROM - %X\n", address); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 return 0xFFFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 void *rom0_write_m68k(uint32_t address, void *context, uint16_t value) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 rom0_write_16(address, ((m68k_context *)context)->system, value); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
183 return context; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
186 uint16_t rom0_read_m68k(uint32_t address, void *context) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
187 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
188 return rom0_read_16(address, ((m68k_context *)context)->system); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
189 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
190 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
191 void *rom0_write_m68k_b(uint32_t address, void *context, uint8_t value) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
193 //seems unlikely these areas support byte access |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
194 uint16_t value16 = value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
195 value16 |= value16 << 8; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
196 rom0_write_16(address, ((m68k_context *)context)->system, value16); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
197 return context; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
198 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
199 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
200 uint8_t rom0_read_m68k_b(uint32_t address, void *context) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
201 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
202 uint16_t value = rom0_read_16(address, ((m68k_context *)context)->system); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
203 if (address & 1) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
204 return value; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
205 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 return value >> 8; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
207 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
209 m68k_context * sync_components(m68k_context * context, uint32_t address) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
210 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 if (context->current_cycle > 0x10000000) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 context->current_cycle -= 0x10000000; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
213 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 return context; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
215 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 jaguar_context *init_jaguar(uint16_t *bios, uint32_t bios_size, uint16_t *cart, uint32_t cart_size) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 jaguar_context *system = calloc(1, sizeof(jaguar_context)); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 system->bios = bios; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 system->bios_size = bios_size; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 system->cart = cart; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 system->cart_size = cart_size; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 memmap_chunk jag_m68k_map[8]; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 for (uint32_t start = 0, index=0; index < 8; index++, start += 0x200000) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 jag_m68k_map[index].start = start; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 jag_m68k_map[index].end = start + 0x200000; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 jag_m68k_map[index].mask = index ? 0x1FFFFF : 0xFFFFFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 jag_m68k_map[index].aux_mask = bios_size - 1; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 jag_m68k_map[index].ptr_index = index; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 jag_m68k_map[index].flags = MMAP_READ | MMAP_WRITE | MMAP_PTR_IDX | MMAP_FUNC_NULL | MMAP_AUX_BUFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 jag_m68k_map[index].buffer = bios; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 jag_m68k_map[index].read_16 = rom0_read_m68k; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 jag_m68k_map[index].read_8 = rom0_read_m68k_b; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 jag_m68k_map[index].write_16 = rom0_write_m68k; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 jag_m68k_map[index].write_8 = rom0_write_m68k_b; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 m68k_options *opts = malloc(sizeof(m68k_options)); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 init_m68k_opts(opts, jag_m68k_map, 8, 2); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 system->m68k = init_68k_context(opts); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 system->m68k->system = system; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 return system; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 //modified copy of the version in blastem.c |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 uint16_t *load_rom(char * filename, uint32_t *size) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
250 FILE * f = fopen(filename, "rb"); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 if (!f) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 return 0; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 fseek(f, 0, SEEK_END); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 long filesize = ftell(f); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
256 fseek(f, 0, SEEK_SET); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
257 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
258 *size = nearest_pow2(filesize); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
259 uint16_t *cart = malloc(*size); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
260 if (filesize != fread(cart, 1, filesize, f)) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 fatal_error("Error reading from %s\n", filename); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 while (filesize < *size) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 cart[filesize / 2] = 0xFFFF; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 filesize += 2; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 fclose(f); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 return cart; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
272 //temporary main function until I clean up blastem.c |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
273 int main(int argc, char **argv) |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
275 if (argc < 3) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 fputs("Usage: blastjag BIOS ROM\n", stderr); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 return 1; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
279 uint32_t bios_size; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
280 uint16_t *bios = load_rom(argv[1], &bios_size); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 if (!bios_size) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
282 fatal_error("Failed to read BIOS from %s\n", argv[1]); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
283 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
284 uint32_t cart_size; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
285 uint16_t *cart = load_rom(argv[2], &cart_size); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
286 if (!bios_size) { |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
287 fatal_error("Failed to read cart from %s\n", argv[2]); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
288 } |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
289 jaguar_context *system = init_jaguar(bios, bios_size, cart, cart_size); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
290 m68k_reset(system->m68k); |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 return 0; |
382614130914
Some initial work on Atari Jaguar emulation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 } |