Mercurial > hg > xmms-sid
annotate src/xs_sidplay2.cpp @ 957:0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
FP, as it seems the engine configuration has some persistence despite
reconfiguration between loaded files if same engine object is retained. This
caused, for example, 2SID stereo tunes being played "mono" if played after a
normal 1-SID tune. Duh.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 20 Nov 2012 22:13:48 +0200 |
parents | a5b118c853f5 |
children | 828dce1195e6 |
rev | line source |
---|---|
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 /* |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
2 XMMS-SID - SIDPlay input plugin for X MultiMedia System (XMMS) |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
3 |
838
ae1f6418d093
libSIDPlay2-FP backend interface is now in a separate module. Configuration
Matti Hamalainen <ccr@tnsp.org>
parents:
834
diff
changeset
|
4 libSIDPlay2 support |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
5 |
324 | 6 Programmed and designed by Matti 'ccr' Hamalainen <ccr@tnsp.org> |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
7 (C) Copyright 1999-2012 Tecnic Software productions (TNSP) |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
8 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
9 This program is free software; you can redistribute it and/or modify |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
10 it under the terms of the GNU General Public License as published by |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
11 the Free Software Foundation; either version 2 of the License, or |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
12 (at your option) any later version. |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
13 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
14 This program is distributed in the hope that it will be useful, |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
15 but WITHOUT ANY WARRANTY; without even the implied warranty of |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
17 GNU General Public License for more details. |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
18 |
412
7f694e5a1493
Updated GNU GPL (new FSF address) and some cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
402
diff
changeset
|
19 You should have received a copy of the GNU General Public License along |
7f694e5a1493
Updated GNU GPL (new FSF address) and some cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
402
diff
changeset
|
20 with this program; if not, write to the Free Software Foundation, Inc., |
7f694e5a1493
Updated GNU GPL (new FSF address) and some cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
402
diff
changeset
|
21 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
22 */ |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
23 #include "xmms-sid.h" |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
24 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
25 #ifdef HAVE_SIDPLAY2 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
26 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
27 #include "xs_sidplay2.h" |
832 | 28 #include "xs_slsup.h" |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
29 #include "xs_config.h" |
402
f997b79a7251
More work on merging of improved STIL/SLDB handling code with completely
Matti Hamalainen <ccr@tnsp.org>
parents:
396
diff
changeset
|
30 |
833
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
31 #include <sidplay/sidplay2.h> |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
32 #if G_BYTE_ORDER == G_BIG_ENDIAN |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
33 # define SID2_NATIVE_UNSIGNED SID2_BIG_UNSIGNED |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
34 # define SID2_NATIVE_SIGNED SID2_BIG_SIGNED |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
35 #elif G_BYTE_ORDER == G_LITTLE_ENDIAN |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
36 # define SID2_NATIVE_UNSIGNED SID2_LITTLE_UNSIGNED |
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
37 # define SID2_NATIVE_SIGNED SID2_LITTLE_SIGNED |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
38 #else |
833
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
39 # error Unsupported endianess! |
692
0126579b6652
Actually compiles now with libsidplay2 COM API, but does not work yet.
Matti Hamalainen <ccr@tnsp.org>
parents:
660
diff
changeset
|
40 #endif |
694
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
41 |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
42 |
756
8299288df6d2
Rename internal structures.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
43 class XSSIDPlay2 { |
695 | 44 public: |
770 | 45 sidplay2 emu; |
765 | 46 sid2_config_t config; |
820 | 47 SidTune tune; |
765 | 48 |
756
8299288df6d2
Rename internal structures.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
49 XSSIDPlay2(void); |
795
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
50 virtual ~XSSIDPlay2(void); |
695 | 51 }; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
52 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
53 |
694
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
54 #ifdef HAVE_RESID_BUILDER |
833
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
55 # include <sidplay/builders/resid.h> |
694
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
56 #endif |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
57 |
694
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
58 #ifdef HAVE_HARDSID_BUILDER |
833
c0e892fa914a
Begin moving libSIDPlay2-FP stuff to a separete module by removing the
Matti Hamalainen <ccr@tnsp.org>
parents:
832
diff
changeset
|
59 # include <sidplay/builders/hardsid.h> |
694
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
60 #endif |
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
61 |
fd81a16434ed
Move builder header inclusions.
Matti Hamalainen <ccr@tnsp.org>
parents:
693
diff
changeset
|
62 |
820 | 63 XSSIDPlay2::XSSIDPlay2(void) : tune(0) |
695 | 64 { |
65 } | |
66 | |
67 | |
795
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
68 XSSIDPlay2::~XSSIDPlay2(void) |
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
69 { |
820 | 70 emu.load(NULL); |
795
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
71 } |
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
72 |
3e305ce076e8
Make old libSIDPlay2 support work again, the one available in most distros, such as Debian.
Matti Hamalainen <ccr@tnsp.org>
parents:
791
diff
changeset
|
73 |
270
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
74 /* We need to 'export' all this pseudo-C++ crap */ |
396 | 75 extern "C" { |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
76 |
75
653c9b0d1320
SIDPlay2 support "works" now. Borked problems with threads.
Matti Hamalainen <ccr@tnsp.org>
parents:
74
diff
changeset
|
77 |
270
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
78 /* Check if we can play the given file |
75
653c9b0d1320
SIDPlay2 support "works" now. Borked problems with threads.
Matti Hamalainen <ccr@tnsp.org>
parents:
74
diff
changeset
|
79 */ |
751 | 80 gboolean xs_sidplay2_probe(XSFile *f) |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
81 { |
954
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
82 gchar probe[16]; |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
83 |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
84 if (f == NULL || !xs_fread_str(f, (guint8 *) probe, sizeof(probe))) |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
85 return FALSE; |
954
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
86 |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
87 // Old libSIDPlay2 does not support PSIDv3, afaik |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
88 if (!strncmp(probe, "PSID", 4) && probe[4] == 0 && |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
89 probe[5] >= 1 && probe[5] <= 2) |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
90 return TRUE; |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
91 else |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
92 if (!strncmp(probe, "RSID", 4) && |
a5b118c853f5
Use xs_fread_str() and improve the probing of each backend to be more
Matti Hamalainen <ccr@tnsp.org>
parents:
869
diff
changeset
|
93 probe[4] == 0 && probe[5] == 2) |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
94 return TRUE; |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
95 else |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
96 return FALSE; |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
97 } |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
98 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
99 |
270
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
100 /* Initialize SIDPlay2 |
75
653c9b0d1320
SIDPlay2 support "works" now. Borked problems with threads.
Matti Hamalainen <ccr@tnsp.org>
parents:
74
diff
changeset
|
101 */ |
754
5557837fe5b6
Rename some more variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
753
diff
changeset
|
102 gboolean xs_sidplay2_init(XSEngineState * state) |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
103 { |
957
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
104 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
105 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
106 return TRUE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
107 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
108 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
109 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
110 /* Close SIDPlay2 engine |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
111 */ |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
112 void xs_sidplay2_close(XSEngineState * state) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
113 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
114 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
115 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
116 XSDEBUG("SIDPlay2 backend shutdown.\n"); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
117 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
118 xs_sidplay2_delete(state); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
119 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
120 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
121 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
122 /* Initialize current song and sub-tune |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
123 */ |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
124 gboolean xs_sidplay2_initsong(XSEngineState * state) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
125 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
126 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
127 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
128 if (!engine) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
129 return FALSE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
130 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
131 if (!engine->tune.selectSong(state->currSong)) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
132 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
133 xs_error("[SIDPlay2] tune.selectSong() failed\n"); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
134 return FALSE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
135 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
136 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
137 if (engine->emu.load(&(engine->tune)) < 0) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
138 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
139 xs_error("[SIDPlay2] emu.load() failed\n"); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
140 return FALSE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
141 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
142 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
143 if (engine->emu.config(engine->config) < 0) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
144 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
145 xs_error("[SIDPlay2] Emulator engine configuration failed!\n"); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
146 return FALSE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
147 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
148 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
149 return TRUE; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
150 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
151 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
152 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
153 /* Emulate and render audio data to given buffer |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
154 */ |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
155 guint xs_sidplay2_fillbuffer(XSEngineState * state, gchar * audioBuffer, guint audioBufSize) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
156 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
157 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
158 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
159 if (!engine) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
160 return 0; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
161 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
162 return engine->emu.play(audioBuffer, audioBufSize); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
163 } |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
164 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
165 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
166 /* Load a given SID-tune file |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
167 */ |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
168 gboolean xs_sidplay2_load(XSEngineState * state, gchar * filename) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
169 { |
756
8299288df6d2
Rename internal structures.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
170 XSSIDPlay2 *engine; |
957
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
171 guint8 *buf = NULL; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
172 size_t bufSize; |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
173 gint i; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
174 |
847
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
175 XSDEBUG("SIDPlay2 backend initializing.\n"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
176 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
177 /* Allocate internal structures */ |
756
8299288df6d2
Rename internal structures.
Matti Hamalainen <ccr@tnsp.org>
parents:
754
diff
changeset
|
178 engine = new XSSIDPlay2(); |
754
5557837fe5b6
Rename some more variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
753
diff
changeset
|
179 state->internal = engine; |
770 | 180 if (!engine) |
957
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
181 { |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
182 xs_error("Allocating XSSIDPlay2 compound backend object failed.\n"); |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
183 goto error; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
184 } |
75
653c9b0d1320
SIDPlay2 support "works" now. Borked problems with threads.
Matti Hamalainen <ccr@tnsp.org>
parents:
74
diff
changeset
|
185 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
186 /* Get current configuration */ |
847
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
187 XSDEBUG("SIDPlay2 emulation configuration\n"); |
770 | 188 engine->config = engine->emu.config(); |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
189 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
190 /* Configure channels and stuff */ |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
191 switch (state->audioChannels) |
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
192 { |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
193 case XS_CHN_AUTOPAN: |
765 | 194 engine->config.playback = sid2_stereo; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
195 break; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
197 case XS_CHN_STEREO: |
765 | 198 engine->config.playback = sid2_stereo; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
199 break; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
200 |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
201 case XS_CHN_MONO: |
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
202 default: |
765 | 203 engine->config.playback = sid2_mono; |
754
5557837fe5b6
Rename some more variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
753
diff
changeset
|
204 state->audioChannels = XS_CHN_MONO; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
205 break; |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
206 } |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
207 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
208 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
209 /* Memory mode settings */ |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
210 switch (xs_cfg.memoryMode) |
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
211 { |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
212 case XS_MPU_BANK_SWITCHING: |
765 | 213 engine->config.environment = sid2_envBS; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
214 break; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
215 |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
216 case XS_MPU_TRANSPARENT_ROM: |
765 | 217 engine->config.environment = sid2_envTP; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
218 break; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
220 case XS_MPU_PLAYSID_ENVIRONMENT: |
765 | 221 engine->config.environment = sid2_envPS; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
222 break; |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
223 |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
224 case XS_MPU_REAL: |
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
225 default: |
765 | 226 engine->config.environment = sid2_envR; |
744
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
227 xs_cfg.memoryMode = XS_MPU_REAL; |
c7fa50576c70
Initial implementation for supporting libSIDPlay2-FP (or libSIDPlay-FP, as
Matti Hamalainen <ccr@tnsp.org>
parents:
723
diff
changeset
|
228 break; |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
229 } |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
230 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
231 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
232 /* Audio parameters sanity checking and setup */ |
765 | 233 engine->config.precision = state->audioBitsPerSample; |
234 engine->config.frequency = state->audioFrequency; | |
748
d9d769b5dbe2
Remove oversampling support.
Matti Hamalainen <ccr@tnsp.org>
parents:
744
diff
changeset
|
235 |
74 | 236 |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
237 switch (state->audioBitsPerSample) |
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
238 { |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
239 case XS_RES_8BIT: |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
240 state->audioFormat = FMT_U8; |
765 | 241 engine->config.sampleFormat = SID2_LITTLE_UNSIGNED; |
758 | 242 break; |
359
b1a858b8cb1a
Re-indentation all (non-generated) code.
Matti Hamalainen <ccr@tnsp.org>
parents:
352
diff
changeset
|
243 |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
244 case XS_RES_16BIT: |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
245 default: |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
246 switch (state->audioFormat) |
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
247 { |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
248 case FMT_U16_LE: |
765 | 249 engine->config.sampleFormat = SID2_LITTLE_UNSIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
250 break; |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
251 |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
252 case FMT_U16_BE: |
765 | 253 engine->config.sampleFormat = SID2_BIG_UNSIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
254 break; |
127
ddb513bd2610
Improved audio format support, now supported formats are "queried" from
Matti Hamalainen <ccr@tnsp.org>
parents:
103
diff
changeset
|
255 |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
256 case FMT_U16_NE: |
765 | 257 engine->config.sampleFormat = SID2_NATIVE_UNSIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
258 break; |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
259 |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
260 case FMT_S16_LE: |
765 | 261 engine->config.sampleFormat = SID2_LITTLE_SIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
262 break; |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
263 |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
264 case FMT_S16_BE: |
765 | 265 engine->config.sampleFormat = SID2_BIG_SIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
266 break; |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
267 |
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
268 default: |
821
dea579b6c3b3
Oops, need to set FMT_S16_NE audio format for XMMS output backend as well
Matti Hamalainen <ccr@tnsp.org>
parents:
820
diff
changeset
|
269 state->audioFormat = FMT_S16_NE; |
765 | 270 engine->config.sampleFormat = SID2_NATIVE_SIGNED; |
757
9c135d421676
Clean up endianess handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
756
diff
changeset
|
271 break; |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
272 } |
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
273 break; |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
274 } |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
275 |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
276 /* Clockspeed settings */ |
765 | 277 switch (xs_cfg.clockSpeed) |
278 { | |
279 case XS_CLOCK_NTSC: | |
280 engine->config.clockDefault = SID2_CLOCK_NTSC; | |
281 break; | |
366
29c4484f1de2
Fixes in emulator engine configuration, make 'forceModel' option work.
Matti Hamalainen <ccr@tnsp.org>
parents:
364
diff
changeset
|
282 |
765 | 283 default: |
284 case XS_CLOCK_PAL: | |
285 engine->config.clockDefault = SID2_CLOCK_PAL; | |
286 xs_cfg.clockSpeed = XS_CLOCK_PAL; | |
287 break; | |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
288 } |
366
29c4484f1de2
Fixes in emulator engine configuration, make 'forceModel' option work.
Matti Hamalainen <ccr@tnsp.org>
parents:
364
diff
changeset
|
289 |
29c4484f1de2
Fixes in emulator engine configuration, make 'forceModel' option work.
Matti Hamalainen <ccr@tnsp.org>
parents:
364
diff
changeset
|
290 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
291 /* Configure rest of the emulation */ |
765 | 292 if (xs_cfg.forceSpeed) |
293 { | |
294 engine->config.clockForced = true; | |
295 engine->config.clockSpeed = engine->config.clockDefault; | |
296 } | |
297 else | |
298 { | |
299 engine->config.clockForced = false; | |
300 engine->config.clockSpeed = SID2_CLOCK_CORRECT; | |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
301 } |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
302 |
710
a6283cf95c99
Updated to work with latest distortion patched libSIDPlay2+reSID from Antti
Matti Hamalainen <ccr@tnsp.org>
parents:
702
diff
changeset
|
303 |
761 | 304 if (xs_cfg.sid2OptLevel < 0 || xs_cfg.sid2OptLevel > SID2_MAX_OPTIMISATION) |
305 { | |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
306 xs_error("Invalid sid2OptLevel=%d, falling back to %d.\n", |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
307 xs_cfg.sid2OptLevel, SID2_DEFAULT_OPTIMISATION); |
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
308 |
761 | 309 xs_cfg.sid2OptLevel = SID2_DEFAULT_OPTIMISATION; |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
310 } |
766
19e2745f75d8
Cosmetics and leftover cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents:
765
diff
changeset
|
311 engine->config.optimisation = xs_cfg.sid2OptLevel; |
366
29c4484f1de2
Fixes in emulator engine configuration, make 'forceModel' option work.
Matti Hamalainen <ccr@tnsp.org>
parents:
364
diff
changeset
|
312 |
765 | 313 engine->config.sidDefault = xs_cfg.mos8580 ? SID2_MOS8580 : SID2_MOS6581; |
314 engine->config.sidModel = xs_cfg.forceModel ? engine->config.sidDefault : SID2_MODEL_CORRECT; | |
315 engine->config.sidSamples = TRUE; | |
321
45ad9f7c1628
Improved compatibility, some fixes in reSID emulation initialization.
Matti Hamalainen <ccr@tnsp.org>
parents:
270
diff
changeset
|
316 |
847
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
317 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
318 /* Initialize builder object */ |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
319 XSDEBUG("init builder #%i, maxsids=%i\n", xs_cfg.sid2Builder, (engine->emu.info()).maxsids); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
320 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
321 switch (xs_cfg.sid2Builder) |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
322 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
323 #ifdef HAVE_RESID_BUILDER |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
324 case XS_BLD_RESID: |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
325 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
326 ReSIDBuilder *rs = new ReSIDBuilder("ReSID builder"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
327 if (rs) |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
328 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
329 engine->config.sidEmulation = rs; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
330 if (!*rs) return FALSE; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
331 rs->create((engine->emu.info()).maxsids); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
332 if (!*rs) return FALSE; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
333 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
334 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
335 break; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
336 #endif |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
337 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
338 #ifdef HAVE_HARDSID_BUILDER |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
339 case XS_BLD_HARDSID: |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
340 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
341 HardSIDBuilder *hs = new HardSIDBuilder("HardSID builder (FP)"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
342 engine->config.sidEmulation = (sidbuilder *) hs; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
343 if (hs) |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
344 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
345 hs->create((engine->emu.info()).maxsids); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
346 if (!*hs) |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
347 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
348 xs_error("hardSID->create() failed.\n"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
349 return FALSE; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
350 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
351 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
352 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
353 break; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
354 #endif |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
355 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
356 default: |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
357 xs_error("[SIDPlay2] Invalid or unsupported builder selected.\n"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
358 return FALSE; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
359 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
360 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
361 if (!engine->config.sidEmulation) |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
362 { |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
363 xs_error("[SIDPlay2] Could not initialize SIDBuilder object.\n"); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
364 return FALSE; |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
365 } |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
366 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
367 XSDEBUG("%s\n", engine->config.sidEmulation->credits()); |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
368 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
369 |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
370 if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE)) |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
371 goto error; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
372 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
373 engine->tune.read(buf, bufSize); |
820 | 374 if (!engine->tune) |
375 { | |
376 xs_error("Could not load file '%s': %s\n", | |
377 filename, (engine->tune.getInfo()).statusString); | |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
378 goto error; |
820 | 379 } |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
380 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
381 res = TRUE; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
382 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
383 error: |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
384 g_free(buf); |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
385 return res; |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
386 } |
270
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
387 |
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
388 |
583f5651abff
Cleanups, moved engine configuration to initialization function.
Matti Hamalainen <ccr@tnsp.org>
parents:
232
diff
changeset
|
389 /* Delete INTERNAL information |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
390 */ |
754
5557837fe5b6
Rename some more variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
753
diff
changeset
|
391 void xs_sidplay2_delete(XSEngineState * state) |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
392 { |
957
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
393 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
394 |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
395 if (engine) |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
396 delete engine; |
0e60e5d56fdd
Change how the backend emulator library is initialized for libSIDPlay2 and
Matti Hamalainen <ccr@tnsp.org>
parents:
954
diff
changeset
|
397 state->internal = NULL; |
526
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
398 } |
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
399 |
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
400 |
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
401 /* Hardware backend flushing |
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
402 */ |
754
5557837fe5b6
Rename some more variables.
Matti Hamalainen <ccr@tnsp.org>
parents:
753
diff
changeset
|
403 void xs_sidplay2_flush(XSEngineState * state) |
526
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
404 { |
779
8fb51f9ef44e
Fix some HardSID builder related things.
Matti Hamalainen <ccr@tnsp.org>
parents:
776
diff
changeset
|
405 XSSIDPlay2 *engine = (XSSIDPlay2 *) state->internal; |
526
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
406 |
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
407 #ifdef HAVE_HARDSID_BUILDER |
768 | 408 if (xs_cfg.sid2Builder == XS_BLD_HARDSID) |
409 { | |
779
8fb51f9ef44e
Fix some HardSID builder related things.
Matti Hamalainen <ccr@tnsp.org>
parents:
776
diff
changeset
|
410 ((HardSIDBuilder *) engine->config.sidEmulation)->flush(); |
768 | 411 } |
526
fa95d942f226
Header cleanup; Moved some types from xmms-sid.h to xs_player.h; Renamed few functions.
Matti Hamalainen <ccr@tnsp.org>
parents:
474
diff
changeset
|
412 #endif |
364
421e4fc13bce
More and more of indentation fixes.
Matti Hamalainen <ccr@tnsp.org>
parents:
359
diff
changeset
|
413 } |
73
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
414 |
2bc607888f53
Added libsidplay2 module, lots of reworking of internals, sidplay1 support
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
415 |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
416 /* This function gets most of the information, though we do miss some |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
417 * (those variables that are only set by libSIDPlay when tune is initialized). |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
418 * Rest of the information is acquired in xs_sidplay2_updateinfo() |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
419 */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
420 XSTuneInfo *xs_sidplay2_getinfo(const gchar *filename) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
421 { |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
422 XSTuneInfo *res = NULL; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
423 SidTune *tune = NULL; |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
424 SidTuneInfo info; |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
425 guint8 *buf = NULL; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
426 size_t bufSize; |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
427 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
428 /* Check if the tune exists and is readable */ |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
429 if (!xs_fload_buffer(filename, &buf, &bufSize, XS_SIDBUF_SIZE, TRUE)) |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
430 { |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
431 XSDEBUG("could not load file '%s'.\n", filename); |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
432 goto error; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
433 } |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
434 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
435 if ((tune = new SidTune(buf, bufSize)) == NULL) |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
436 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
437 XSDEBUG("could not initialize tune from '%s'.\n", filename); |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
438 goto error; |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
439 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
440 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
441 if (!tune->getStatus()) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
442 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
443 XSDEBUG("tune->getStatus() returned false for '%s'.\n", filename); |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
444 goto error; |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
445 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
446 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
447 /* Get general tune information */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
448 tune->getInfo(info); |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
449 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
450 /* Allocate tuneinfo structure and set information */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
451 res = xs_tuneinfo_new(filename, |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
452 info.songs, info.startSong, |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
453 info.infoString[0], info.infoString[1], info.infoString[2], |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
454 info.loadAddr, info.initAddr, info.playAddr, |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
455 info.dataFileLen, info.formatString, |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
456 info.sidModel |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
457 ); |
869
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
458 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
459 error: |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
460 if (tune) |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
461 delete tune; |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
462 |
3a9bf45178ff
Use xs_fload_buffer() again, to support potential VFS backends.
Matti Hamalainen <ccr@tnsp.org>
parents:
862
diff
changeset
|
463 g_free(buf); |
862
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
464 return res; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
465 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
466 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
467 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
468 /* Updates the information of currently playing tune |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
469 */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
470 gboolean xs_sidplay2_updateinfo(XSEngineState *state) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
471 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
472 XSSIDPlay2 *engine; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
473 SidTuneInfo info; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
474 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
475 /* Check if we have required structures initialized */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
476 if (!state || !state->tuneInfo || !state->internal) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
477 return FALSE; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
478 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
479 engine = (XSSIDPlay2 *) state->internal; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
480 if (!(engine->tune)) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
481 return FALSE; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
482 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
483 /* Get general tune information */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
484 engine->tune.getInfo(info); |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
485 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
486 /* NOTICE! Here we assume that libSIDPlay[12] headers define |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
487 * SIDTUNE_SIDMODEL_* similarly to our enums in xs_config.h ... |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
488 */ |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
489 state->tuneInfo->sidModel = info.sidModel; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
490 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
491 if (state->currSong > 0 && state->currSong <= state->tuneInfo->nsubTunes) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
492 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
493 gint tmpSpeed = info.clockSpeed; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
494 switch (info.clockSpeed) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
495 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
496 case SIDTUNE_CLOCK_PAL: tmpSpeed = XS_CLOCK_PAL; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
497 case SIDTUNE_CLOCK_NTSC: tmpSpeed = XS_CLOCK_NTSC; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
498 case SIDTUNE_CLOCK_ANY: tmpSpeed = XS_CLOCK_ANY; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
499 case SIDTUNE_CLOCK_UNKNOWN: |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
500 switch (info.songSpeed) |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
501 { |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
502 case SIDTUNE_SPEED_VBI: tmpSpeed = XS_CLOCK_VBI; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
503 case SIDTUNE_SPEED_CIA_1A: tmpSpeed = XS_CLOCK_CIA; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
504 default: tmpSpeed = info.songSpeed; break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
505 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
506 break; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
507 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
508 state->tuneInfo->subTunes[state->currSong - 1].tuneSpeed = tmpSpeed; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
509 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
510 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
511 return TRUE; |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
512 } |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
513 |
011ba70e271e
Major cleanups, make SIDPlayFP backend compile with libSIDPlayFP v1.0.0
Matti Hamalainen <ccr@tnsp.org>
parents:
849
diff
changeset
|
514 |
660
b0743dc9165d
Change tabs to 4 spaces, everywhere.
Matti Hamalainen <ccr@tnsp.org>
parents:
657
diff
changeset
|
515 } /* extern "C" */ |
847
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
516 #endif /* HAVE_SIDPLAY2 |
5b93bd8c7814
Cleanups, adjust backend configuration sequences, more error checking,
Matti Hamalainen <ccr@tnsp.org>
parents:
838
diff
changeset
|
517 */ |