Mercurial > repos > blastem
annotate libblastem.c @ 1925:039553703c20
Don't apply address and cd register changes to the 'live' registers until pending flag is cleared, but do preserve the upper address bits in the latch. Fixes regression in Overdrive 2 while preserving fix to Mona in 344 bytes
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 13 Apr 2020 20:43:25 -0700 |
parents | 81b059e3ded6 |
children | 94f37e4b1469 |
rev | line source |
---|---|
1688
395f684c5379
Fixed the most glaring issues in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1687
diff
changeset
|
1 #include <stdlib.h> |
395f684c5379
Fixed the most glaring issues in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1687
diff
changeset
|
2 #include <string.h> |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #include "libretro.h" |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 #include "system.h" |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #include "util.h" |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #include "vdp.h" |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #include "render.h" |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 #include "io.h" |
1924
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
9 #include "genesis.h" |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
10 #include "sms.h" |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 static retro_environment_t retro_environment; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 RETRO_API void retro_set_environment(retro_environment_t re) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 retro_environment = re; |
1864
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
16 # define input_descriptor_macro(pad_num) \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
17 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT, "D-Pad Left" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
18 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP, "D-Pad Up" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
19 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN, "D-Pad Down" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
20 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT, "D-Pad Right" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
21 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
22 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "B" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
23 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Y" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
24 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "X" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
25 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "Z" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
26 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "C" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
27 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Mode" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
28 { pad_num, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" }, \ |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
29 |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
30 static const struct retro_input_descriptor desc[] = { |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
31 input_descriptor_macro(0) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
32 input_descriptor_macro(1) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
33 input_descriptor_macro(2) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
34 input_descriptor_macro(3) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
35 input_descriptor_macro(4) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
36 input_descriptor_macro(5) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
37 input_descriptor_macro(6) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
38 input_descriptor_macro(7) |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
39 { 0 }, |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
40 }; |
96323d73b8ab
add input descriptors
hizzlekizzle <hizzlekizzle@users.noreply.github.com>
parents:
1822
diff
changeset
|
41 |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
42 re(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, (void *)desc); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 static retro_video_refresh_t retro_video_refresh; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 RETRO_API void retro_set_video_refresh(retro_video_refresh_t rvf) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 retro_video_refresh = rvf; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 static retro_audio_sample_t retro_audio_sample; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 RETRO_API void retro_set_audio_sample(retro_audio_sample_t ras) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 retro_audio_sample = ras; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 RETRO_API void retro_set_audio_sample_batch(retro_audio_sample_batch_t rasb) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 static retro_input_poll_t retro_input_poll; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 RETRO_API void retro_set_input_poll(retro_input_poll_t rip) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 retro_input_poll = rip; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 static retro_input_state_t retro_input_state; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 RETRO_API void retro_set_input_state(retro_input_state_t ris) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 retro_input_state = ris; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 int headless = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 int exit_after = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 int z80_enabled = 1; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 char *save_filename; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 tern_node *config; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 uint8_t use_native_states = 1; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 system_header *current_system; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 system_media media; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 RETRO_API void retro_init(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 RETRO_API void retro_deinit(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 { |
1691
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
88 if (current_system) { |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
89 retro_unload_game(); |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
90 } |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 RETRO_API unsigned retro_api_version(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 return RETRO_API_VERSION; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 RETRO_API void retro_get_system_info(struct retro_system_info *info) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 info->library_name = "BlastEm"; |
1819
4fb9af0c65b6
Update verison number in liblastem.c
Mike Pavone <pavone@retrodev.com>
parents:
1818
diff
changeset
|
101 info->library_version = "0.6.3-pre"; //TODO: share this with blastem.c |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 info->valid_extensions = "md|gen|sms|bin|rom"; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 info->need_fullpath = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 info->block_extract = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 static vid_std video_standard; |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
108 static uint32_t last_width, last_height; |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
109 static uint32_t overscan_top, overscan_bot, overscan_left, overscan_right; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
110 static void update_overscan(void) |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
111 { |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
112 uint8_t overscan; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
113 retro_environment(RETRO_ENVIRONMENT_GET_OVERSCAN, &overscan); |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
114 if (overscan) { |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
115 overscan_top = overscan_bot = overscan_left = overscan_right = 0; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
116 } else { |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
117 if (video_standard == VID_NTSC) { |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
118 overscan_top = 11; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
119 overscan_bot = 8; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
120 overscan_left = 13; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
121 overscan_right = 14; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
122 } else { |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
123 overscan_top = 30; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
124 overscan_bot = 24; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
125 overscan_left = 13; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
126 overscan_right = 14; |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
127 } |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
128 } |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
129 } |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
130 |
1889
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
131 static int32_t sample_rate; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 RETRO_API void retro_get_system_av_info(struct retro_system_av_info *info) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 { |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
134 update_overscan(); |
1694
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
135 last_width = LINEBUF_SIZE; |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
136 info->geometry.base_width = info->geometry.max_width = LINEBUF_SIZE - (overscan_left + overscan_right); |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
137 info->geometry.base_height = (video_standard == VID_NTSC ? 243 : 294) - (overscan_top + overscan_bot); |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
138 last_height = info->geometry.base_height; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
139 info->geometry.max_height = info->geometry.base_height * 2; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 info->geometry.aspect_ratio = 0; |
1889
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
141 double master_clock = video_standard == VID_NTSC ? 53693175 : 53203395; |
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
142 double lines = video_standard == VID_NTSC ? 262 : 313; |
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
143 info->timing.fps = master_clock / (3420.0 * lines); |
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
144 info->timing.sample_rate = master_clock / (7 * 6 * 24); //sample rate of YM2612 |
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
145 sample_rate = info->timing.sample_rate; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 RETRO_API void retro_set_controller_port_device(unsigned port, unsigned device) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 /* Resets the current game. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 RETRO_API void retro_reset(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 current_system->soft_reset(current_system); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 /* Runs the game for one video frame. |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 * During retro_run(), input_poll callback must be called at least once. |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 * |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 * If a frame is not rendered for reasons where a game "dropped" a frame, |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 * this still counts as a frame, and retro_run() should explicitly dupe |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 * a frame if GET_CAN_DUPE returns true. |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 * In this case, the video callback can take a NULL argument for data. |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 static uint8_t started; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 RETRO_API void retro_run(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 if (started) { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 current_system->resume_context(current_system); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 } else { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 current_system->start_context(current_system, NULL); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 started = 1; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 /* Returns the amount of data the implementation requires to serialize |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 * internal state (save states). |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 * Between calls to retro_load_game() and retro_unload_game(), the |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 * returned size is never allowed to be larger than a previous returned |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 * value, to ensure that the frontend can allocate a save state buffer once. |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 */ |
1690
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
183 static size_t serialize_size_cache; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 RETRO_API size_t retro_serialize_size(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 { |
1690
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
186 if (!serialize_size_cache) { |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
187 uint8_t *tmp = current_system->serialize(current_system, &serialize_size_cache); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
188 free(tmp); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
189 } |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
190 return serialize_size_cache; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
191 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
193 /* Serializes internal state. If failed, or size is lower than |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
194 * retro_serialize_size(), it should return false, true otherwise. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
195 RETRO_API bool retro_serialize(void *data, size_t size) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
196 { |
1690
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
197 size_t actual_size; |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
198 uint8_t *tmp = current_system->serialize(current_system, &actual_size); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
199 if (actual_size > size) { |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
200 free(tmp); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
201 return 0; |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
202 } |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
203 memcpy(data, tmp, actual_size); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
204 free(tmp); |
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
205 return 1; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
207 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 RETRO_API bool retro_unserialize(const void *data, size_t size) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
209 { |
1690
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
210 current_system->deserialize(current_system, (uint8_t *)data, size); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 return 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
213 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 RETRO_API void retro_cheat_reset(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
215 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 RETRO_API void retro_cheat_set(unsigned index, bool enabled, const char *code) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 /* Loads a game. */ |
1924
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
223 static system_type stype; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 RETRO_API bool retro_load_game(const struct retro_game_info *game) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 { |
1690
319d90025d50
Implement serialization/deserialization in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1689
diff
changeset
|
226 serialize_size_cache = 0; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 if (game->path) { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 media.dir = path_dirname(game->path); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 media.name = basename_no_extension(game->path); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 media.extension = path_extension(game->path); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 media.buffer = malloc(nearest_pow2(game->size)); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 memcpy(media.buffer, game->data, game->size); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 media.size = game->size; |
1924
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
235 stype = detect_system_type(&media); |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
236 current_system = alloc_config_system(stype, &media, 0, 0); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 unsigned format = RETRO_PIXEL_FORMAT_XRGB8888; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 retro_environment(RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &format); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 return current_system != NULL; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 /* Loads a "special" kind of game. Should not be used, |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 * except in extreme cases. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 RETRO_API bool retro_load_game_special(unsigned game_type, const struct retro_game_info *info, size_t num_info) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 return retro_load_game(info); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
250 /* Unloads a currently loaded game. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 RETRO_API void retro_unload_game(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 free(media.dir); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 free(media.name); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 free(media.extension); |
1691
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
256 media.dir = media.name = media.extension = NULL; |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
257 //buffer is freed by the context |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
258 media.buffer = NULL; |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
259 current_system->free_context(current_system); |
e96d0d3bec7f
Don't leak a system context when a game is unloaded
Mike Pavone <pavone@retrodev.com>
parents:
1690
diff
changeset
|
260 current_system = NULL; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 /* Gets region of game. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 RETRO_API unsigned retro_get_region(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 return video_standard == VID_NTSC ? RETRO_REGION_NTSC : RETRO_REGION_PAL; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 /* Gets region of memory. */ |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 RETRO_API void *retro_get_memory_data(unsigned id) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 { |
1924
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
272 if (id == RETRO_MEMORY_SYSTEM_RAM) |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
273 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
274 switch (stype) |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
275 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
276 case SYSTEM_GENESIS: |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
277 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
278 genesis_context *gen = (genesis_context *)current_system; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
279 return (uint8_t *)gen->work_ram; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
280 } |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
281 break; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
282 #ifndef NO_Z80 |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
283 case SYSTEM_SMS: |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
284 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
285 sms_context *sms = (sms_context *)current_system; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
286 return sms->ram; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
287 } |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
288 break; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
289 #endif |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
290 } |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
291 } |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 return NULL; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
294 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 RETRO_API size_t retro_get_memory_size(unsigned id) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 { |
1924
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
297 if (id == RETRO_MEMORY_SYSTEM_RAM) |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
298 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
299 switch (stype) |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
300 { |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
301 case SYSTEM_GENESIS: |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
302 return RAM_WORDS * sizeof(uint16_t); |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
303 #ifndef NO_Z80 |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
304 case SYSTEM_SMS: |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
305 return SMS_RAM_SIZE; |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
306 #endif |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
307 } |
81b059e3ded6
Add memory hook for cheat/rumble/cheevos support
negativeExponent <negativeExponent@users.noreply.github.com>
parents:
1889
diff
changeset
|
308 } |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
309 return 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
310 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
311 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
312 //blastem render backend API implementation |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
313 uint32_t render_map_color(uint8_t r, uint8_t g, uint8_t b) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
314 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
315 return r << 16 | g << 8 | b; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
317 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
318 uint8_t render_create_window(char *caption, uint32_t width, uint32_t height, window_close_handler close_handler) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
319 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
320 //not supported in lib build |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
321 return 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
322 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
323 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
324 void render_destroy_window(uint8_t which) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
325 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
326 //not supported in lib build |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
327 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
328 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
329 static uint32_t fb[LINEBUF_SIZE * 294 * 2]; |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
330 static uint8_t last_fb; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
331 uint32_t *render_get_framebuffer(uint8_t which, int *pitch) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
332 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
333 *pitch = LINEBUF_SIZE * sizeof(uint32_t); |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
334 if (which != last_fb) { |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
335 *pitch = *pitch * 2; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
336 } |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
337 |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
338 if (which) { |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
339 return fb + LINEBUF_SIZE; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
340 } else { |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
341 return fb; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
342 } |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
343 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
344 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
345 void render_framebuffer_updated(uint8_t which, int width) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
346 { |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
347 unsigned height = (video_standard == VID_NTSC ? 243 : 294) - (overscan_top + overscan_bot); |
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
348 width -= (overscan_left + overscan_right); |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
349 unsigned base_height = height; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
350 if (which != last_fb) { |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
351 height *= 2; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
352 last_fb = which; |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
353 } |
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
354 if (width != last_width || height != last_height) { |
1694
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
355 struct retro_game_geometry geometry = { |
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
356 .base_width = width, |
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
357 .base_height = height, |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
358 .aspect_ratio = (float)LINEBUF_SIZE / base_height |
1694
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
359 }; |
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
360 retro_environment(RETRO_ENVIRONMENT_SET_GEOMETRY, &geometry); |
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
361 last_width = width; |
1695
3c34122754ac
Properly support interlace in libretro build
Michael Pavone <pavone@retrodev.com>
parents:
1694
diff
changeset
|
362 last_height = height; |
1694
9e4dd1595f37
Fix aspect ratio for H32 games
Michael Pavone <pavone@retrodev.com>
parents:
1691
diff
changeset
|
363 } |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
364 retro_video_refresh(fb + overscan_left + LINEBUF_SIZE * overscan_top, width, height, LINEBUF_SIZE * sizeof(uint32_t)); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
365 current_system->request_exit(current_system); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
366 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
367 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
368 uint8_t render_get_active_framebuffer(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
369 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
370 return 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
371 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
372 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
373 void render_set_video_standard(vid_std std) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
374 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
375 video_standard = std; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
376 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
377 |
1822
8500bd987dda
Make libretro target successfully build for Windows and possibly Mac
Mike Pavone <pavone@retrodev.com>
parents:
1819
diff
changeset
|
378 int render_fullscreen(void) |
8500bd987dda
Make libretro target successfully build for Windows and possibly Mac
Mike Pavone <pavone@retrodev.com>
parents:
1819
diff
changeset
|
379 { |
8500bd987dda
Make libretro target successfully build for Windows and possibly Mac
Mike Pavone <pavone@retrodev.com>
parents:
1819
diff
changeset
|
380 return 1; |
8500bd987dda
Make libretro target successfully build for Windows and possibly Mac
Mike Pavone <pavone@retrodev.com>
parents:
1819
diff
changeset
|
381 } |
8500bd987dda
Make libretro target successfully build for Windows and possibly Mac
Mike Pavone <pavone@retrodev.com>
parents:
1819
diff
changeset
|
382 |
1881
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
383 uint32_t render_overscan_top() |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
384 { |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
385 return overscan_top; |
1881
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
386 } |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
387 |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
388 uint32_t render_overscan_bot() |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
389 { |
1882
62e8a8833e39
Implement overscan crop in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1881
diff
changeset
|
390 return overscan_bot; |
1881
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
391 } |
55198fc9cc1f
Don't render lines that are cropped by overscan. Allows submitting frame earlier when bottom overscan is non-zero which can reduce latency in some cases
Mike Pavone <pavone@retrodev.com>
parents:
1868
diff
changeset
|
392 |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
393 void process_events() |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
394 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
395 static int16_t prev_state[2][RETRO_DEVICE_ID_JOYPAD_L2]; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
396 static const uint8_t map[] = { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 BUTTON_A, BUTTON_X, BUTTON_MODE, BUTTON_START, DPAD_UP, DPAD_DOWN, |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
398 DPAD_LEFT, DPAD_RIGHT, BUTTON_B, BUTTON_Y, BUTTON_Z, BUTTON_C |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
399 }; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
400 //TODO: handle other input device types |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
401 //TODO: handle more than 2 ports when appropriate |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
402 retro_input_poll(); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 for (int port = 0; port < 2; port++) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
404 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
405 for (int id = RETRO_DEVICE_ID_JOYPAD_B; id < RETRO_DEVICE_ID_JOYPAD_L2; id++) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
406 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
407 int16_t new_state = retro_input_state(port, RETRO_DEVICE_JOYPAD, 0, id); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
408 if (new_state != prev_state[port][id]) { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
409 if (new_state) { |
1689
7f42a93f18a4
Have a suitable default IO port configuration when nonIO is present from the config file. Fixed off by one in processing gamepad button events in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1688
diff
changeset
|
410 current_system->gamepad_down(current_system, port + 1, map[id]); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
411 } else { |
1689
7f42a93f18a4
Have a suitable default IO port configuration when nonIO is present from the config file. Fixed off by one in processing gamepad button events in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1688
diff
changeset
|
412 current_system->gamepad_up(current_system, port + 1, map[id]); |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
413 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
414 prev_state[port][id] = new_state; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
415 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
416 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
417 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
418 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
419 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
420 void render_errorbox(char *title, char *message) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
421 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
422 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
423 void render_warnbox(char *title, char *message) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
424 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
425 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 void render_infobox(char *title, char *message) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
427 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
429 |
1868
bfacedbae5f0
Fix libretro and stateview targets
Michael Pavone <pavone@retrodev.com>
parents:
1864
diff
changeset
|
430 typedef struct { |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 int32_t freq; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
432 int32_t left_accum; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
433 int32_t right_accum; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
434 int32_t num_samples; |
1868
bfacedbae5f0
Fix libretro and stateview targets
Michael Pavone <pavone@retrodev.com>
parents:
1864
diff
changeset
|
435 } audio_source; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
436 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
437 static audio_source *audio_sources[8]; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
438 static uint8_t num_audio_sources; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
439 audio_source *render_audio_source(uint64_t master_clock, uint64_t sample_divider, uint8_t channels) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
440 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
441 audio_sources[num_audio_sources] = calloc(1, sizeof(audio_source)); |
1688
395f684c5379
Fixed the most glaring issues in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1687
diff
changeset
|
442 audio_sources[num_audio_sources]->freq = master_clock / sample_divider; |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
443 return audio_sources[num_audio_sources++]; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
444 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
445 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 void render_audio_adjust_clock(audio_source *src, uint64_t master_clock, uint64_t sample_divider) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
447 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
449 |
1817
03895a4585c3
Fix build breakage for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1695
diff
changeset
|
450 void render_audio_source_gaindb(audio_source *src, float gain) |
03895a4585c3
Fix build breakage for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1695
diff
changeset
|
451 { |
03895a4585c3
Fix build breakage for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1695
diff
changeset
|
452 //TODO: Implement this once I hook up a core option for individual FM/PSG gain |
03895a4585c3
Fix build breakage for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1695
diff
changeset
|
453 } |
03895a4585c3
Fix build breakage for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1695
diff
changeset
|
454 |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
455 static void check_put_sample(void) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
456 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
457 for (int i = 0; i < num_audio_sources; i++) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
458 { |
1889
377f110e4cea
Report more accurate frame and sample rates to frontend in libretro target
Michael Pavone <pavone@retrodev.com>
parents:
1882
diff
changeset
|
459 int32_t min_samples = audio_sources[i]->freq / sample_rate; |
1688
395f684c5379
Fixed the most glaring issues in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1687
diff
changeset
|
460 if (audio_sources[i]->num_samples < min_samples) { |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
461 return; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
462 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
463 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
464 int16_t left = 0, right = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
465 for (int i = 0; i < num_audio_sources; i++) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
466 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
467 left += audio_sources[i]->left_accum / audio_sources[i]->num_samples; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
468 right += audio_sources[i]->right_accum / audio_sources[i]->num_samples; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
469 audio_sources[i]->left_accum = audio_sources[i]->right_accum = audio_sources[i]->num_samples = 0; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
470 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
471 retro_audio_sample(left, right); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
472 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
473 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
474 void render_put_mono_sample(audio_source *src, int16_t value) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
475 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
476 src->left_accum += value; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
477 src->right_accum += value; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
478 src->num_samples++; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
479 check_put_sample(); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
480 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
481 void render_put_stereo_sample(audio_source *src, int16_t left, int16_t right) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
482 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
483 src->left_accum += left; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
484 src->right_accum += right; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
485 src->num_samples++; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
486 check_put_sample(); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
487 } |
1688
395f684c5379
Fixed the most glaring issues in libretro build
Mike Pavone <pavone@retrodev.com>
parents:
1687
diff
changeset
|
488 |
1687
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
489 void render_free_source(audio_source *src) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
490 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
491 int index; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
492 for (index = 0; index < num_audio_sources; index++) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
493 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
494 if (audio_sources[index] == src) { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
495 break; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
496 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
497 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
498 num_audio_sources--; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
499 audio_sources[index] = audio_sources[num_audio_sources]; |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
500 free(src); |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
501 } |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
502 |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
503 void bindings_set_mouse_mode(uint8_t mode) |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
504 { |
6c54bb5fe3b3
Hacky WIP libertro implementation
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
505 } |
1818
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
506 |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
507 extern const char rom_db_data[]; |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
508 char *read_bundled_file(char *name, uint32_t *sizeret) |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
509 { |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
510 if (!strcmp(name, "rom.db")) { |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
511 *sizeret = strlen(rom_db_data); |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
512 char *ret = malloc(*sizeret+1); |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
513 memcpy(ret, rom_db_data, *sizeret + 1); |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
514 return ret; |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
515 } |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
516 return NULL; |
243f3a7247f9
Include ROM DB in library binary for libretro target
Mike Pavone <pavone@retrodev.com>
parents:
1817
diff
changeset
|
517 } |