Update to E-UAE 0.8.29 (only the relevant files for WII port)

This commit is contained in:
fabio.olimpieri 2014-01-25 11:19:44 +00:00
parent a20bd73360
commit bb717201a4
40 changed files with 1888 additions and 1701 deletions

View File

@ -29,6 +29,7 @@ SRCS := $(wildcard $(SRC_DIR)/*.c $(SRC_DIR)/caps/*.c $(SRC_DIR)/dms/*.c $(SRC_D
$(SRC_DIR)/gfxdep/sdlkeys.c \ $(SRC_DIR)/gfxdep/sdlkeys.c \
$(SRC_DIR)/guidep/gui-sdl.c \ $(SRC_DIR)/guidep/gui-sdl.c \
$(SRC_DIR)/guidep/menu.c \ $(SRC_DIR)/guidep/menu.c \
$(SRC_DIR)/guidep/VirtualKeyboard.c \
$(SRC_DIR)/joydep/joystick.c \ $(SRC_DIR)/joydep/joystick.c \
$(SRC_DIR)/machdep/support.c \ $(SRC_DIR)/machdep/support.c \
$(SRC_DIR)/osdep/main.c \ $(SRC_DIR)/osdep/main.c \
@ -61,6 +62,7 @@ SRCS := $(filter-out \
src/gengenblitter.c \ src/gengenblitter.c \
src/genlinetoscr.c \ src/genlinetoscr.c \
src/linetoscr.c \ src/linetoscr.c \
src/make_hdf.c \
src/readdisk.c \ src/readdisk.c \
src/scsiemul.c \ src/scsiemul.c \
src/svgancui.c \ src/svgancui.c \
@ -70,7 +72,7 @@ SRCS := $(filter-out \
genlinetoscr_args="-b" genlinetoscr_args="-b"
# Library object files. # Library object files.
OBJS := $(subst $(SRC_DIR),$(OBJ_DIR),$(SRCS:.c=.o)) $(OBJ_DIR)/guidep/VirtualKeyboard.o OBJS := $(subst $(SRC_DIR),$(OBJ_DIR),$(SRCS:.c=.o))
# Test source files. # Test source files.
# It can be useful to switch this variable around to select individual tests which are problematic. # It can be useful to switch this variable around to select individual tests which are problematic.
@ -165,7 +167,7 @@ uae.dol: uae.elf
@echo ---- @echo ----
# Compilation flags. # Compilation flags.
COMMON_FLAGS := -g -O2 -ftree-vectorize -ffast-math -pipe -fomit-frame-pointer -fdiagnostics-show-option $(MACHDEP) -Wall -Wno-unused -Wno-format COMMON_FLAGS := -g -O2 -ftree-vectorize -ffast-math -pipe -fdiagnostics-show-option $(MACHDEP) -Wall -Wno-unused -Wno-format
INCLUDES := -Isrc/md-generic/ -Isrc/include -Isrc -I$(DEVKITPRO)/libogc/include -I$(DEVKITPRO)/libogc/include/SDL -I$(PORTLIBS)/include INCLUDES := -Isrc/md-generic/ -Isrc/include -Isrc -I$(DEVKITPRO)/libogc/include -I$(DEVKITPRO)/libogc/include/SDL -I$(PORTLIBS)/include
DEFINES := -DOS_WITHOUT_MEMORY_MANAGEMENT -DSAVESTATE -DUSE_SDL -DSUPPORT_THREADS -DCPUEMU_0 -DCPUEMU_5 -DCPUEMU_6 \ DEFINES := -DOS_WITHOUT_MEMORY_MANAGEMENT -DSAVESTATE -DUSE_SDL -DSUPPORT_THREADS -DCPUEMU_0 -DCPUEMU_5 -DCPUEMU_6 \
-DFPUEMU -DAGA -DAUTOCONFIG -DFILESYS \ -DFPUEMU -DAGA -DAUTOCONFIG -DFILESYS \

69
README
View File

@ -1,5 +1,5 @@
E-UAE 0.8.29-WIP4 E-UAE 0.8.29
================= ============
E-UAE is an Amiga emulator, a program that allows you to run software E-UAE is an Amiga emulator, a program that allows you to run software
designed for Amiga computers on other platforms, such as Linux or Mac designed for Amiga computers on other platforms, such as Linux or Mac
@ -40,43 +40,42 @@ are available for purchase online from Cloanto (publishers of the
Amiga Forever distribution). See http://www.amigaforever.com/ Amiga Forever distribution). See http://www.amigaforever.com/
What's new since 0.8.29-WIP3 What's new since 0.8.29-WIP4
============================ ============================
A huge amount of work has gone into E-UAE since the last public New features:
release. Not of all of this work will be readily apparent to users * Added a command-line tool for generating blank hardfile images,
since it took place under the surface. However, some user-visible called make_hdf
changes include: * Support for IPF floppy images now supported on OS X (and officially
on AMD64/Linux now that libcapsimage is publically available). Go to
http://www.softpres.org/ to download the plug-in.
* X-Arcade joystick supported (thanks to Robert Hurst for the patch).
* Build scripts now include a compile-time option --disable-fpu to
disable building of FPU emulation.
* Emulation core from WinUAE 1.3.x merged. Performance improvements:
* Much more stable on SMP hosts. * Some small custom chip and blitter tweaks merged from WinUAE 1.4.3.
* Builds on Solaris x86 (with GCC). * Some minor performance optimizations to blitter emulation, floppy
* Integrated mouse-hack feature merged from WinUAE (this synchronizes controller emulation and rendering code. (Thanks to Mustafa Tufan,
the Amiga mouse pointer with the host pointer when E-UAE is running developer of PSP and GP2x ports of E-UAE, for a couple of these).
in a window on your desktop) merged from WinUAE. The old AmigaOS
mousehack tool is no longer required.
* New, easier-to-use Linux SCSI back-end (Jochen Becher).
* Experimental GL renderer in SDL display back-end (originally from
Jochen Becher but mostly re-written). On most platforms this is yet
to offer much over the existing 2D renderer, but on Mac OS X it
offers significantly better performance. Enabled with
'sdl.use_gl=true'.
* Support for the 'uae-configuration' tool merged from WinUAE. This is
an AmigaOS shell command which allows UAE settings to be queried and
modified from within the emulation environment.
* Better, smoother performance when cpu_speed=real (A500 speed). E-UAE
adapts better to changing system latencies.
* 'Sinc' audio interpolation added (Antti Lankila).
* Minor performance improvements in interpretive CPU emulator and JIT
engine.
* Mac OS X icon added (from Daniel Pimley).
* Lots of bugs fixes, including:
- Broken 'delayed' interrupt handling when JIT was disabled.
- Inconsistent refreshing of P96 screens.
- Filesystems being mounted twice.
- Hardfiles broken following a reset.
- Broken detection of XKB path in X11 driver (fix from Peter Volkov).
Bug fixes:
* Version 0.8.29-WIP4 broke the interrupt controller emulation. Fixed.
This also makes Action Replay cartridge emulation work again.
* HDToolbox would hang when scanning for hard drives. Mostly fixed (I
still have one unreproducible report of HDToolbox hanging).
* Hardfile emulation will no longer leak threads following a reset
This also fixes crashes on exit on AmigaOS and clone hosts.
* Building on MacOS X no longer fails when building supporting tools
like readdisk.
* Exiting E-UAE on OS X when started from Hi-Toro would cause 'load
config file' dialog to be displayed. Fixed.
* BeOS sound driver was broken in recent changes to audio layer. Now
fixed (fingers crossed).
Other:
* Removed support for 8-bit sound (since the official UAE did so).
Still to do Still to do
=========== ===========

View File

@ -30,11 +30,26 @@ Here are a selection of the the supported options:
The config script for UAE supports a bunch of compile-time options for The config script for UAE supports a bunch of compile-time options for
selecting what features are built into UAE. Here's a selection: selecting what features are built into UAE. Here's a selection:
--enable-fpu
Build CPU emulation with suppport for optional emulation of a math
coprocessor (Motoroloa 68881/2, etc.). Defaults to true.
--enable-compatible-cpu
Build CPU emulation with support for optional emulation of
instruction prefetch. Defaults to true.
--enable-cycle-exact-cpu
Build CPU/custom chip emulation with support for optional
cycle-exact emulation of interactions between the CPU and Amiga chip
set. Defaults to true.
--enable-jit --enable-jit
Build CPU emulation with JIT compiler. Currently only supported on Build CPU emulation with support for optional JIT compiler. The JIT
x86 platforms (known to work on Linux, Solaris, AROS, and BeOS, but (which compiles 680x0 instructions to native instructions) is
should work on most Unix-like platforms, providing you are building currently only supported on x86 platforms. (It is known to work on
with GCC). Defaults to enabled when building for x86. Linux, Solaris, AROS, and BeOS, but should work on most Unix-like
platforms, providing you are building with GCC). Defaults to enabled
when building for x86.
--enable-natmem --enable-natmem
If building the JIT, include support for direct memory access (which If building the JIT, include support for direct memory access (which
@ -68,7 +83,7 @@ selecting what features are built into UAE. Here's a selection:
--enable-bsdsock --enable-bsdsock
Build with support for emulated network stack (an emulated Build with support for emulated network stack (an emulated
bsdsocket.library). This works only on Unix platforms at the moment bsdsocket.library). This works only on Unix platforms at the moment
(including Linux and OS X). (including Linux, Solaris and OS X).
--with-caps --with-caps
Build with support for IPF (CAPS) images. This requires the IPF Build with support for IPF (CAPS) images. This requires the IPF

View File

@ -708,13 +708,6 @@ sound_output=<type>
exact - audio emulation is enabled and exact output enabled. exact - audio emulation is enabled and exact output enabled.
sound_bits=<n>
Selects the resolution of audio output. <n> can be 8 or 16 for 8-bit and
16-bit output, respectively. Most hosts will use 16-bit output and this
will be the default.
sound_frequency=<n> sound_frequency=<n>
Selects the frequency of emulated audio output in Hertz. Typically, Selects the frequency of emulated audio output in Hertz. Typically,

55
docs/make_hdf.txt Normal file
View File

@ -0,0 +1,55 @@
make_hdf
========
make_hdf is a command-line tool for creating unformatted hard disk
images (hard files) for E-UAE (and other versions of UAE). It will
also print a config option that can be added to a UAE config file to
mount the created disk image.
Usage
-----
make_hdf accepts the following parameters:
make_hdf <path> <size> [<device>]
<path> The path to the file to create. Note that any directories
included in this path must already exist; make_hdf will not
create them for you.
<size> The size of the hard disk image to create in MB. Add a trailing
'G' to the size to specify a size in GB or a 'K' for a size
in KB.
<device> Device name to be included in the generated config option.
This is optional and defaults to DH0: if omitted.
Example
-------
> make_hdf hdf/my_disk.hdf 2G DH5:
Will generate a 1 GB disk as the file 'hdf/my_disk.hdf' and the
following config options are output (see configuration.txt).
hardfile2=rw,DH5:hdf/my_disk.hdf,32,2,2,512,0,
hardfile=rw,32,2,2,512,hdf/my_disk.hdf
Limits
------
On systems that do not support large files sizes (i.e, systems without
support for 64-bit file sizes), make_hdf is limited to creating hard
files up to 2GB in size.
On systems that do support large file sizes, make_hdf can create hard
files up to around 2TB in size (whether you can make use of disks that
in AmigaOS is another question).
Sparse files
------------
Where supported (e.g., Linux, MacOS X), make_hdf will create sparse
files. This allows hard disk images which are not full to take up less
space on disk.

View File

@ -56,8 +56,7 @@ static int debugchannel (unsigned int ch)
#define SINC_QUEUE_LENGTH (SINC_QUEUE_MAX_AGE / MIN_ALLOWED_PERIOD + NUMBER_OF_CPU_UPDATES_ALLOWED) #define SINC_QUEUE_LENGTH (SINC_QUEUE_MAX_AGE / MIN_ALLOWED_PERIOD + NUMBER_OF_CPU_UPDATES_ALLOWED)
typedef struct { typedef struct {
int age; int age, output;
int output;
} sinc_queue_t; } sinc_queue_t;
struct audio_channel_data { struct audio_channel_data {
@ -108,31 +107,18 @@ void init_sound_table16 (void)
for (j = 0; j < 64; j++) for (j = 0; j < 64; j++)
sound_table[j][i] = j * (uae_s8)i * (currprefs.sound_stereo ? 2 : 1); sound_table[j][i] = j * (uae_s8)i * (currprefs.sound_stereo ? 2 : 1);
} }
#ifdef HAVE_8BIT_AUDIO_SUPPORT
void init_sound_table8 (void)
{
int i,j;
for (i = 0; i < 256; i++)
for (j = 0; j < 64; j++)
sound_table[j][i] = (j * (uae_s8)i * (currprefs.sound_stereo ? 2 : 1)) / 256;
}
#endif
#endif #endif
#ifdef MULTIPLICATION_PROFITABLE #ifdef MULTIPLICATION_PROFITABLE
typedef uae_s8 sample8_t; typedef uae_s8 sample8_t;
#define DO_CHANNEL_1(v, c) do { (v) *= audio_channel[c].vol; } while (0) #define DO_CHANNEL_1(v, c) do { (v) *= audio_channel[c].vol; } while (0)
#define SBASEVAL8(logn) ((logn) == 1 ? SOUND8_BASE_VAL << 7 : SOUND8_BASE_VAL << 8)
#define SBASEVAL16(logn) ((logn) == 1 ? SOUND16_BASE_VAL >> 1 : SOUND16_BASE_VAL) #define SBASEVAL16(logn) ((logn) == 1 ? SOUND16_BASE_VAL >> 1 : SOUND16_BASE_VAL)
#define FINISH_DATA(data,b,logn) do { if (14 - (b) + (logn) > 0) (data) >>= 14 - (b) + (logn); else (data) <<= (b) - 14 - (logn); } while (0); #define FINISH_DATA(data, logn) do { (data) <<= 2 - (logn); } while (0);
#else #else
typedef uae_u8 sample8_t; typedef uae_u8 sample8_t;
#define DO_CHANNEL_1(v, c) do { (v) = audio_channel[c].voltbl[(v)]; } while (0) #define DO_CHANNEL_1(v, c) do { (v) = audio_channel[c].voltbl[(v)]; } while (0)
#define SBASEVAL8(logn) SOUND8_BASE_VAL
#define SBASEVAL16(logn) SOUND16_BASE_VAL #define SBASEVAL16(logn) SOUND16_BASE_VAL
#define FINISH_DATA(data,b,logn) #define FINISH_DATA(data, logn)
#endif #endif
/* Always put the right word before the left word. */ /* Always put the right word before the left word. */
@ -177,9 +163,6 @@ STATIC_INLINE void put_sound_word_left (uae_u32 w)
} }
#endif #endif
#define DO_CHANNEL(v, c) do { (v) &= audio_channel[c].adk_mask; data += v; } while (0);
static void sinc_prehandler (unsigned long best_evtime) static void sinc_prehandler (unsigned long best_evtime)
{ {
@ -264,7 +247,7 @@ static void sample16i_sinc_handler (void)
samplexx_sinc_handler (datas); samplexx_sinc_handler (datas);
data1 = datas[0] + datas[3] + datas[1] + datas[2]; data1 = datas[0] + datas[3] + datas[1] + datas[2];
FINISH_DATA (data1, 16, 2); FINISH_DATA (data1, 2);
PUT_SOUND_WORD_MONO (data1); PUT_SOUND_WORD_MONO (data1);
check_sound_buffers (); check_sound_buffers ();
} }
@ -288,7 +271,7 @@ void sample16_handler (void)
data0 += data3; data0 += data3;
{ {
uae_u32 data = SBASEVAL16(2) + data0; uae_u32 data = SBASEVAL16(2) + data0;
FINISH_DATA (data, 16, 2); FINISH_DATA (data, 2);
PUT_SOUND_WORD_MONO (data); PUT_SOUND_WORD_MONO (data);
} }
check_sound_buffers (); check_sound_buffers ();
@ -337,9 +320,10 @@ static void sample16i_rh_handler (void)
delta = audio_channel[3].per; delta = audio_channel[3].per;
ratio = ((audio_channel[3].evtime % delta) << 8) / delta; ratio = ((audio_channel[3].evtime % delta) << 8) / delta;
data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8;
{ {
uae_u32 data = SBASEVAL16(2) + data0; uae_u32 data = SBASEVAL16(2) + data0;
FINISH_DATA (data, 16, 2); FINISH_DATA (data, 2);
PUT_SOUND_WORD_MONO (data); PUT_SOUND_WORD_MONO (data);
} }
check_sound_buffers (); check_sound_buffers ();
@ -410,64 +394,13 @@ static void sample16i_crux_handler (void)
data0 += data1; data0 += data1;
{ {
uae_u32 data = SBASEVAL16(2) + data0; uae_u32 data = SBASEVAL16(2) + data0;
FINISH_DATA (data, 16, 2); FINISH_DATA (data, 2);
PUT_SOUND_WORD_MONO (data); PUT_SOUND_WORD_MONO (data);
} }
check_sound_buffers (); check_sound_buffers ();
} }
#ifdef HAVE_8BIT_AUDIO_SUPPORT
void sample8_handler (void)
{
uae_u32 data0 = audio_channel[0].current_sample;
uae_u32 data1 = audio_channel[1].current_sample;
uae_u32 data2 = audio_channel[2].current_sample;
uae_u32 data3 = audio_channel[3].current_sample;
DO_CHANNEL_1 (data0, 0);
DO_CHANNEL_1 (data1, 1);
DO_CHANNEL_1 (data2, 2);
DO_CHANNEL_1 (data3, 3);
data0 &= audio_channel[0].adk_mask;
data1 &= audio_channel[1].adk_mask;
data2 &= audio_channel[2].adk_mask;
data3 &= audio_channel[3].adk_mask;
data0 += data1;
data0 += data2;
data0 += data3;
{
uae_u32 data = SBASEVAL8(2) + data0;
FINISH_DATA (data, 8, 2);
PUT_SOUND_BYTE (data);
}
check_sound_buffers ();
}
#endif
#ifdef HAVE_STEREO_SUPPORT #ifdef HAVE_STEREO_SUPPORT
void sample16ss_handler (void)
{
uae_u32 data0 = audio_channel[0].current_sample;
uae_u32 data1 = audio_channel[1].current_sample;
uae_u32 data2 = audio_channel[2].current_sample;
uae_u32 data3 = audio_channel[3].current_sample;
DO_CHANNEL_1 (data0, 0);
DO_CHANNEL_1 (data1, 1);
DO_CHANNEL_1 (data2, 2);
DO_CHANNEL_1 (data3, 3);
data0 &= audio_channel[0].adk_mask;
data1 &= audio_channel[1].adk_mask;
data2 &= audio_channel[2].adk_mask;
data3 &= audio_channel[3].adk_mask;
PUT_SOUND_WORD (data0 << 2);
PUT_SOUND_WORD (data1 << 2);
PUT_SOUND_WORD (data3 << 2);
PUT_SOUND_WORD (data2 << 2);
check_sound_buffers ();
}
static void sample16si_sinc_handler (void) static void sample16si_sinc_handler (void)
{ {
int datas[4], data1, data2; int datas[4], data1, data2;
@ -475,9 +408,9 @@ static void sample16si_sinc_handler (void)
samplexx_sinc_handler (datas); samplexx_sinc_handler (datas);
data1 = datas[0] + datas[3]; data1 = datas[0] + datas[3];
data2 = datas[1] + datas[2]; data2 = datas[1] + datas[2];
FINISH_DATA (data1, 16, 1); FINISH_DATA (data1, 1);
put_sound_word_left (data1); put_sound_word_left (data1);
FINISH_DATA (data2, 16, 1); FINISH_DATA (data2, 1);
put_sound_word_right (data2); put_sound_word_right (data2);
check_sound_buffers (); check_sound_buffers ();
} }
@ -501,14 +434,14 @@ void sample16s_handler (void)
data0 += data3; data0 += data3;
{ {
uae_u32 data = SBASEVAL16(1) + data0; uae_u32 data = SBASEVAL16(1) + data0;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_left (data); put_sound_word_left (data);
} }
data1 += data2; data1 += data2;
{ {
uae_u32 data = SBASEVAL16(1) + data1; uae_u32 data = SBASEVAL16(1) + data1;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_right (data); put_sound_word_right (data);
} }
@ -580,13 +513,13 @@ static void sample16si_crux_handler (void)
data0 += data3; data0 += data3;
{ {
uae_u32 data = SBASEVAL16 (1) + data0; uae_u32 data = SBASEVAL16 (1) + data0;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_left (data); put_sound_word_left (data);
} }
{ {
uae_u32 data = SBASEVAL16 (1) + data1; uae_u32 data = SBASEVAL16 (1) + data1;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_right (data); put_sound_word_right (data);
} }
check_sound_buffers (); check_sound_buffers ();
@ -638,57 +571,19 @@ static void sample16si_rh_handler (void)
data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8;
{ {
uae_u32 data = SBASEVAL16(1) + data0; uae_u32 data = SBASEVAL16(1) + data0;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_left (data); put_sound_word_left (data);
} }
{ {
uae_u32 data = SBASEVAL16(1) + data1; uae_u32 data = SBASEVAL16(1) + data1;
FINISH_DATA (data, 16, 1); FINISH_DATA (data, 1);
put_sound_word_right (data); put_sound_word_right (data);
} }
check_sound_buffers (); check_sound_buffers ();
} }
#ifdef HAVE_8BIT_AUDIO_SUPPORT
void sample8s_handler (void)
{
uae_u32 data0 = audio_channel[0].current_sample;
uae_u32 data1 = audio_channel[1].current_sample;
uae_u32 data2 = audio_channel[2].current_sample;
uae_u32 data3 = audio_channel[3].current_sample;
DO_CHANNEL_1 (data0, 0);
DO_CHANNEL_1 (data1, 1);
DO_CHANNEL_1 (data2, 2);
DO_CHANNEL_1 (data3, 3);
data0 &= audio_channel[0].adk_mask;
data1 &= audio_channel[1].adk_mask;
data2 &= audio_channel[2].adk_mask;
data3 &= audio_channel[3].adk_mask;
data0 += data3;
{
uae_u32 data = SBASEVAL8(1) + data0;
FINISH_DATA (data, 8, 1);
PUT_SOUND_BYTE_RIGHT (data);
}
data1 += data2;
{
uae_u32 data = SBASEVAL8(1) + data1;
FINISH_DATA (data, 8, 1);
PUT_SOUND_BYTE_LEFT (data);
}
check_sound_buffers ();
}
#endif
#else #else
#ifdef HAVE_8BIT_AUDIO_SUPPORT
void sample8s_handler (void)
{
sample8_handler();
}
#endif
void sample16s_handler (void) void sample16s_handler (void)
{ {
@ -708,64 +603,8 @@ static void sample16si_sinc_handler (void)
} }
#endif #endif
#ifdef HAVE_ULAW_AUDIO_SUPPORT
static uae_u8 int2ulaw (int ch)
{
int mask;
if (ch < 0) {
ch = -ch;
mask = 0x7f;
} else
mask = 0xff;
if (ch < 32)
ch = 0xF0 | (15 - (ch / 2));
else if (ch < 96)
ch = 0xE0 | (15 - (ch - 32) / 4);
else if (ch < 224)
ch = 0xD0 | (15 - (ch - 96) / 8);
else if (ch < 480)
ch = 0xC0 | (15 - (ch - 224) / 16);
else if (ch < 992 )
ch = 0xB0 | (15 - (ch - 480) / 32);
else if (ch < 2016)
ch = 0xA0 | (15 - (ch - 992) / 64);
else if (ch < 4064)
ch = 0x90 | (15 - (ch - 2016) / 128);
else if (ch < 8160)
ch = 0x80 | (15 - (ch - 4064) / 256);
else
ch = 0x80;
return (uae_u8)(mask & ch);
}
void sample_ulaw_handler (void)
{
unsigned int nr;
uae_u32 data = 0;
for (nr = 0; nr < 4; nr++) {
if (!(adkcon & (0x11 << nr))) {
uae_u32 d = audio_channel[nr].current_sample;
DO_CHANNEL_1 (d, nr);
data += d;
}
}
PUT_SOUND_BYTE (int2ulaw (data));
check_sound_buffers ();
}
#endif
void switch_audio_interpol (void) void switch_audio_interpol (void)
{ {
#if defined HAVE_8BIT_AUDIO_SUPPORT || defined HAVE_ULAW_AUDIO_SUPPORT
if (currprefs.sound_bits == 8)
/* only supported for 16-bit audio */
return;
#endif
if (currprefs.sound_interpol == 0) { if (currprefs.sound_interpol == 0) {
changed_prefs.sound_interpol = 1; changed_prefs.sound_interpol = 1;
write_log ("Interpol on: rh\n"); write_log ("Interpol on: rh\n");
@ -791,6 +630,7 @@ void schedule_audio (void)
eventtab[ev_audio].oldcycles = get_cycles (); eventtab[ev_audio].oldcycles = get_cycles ();
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
struct audio_channel_data *cdp = audio_channel + i; struct audio_channel_data *cdp = audio_channel + i;
if (cdp->evtime != MAX_EV) { if (cdp->evtime != MAX_EV) {
if (best > cdp->evtime) { if (best > cdp->evtime) {
best = cdp->evtime; best = cdp->evtime;
@ -877,8 +717,7 @@ static void audio_handler (unsigned int nr, int timed)
unsigned long evtime = cdp->evtime; unsigned long evtime = cdp->evtime;
cdp->evtime = MAX_EV; cdp->evtime = MAX_EV;
switch (cdp->state) switch (cdp->state) {
{
case 0: case 0:
cdp->request_word = 0; cdp->request_word = 0;
cdp->request_word_skip = 0; cdp->request_word_skip = 0;
@ -1048,9 +887,6 @@ STATIC_INLINE int sound_prefs_changed (void)
|| changed_prefs.sound_mixed_stereo != currprefs.sound_mixed_stereo || changed_prefs.sound_mixed_stereo != currprefs.sound_mixed_stereo
|| changed_prefs.sound_latency != currprefs.sound_latency || changed_prefs.sound_latency != currprefs.sound_latency
|| changed_prefs.sound_freq != currprefs.sound_freq || changed_prefs.sound_freq != currprefs.sound_freq
#if defined HAVE_8BIT_AUDIO_SUPPORT || defined HAVE_ULAW_AUDIO_SUPPORT
|| changed_prefs.sound_bits != currprefs.sound_bits
#endif
|| changed_prefs.sound_adjust != currprefs.sound_adjust || changed_prefs.sound_adjust != currprefs.sound_adjust
|| changed_prefs.sound_interpol != currprefs.sound_interpol || changed_prefs.sound_interpol != currprefs.sound_interpol
|| changed_prefs.sound_volume != currprefs.sound_volume); || changed_prefs.sound_volume != currprefs.sound_volume);
@ -1074,9 +910,6 @@ void check_prefs_changed_audio (void)
currprefs.sound_adjust = changed_prefs.sound_adjust; currprefs.sound_adjust = changed_prefs.sound_adjust;
currprefs.sound_interpol = changed_prefs.sound_interpol; currprefs.sound_interpol = changed_prefs.sound_interpol;
currprefs.sound_freq = changed_prefs.sound_freq; currprefs.sound_freq = changed_prefs.sound_freq;
#if defined HAVE_8BIT_AUDIO_SUPPORT || defined HAVE_ULAW_AUDIO_SUPPORT
currprefs.sound_bits = changed_prefs.sound_bits;
#endif
currprefs.sound_latency = changed_prefs.sound_latency; currprefs.sound_latency = changed_prefs.sound_latency;
currprefs.sound_volume = changed_prefs.sound_volume; currprefs.sound_volume = changed_prefs.sound_volume;
if (currprefs.produce_sound >= 2) { if (currprefs.produce_sound >= 2) {

View File

@ -148,7 +148,7 @@ static const uae_s8 blit_cycle_diagram[][10] =
{ 3, 3, 1,3,4, 1,3,0 }, /* B */ { 3, 3, 1,3,4, 1,3,0 }, /* B */
{ 2, 3, 1,2,0, 1,2 }, /* C */ { 2, 3, 1,2,0, 1,2 }, /* C */
{ 3, 3, 1,2,4, 1,2,0 }, /* D */ { 3, 3, 1,2,4, 1,2,0 }, /* D */
{ 0, 4, 1,2,3,0 }, /* E */ { 0, 3, 1,2,3 }, /* E */
{ 4, 4, 1,2,3,4, 1,2,3,0 } /* F */ { 4, 4, 1,2,3,4, 1,2,3,0 } /* F */
}; };
@ -157,7 +157,7 @@ static const uae_s8 blit_cycle_diagram[][10] =
static const uae_s8 blit_cycle_diagram_fill[][10] = static const uae_s8 blit_cycle_diagram_fill[][10] =
{ {
{ 0, 3, 0,5,0 }, /* 0 */ { 0, 3, 0,5,0 }, /* 0 */
{ 0, 3, 3,5,4 }, /* 1 */ { 0, 3, 0,5,4 }, /* 1 */
{ 0, 3, 0,3,0 }, /* 2 */ { 0, 3, 0,3,0 }, /* 2 */
{ 2, 3, 3,5,4, 3,0 }, /* 3 */ { 2, 3, 3,5,4, 3,0 }, /* 3 */
{ 0, 3, 0,2,5 }, /* 4 */ { 0, 3, 0,2,5 }, /* 4 */
@ -170,7 +170,7 @@ static const uae_s8 blit_cycle_diagram_fill[][10] =
{ 3, 3, 1,3,4, 1,3,0 }, /* B */ { 3, 3, 1,3,4, 1,3,0 }, /* B */
{ 2, 3, 1,2,5, 1,2 }, /* C */ { 2, 3, 1,2,5, 1,2 }, /* C */
{ 3, 4, 1,2,5,4, 1,2,0 }, /* D */ { 3, 4, 1,2,5,4, 1,2,0 }, /* D */
{ 0, 4, 1,2,3,0 }, /* E */ { 0, 3, 1,2,3 }, /* E */
{ 4, 4, 1,2,3,4, 1,2,3,0 } /* F */ { 4, 4, 1,2,3,4, 1,2,3,0 } /* F */
}; };
@ -511,7 +511,7 @@ STATIC_INLINE void blitter_line_incy (void)
static void blitter_line (void) static void blitter_line (void)
{ {
uae_u16 blitahold = blinea >> blinea_shift; uae_u16 blitahold = (blinea & blt_info.bltafwm) >> blinea_shift;
uae_u16 blitbhold = blineb & 1 ? 0xFFFF : 0; uae_u16 blitbhold = blineb & 1 ? 0xFFFF : 0;
uae_u16 blitchold = blt_info.bltcdat; uae_u16 blitchold = blt_info.bltcdat;
@ -956,9 +956,8 @@ static void blit_bltset (unsigned int con)
blit_diag = blitfill ? blit_cycle_diagram_fill[blit_ch] : blit_cycle_diagram[blit_ch]; blit_diag = blitfill ? blit_cycle_diagram_fill[blit_ch] : blit_cycle_diagram[blit_ch];
} }
if ((bltcon1 & 0x80) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) if ((bltcon1 & 0x80) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
write_log("warning: BLTCON1 DOFF-bit set\n"); write_log ("warning: ECS BLTCON1 DOFF-bit set\n");
ddat1use = ddat2use = 0;
blit_dmacount = blit_dmacount2 = 0; blit_dmacount = blit_dmacount2 = 0;
blit_nod = 1; blit_nod = 1;
for (i = 0; i < blit_diag[1]; i++) { for (i = 0; i < blit_diag[1]; i++) {
@ -1025,7 +1024,9 @@ void do_blitter (unsigned int hpos)
blit_last_hpos = hpos; blit_last_hpos = hpos;
#endif #endif
reset_blit (1|2); blit_bltset (1|2);
blit_modset ();
ddat1use = ddat2use = 0;
if (blitline) { if (blitline) {
blitsing = bltcon1 & 0x2; blitsing = bltcon1 & 0x2;
@ -1044,7 +1045,7 @@ void do_blitter (unsigned int hpos)
if (1) { if (1) {
if (oldstate != BLT_done) if (oldstate != BLT_done)
write_log ("blitter was already active!\n"); write_log ("blitter was already active!\n");
write_log("blitstart: v=%03.3d h=%03.3d %dx%d %d (%d) d=%d f=%02.2X n=%d pc=%p l=%d dma=%d\n", write_log ("blitstart: v=%03.3d h=%03.3d %dx%d %d (%d) d=%d f=%02.2X n=%d pc=%p l=%d dma=%4x\n",
vpos, hpos, blt_info.hblitsize, blt_info.vblitsize, cycles, blit_ch, vpos, hpos, blt_info.hblitsize, blt_info.vblitsize, cycles, blit_ch,
blitdesc ? 1 : 0, blitfill, blitdesc ? 1 : 0, blitfill,
dmaen(DMA_BLITPRI) ? 1 : 0, m68k_getpc (&regs), blitline, dmaen(DMA_BLITTER)); dmaen(DMA_BLITPRI) ? 1 : 0, m68k_getpc (&regs), blitline, dmaen(DMA_BLITTER));
@ -1088,13 +1089,14 @@ void do_blitter (unsigned int hpos)
events_schedule(); events_schedule();
} }
void maybe_blit (unsigned int hpos, int hack) void maybe_blit (unsigned int hpos, int hack)
{ {
static int warned; static int warned;
if (bltstate == BLT_done) if (bltstate == BLT_done)
return; return;
if (savestate_state)
return;
if (!warned && dmaen (DMA_BLITTER)) { if (!warned && dmaen (DMA_BLITTER)) {
#ifndef BLITTER_DEBUG #ifndef BLITTER_DEBUG
@ -1110,8 +1112,6 @@ void maybe_blit (unsigned int hpos, int hack)
goto end; goto end;
} }
if (!eventtab[ev_blitter].active)
write_log ("FOO!!?\n");
if (hack == 1 && get_cycles() < blit_firstline_cycles) if (hack == 1 && get_cycles() < blit_firstline_cycles)
goto end; goto end;

View File

@ -3,7 +3,7 @@
* *
* Support for IPF/CAPS disk images * Support for IPF/CAPS disk images
* *
* Copyright 2004-2006 Richard Drummond * Copyright 2004-2007 Richard Drummond
* *
* Based on Win32 CAPS code by Toni Wilen * Based on Win32 CAPS code by Toni Wilen
*/ */
@ -23,7 +23,11 @@ static int caps_flags = DI_LOCK_DENVAR|DI_LOCK_DENNOISE|DI_LOCK_NOISE|DI_LOCK_UP
#define LIB_TYPE 1 #define LIB_TYPE 1
#ifndef TARGET_AMIGAOS #if defined HAVE_DLOPEN && !defined HAVE_FRAMEWORK_CAPSIMAGE
#include <dlfcn.h>
#define CAPSLIB_NAME "libcapsimage.so.2"
/* /*
* Repository for function pointers to the CAPSLib routines * Repository for function pointers to the CAPSLib routines
@ -50,12 +54,6 @@ struct {
CapsLong (*CAPSGetVersionInfo)(struct CapsVersionInfo *pi, CapsULong flag); CapsLong (*CAPSGetVersionInfo)(struct CapsVersionInfo *pi, CapsULong flag);
} capslib; } capslib;
#ifdef HAVE_DLOPEN
#include <dlfcn.h>
#define CAPSLIB_NAME "libcapsimage.so.2"
/* /*
* The Unix/dlopen method for loading and linking the CAPSLib plug-in * The Unix/dlopen method for loading and linking the CAPSLib plug-in
*/ */
@ -83,10 +81,50 @@ static int load_capslib (void)
write_log ("Unable to open " CAPSLIB_NAME "\n."); write_log ("Unable to open " CAPSLIB_NAME "\n.");
return 0; return 0;
} }
#endif // HAVE_DLOPEN
/*
* Some defines so that we don't care that CAPSLib
* isn't statically linked
*/
#define CAPSInit capslib.CAPSInit
#define CAPSExit capslib.CAPSExit
#define CAPSAddImage capslib.CAPSAddImage
#define CAPSRemImage capslib.CAPSRemImage
#define CAPSLockImage capslib.CAPSLockImage
#define CAPSLockImageMemory capslib.CAPSLockImageMemory
#define CAPSUnlockImage capslib.CAPSUnlockImage
#define CAPSLoadImage capslib.CAPSLoadImage
#define CAPSGetImageInfo capslib.CAPSGetImageInfo
#define CAPSLockTrack capslib.CAPSLockTrack
#define CAPSUnlockTrack capslib.CAPSUnlockTrack
#define CAPSUnlockAllTracks capslib.CAPSUnlockAllTracks
#define CAPSGetPlatformName capslib.CAPSGetPlatformName
#define CAPSGetVersionInfo capslib.CAPSGetVersionInfo
#else
#ifdef HAVE_FRAMEWORK_CAPSIMAGE
/*
* On OS X we link weakly to the CAPSImage framework. Thus we can
* let the dynamic linker take care of everything.
*/
/* We check for the existence of this symbol to tell whether the
* the framework could be linked or not.
*/
extern CapsLong CAPSInit(void) __attribute__((weak));
static int load_capslib (void)
{
if (CAPSInit != NULL)
return 1;
else
return 0;
}
#else #else
#ifdef TARGET_AMIGAOS
#ifdef __amigaos4__ #ifdef __amigaos4__
#define __USE_BASETYPE__ #define __USE_BASETYPE__
#include <exec/emulation.h> #include <exec/emulation.h>
@ -323,10 +361,7 @@ LONG CAPSGetVersionInfo (struct CapsVersionInfo *pi, CapsULong flag)
return retval; return retval;
} }
#endif #else
#ifdef TARGET_AMIGAOS
#if 0 #if 0
/* proto file is broken in current CAPS API */ /* proto file is broken in current CAPS API */
@ -337,6 +372,7 @@ LONG CAPSGetVersionInfo (struct CapsVersionInfo *pi, CapsULong flag)
static struct Device *CapsImageBase; static struct Device *CapsImageBase;
#endif #endif
#endif #endif
#endif
#include <proto/exec.h> #include <proto/exec.h>
@ -386,32 +422,8 @@ static int load_capslib (void)
#endif #endif
#endif #endif
#ifndef TARGET_AMIGAOS
/*
* Some defines so that we don't care that CAPSLib
* isn't statically linked
*/
#define CAPSInit capslib.CAPSInit
#define CAPSExit capslib.CAPSExit
#define CAPSAddImage capslib.CAPSAddImage
#define CAPSRemImage capslib.CAPSRemImage
#define CAPSLockImage capslib.CAPSLockImage
#define CAPSLockImageMemory capslib.CAPSLockImageMemory
#define CAPSUnlockImage capslib.CAPSUnlockImage
#define CAPSLoadImage capslib.CAPSLoadImage
#define CAPSGetImageInfo capslib.CAPSGetImageInfo
#define CAPSLockTrack capslib.CAPSLockTrack
#define CAPSUnlockTrack capslib.CAPSUnlockTrack
#define CAPSUnlockAllTracks capslib.CAPSUnlockAllTracks
#define CAPSGetPlatformName capslib.CAPSGetPlatformName
#define CAPSGetVersionInfo capslib.CAPSGetVersionInfo
#endif #endif
/* /*
* CAPS support proper starts here * CAPS support proper starts here
* *
@ -476,10 +488,8 @@ int caps_loadimage (struct zfile *zf, unsigned int drv, unsigned int *num_tracks
return 0; return 0;
ret = CAPSLockImageMemory (caps_cont[drv], buf, len, 0); ret = CAPSLockImageMemory (caps_cont[drv], buf, len, 0);
free (buf); free (buf);
if (ret != imgeOk) { if (ret != imgeOk)
free (buf);
return 0; return 0;
}
caps_locked[drv] = 1; caps_locked[drv] = 1;
CAPSGetImageInfo (&ci, caps_cont[drv]); CAPSGetImageInfo (&ci, caps_cont[drv]);
*num_tracks = (ci.maxcylinder - ci.mincylinder + 1) * (ci.maxhead - ci.minhead + 1); *num_tracks = (ci.maxcylinder - ci.mincylinder + 1) * (ci.maxhead - ci.minhead + 1);

View File

@ -81,7 +81,6 @@ static const struct cfg_lines opttable[] =
{"keyboard_leds", "Keyboard LEDs" }, {"keyboard_leds", "Keyboard LEDs" },
{"sound_output", "" }, {"sound_output", "" },
{"sound_frequency", "" }, {"sound_frequency", "" },
{"sound_bits", "" },
{"sound_channels", "" }, {"sound_channels", "" },
{"sound_latency", "" }, {"sound_latency", "" },
#ifdef JIT #ifdef JIT
@ -153,7 +152,7 @@ static const char *obsolete[] = {
"sound_pri_cutoff", "sound_pri_time", "sound_pri_cutoff", "sound_pri_time",
"avoid_dga", "override_dga_address", "avoid_vid", "avoid_cmov", "avoid_dga", "override_dga_address", "avoid_vid", "avoid_cmov",
"comp_midopt", "comp_lowopt", "comp_midopt", "comp_lowopt",
"fast_copper", "sound_max_buf", "fast_copper", "sound_max_buf", "sound_bits",
0 }; 0 };
#define UNEXPANDED "$(FILE_PATH)" #define UNEXPANDED "$(FILE_PATH)"
@ -401,7 +400,6 @@ void save_options (FILE *f, const struct uae_prefs *p, int type)
#endif #endif
cfgfile_write (f, "sound_output=%s\n", soundmode1[p->produce_sound]); cfgfile_write (f, "sound_output=%s\n", soundmode1[p->produce_sound]);
cfgfile_write (f, "sound_bits=%d\n", p->sound_bits);
cfgfile_write (f, "sound_channels=%s\n", stereomode[p->sound_stereo]); cfgfile_write (f, "sound_channels=%s\n", stereomode[p->sound_stereo]);
cfgfile_write (f, "sound_stereo_separation=%d\n", p->sound_stereo_separation); cfgfile_write (f, "sound_stereo_separation=%d\n", p->sound_stereo_separation);
cfgfile_write (f, "sound_stereo_mixing_delay=%d\n", p->sound_mixed_stereo >= 0 ? p->sound_mixed_stereo : 0); cfgfile_write (f, "sound_stereo_mixing_delay=%d\n", p->sound_mixed_stereo >= 0 ? p->sound_mixed_stereo : 0);
@ -838,7 +836,6 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value)
} }
if (cfgfile_intval (option, value, "sound_latency", &p->sound_latency, 1) if (cfgfile_intval (option, value, "sound_latency", &p->sound_latency, 1)
|| cfgfile_intval (option, value, "sound_bits", &p->sound_bits, 1)
|| cfgfile_intval (option, value, "sound_frequency", &p->sound_freq, 1) || cfgfile_intval (option, value, "sound_frequency", &p->sound_freq, 1)
|| cfgfile_intval (option, value, "sound_adjust", &p->sound_adjust, 1) || cfgfile_intval (option, value, "sound_adjust", &p->sound_adjust, 1)
|| cfgfile_intval (option, value, "sound_volume", &p->sound_volume, 1) || cfgfile_intval (option, value, "sound_volume", &p->sound_volume, 1)
@ -1739,8 +1736,8 @@ static void parse_sound_spec (struct uae_prefs *p, char *spec)
else else
p->sound_stereo = 0; p->sound_stereo = 0;
} }
if (x2) // if (x2)
p->sound_bits = atoi (x2); // p->sound_bits = atoi (x2);
if (x3) if (x3)
p->sound_freq = atoi (x3); p->sound_freq = atoi (x3);
// if (x4) // if (x4)
@ -2374,7 +2371,6 @@ void default_prefs (struct uae_prefs *p, int type)
p->sound_stereo = 1; p->sound_stereo = 1;
p->sound_stereo_separation = 7; p->sound_stereo_separation = 7;
p->sound_mixed_stereo = 0; p->sound_mixed_stereo = 0;
p->sound_bits = DEFAULT_SOUND_BITS;
p->sound_freq = DEFAULT_SOUND_FREQ; p->sound_freq = DEFAULT_SOUND_FREQ;
p->sound_latency = DEFAULT_SOUND_LATENCY; p->sound_latency = DEFAULT_SOUND_LATENCY;
p->sound_interpol = 0; p->sound_interpol = 0;

View File

@ -4349,7 +4349,9 @@ void sync_m68k_pc(void)
********************************************************************/ ********************************************************************/
uae_u32 scratch[VREGS]; uae_u32 scratch[VREGS];
#ifdef FPUEMU
fptype fscratch[VFREGS]; fptype fscratch[VFREGS];
#endif
void init_comp(void) void init_comp(void)
{ {
@ -4395,6 +4397,7 @@ void init_comp(void)
live.state[NEXT_HANDLER].needflush=NF_HANDLER; live.state[NEXT_HANDLER].needflush=NF_HANDLER;
set_status(NEXT_HANDLER,UNDEF); set_status(NEXT_HANDLER,UNDEF);
#ifdef FPUEMU
for (i=0;i<VFREGS;i++) { for (i=0;i<VFREGS;i++) {
if (i<8) { /* First 8 registers map to 68k FPU registers */ if (i<8) { /* First 8 registers map to 68k FPU registers */
live.fate[i].mem=(uae_u32*)(((fptype*)regs.fp)+i); live.fate[i].mem=(uae_u32*)(((fptype*)regs.fp)+i);
@ -4409,7 +4412,7 @@ void init_comp(void)
else else
live.fate[i].mem=(uae_u32*)(fscratch+i); live.fate[i].mem=(uae_u32*)(fscratch+i);
} }
#endif
for (i=0;i<N_REGS;i++) { for (i=0;i<N_REGS;i++) {
live.nat[i].touched=0; live.nat[i].touched=0;

View File

@ -212,6 +212,7 @@ enum diw_states
unsigned int plffirstline, plflastline; unsigned int plffirstline, plflastline;
unsigned int plfstrt; unsigned int plfstrt;
unsigned int plfstop; unsigned int plfstop;
static int first_bpl_vpos;
static int last_diw_pix_hpos, last_ddf_pix_hpos; static int last_diw_pix_hpos, last_ddf_pix_hpos;
static int last_decide_line_hpos, last_sprite_decide_line_hpos; static int last_decide_line_hpos, last_sprite_decide_line_hpos;
static int last_fetch_hpos; static int last_fetch_hpos;
@ -1480,6 +1481,8 @@ STATIC_INLINE void decide_fetch (int hpos)
static void start_bpl_dma (unsigned int hpos, int hstart) static void start_bpl_dma (unsigned int hpos, int hstart)
{ {
if (first_bpl_vpos < 0)
first_bpl_vpos = vpos;
fetch_start (hpos); fetch_start (hpos);
fetch_cycle = 0; fetch_cycle = 0;
last_fetch_hpos = hstart; last_fetch_hpos = hstart;
@ -2264,6 +2267,8 @@ void init_hz (void)
minfirstline = vsstop; minfirstline = vsstop;
if (minfirstline < 2) if (minfirstline < 2)
minfirstline = 2; minfirstline = 2;
if (minfirstline >= maxvpos)
minfirstline = maxvpos - 1;
sprite_vblank_endline = minfirstline - 2; sprite_vblank_endline = minfirstline - 2;
dumpsync (); dumpsync ();
} }
@ -2316,24 +2321,10 @@ static void calcdiw (void)
plffirstline = vstrt; plffirstline = vstrt;
plflastline = vstop; plflastline = vstop;
#if 0
/* This happens far too often. */
if (plffirstline < minfirstline_bpl) {
write_log ("Warning: Playfield begins before line %d (%d)!\n", minfirstline_bpl, plffirstline);
}
#endif
#if 0 /* this comparison is not needed but previous is.. */
if (plflastline > 313) {
/* Turrican does this */
write_log ("Warning: Playfield out of range!\n");
plflastline = 313;
}
#endif
plfstrt = ddfstrt; plfstrt = ddfstrt;
plfstop = ddfstop; plfstop = ddfstop;
/* probably not the correct place.. */ /* probably not the correct place.. */
/* ECS/AGA and ddfstop > maxhpos = always-on display */
if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) {
if (ddfstop > maxhpos) if (ddfstop > maxhpos)
plfstrt = 0; plfstrt = 0;
@ -2523,19 +2514,14 @@ static void DMACON (unsigned int hpos, uae_u16 v)
} }
} }
if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done) { if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done) {
static int count = 0;
if (!count) {
count = 1;
write_log ("warning: program is doing blitpri hacks.\n");
}
set_special (&regs, SPCFLAG_BLTNASTY);
decide_blitter (hpos); decide_blitter (hpos);
set_special (&regs, SPCFLAG_BLTNASTY);
} }
if (dmaen (DMA_BLITTER) && bltstate == BLT_init) if (dmaen (DMA_BLITTER) && bltstate == BLT_init)
bltstate = BLT_work; bltstate = BLT_work;
if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) { if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) {
unset_special (&regs, SPCFLAG_BLTNASTY);
decide_blitter (hpos); decide_blitter (hpos);
unset_special (&regs, SPCFLAG_BLTNASTY);
} }
if (changed & (DMA_MASTER | 0x0f)) if (changed & (DMA_MASTER | 0x0f))
audio_hsync (0); audio_hsync (0);
@ -2550,85 +2536,102 @@ static void DMACON (unsigned int hpos, uae_u16 v)
#ifdef CPUEMU_6 #ifdef CPUEMU_6
static int irq_pending[15]; /* If true, an IRQ is pending arrival at the CPU. */ static int irq_pending[15]; /* If true, an IRQ is pending arrival at the CPU. If false,
static unsigned long irq_due[15]; /* Cycle time that IRQ will arrive at CPU */ * an IRQ has arrived or is disabled. */
static unsigned long irq_time[15]; /* Cycle time an IRQ will arrive at the CPU if that IRQ is
* pending or has arrived; otherwise 0, if an IRQ is disabled. */
/* /*
* Handle interrupt delay in cycle-exact mode. * Get priority level of IRQ (cycle-exact mode)
*/ */
static int intlev_2 (void) STATIC_INLINE int intlev_exact (uae_u16 imask)
{ {
uae_u16 imask = intreq & intena; #if 0
int il = -1; assert ((imask & 0x7FFF) != 0);
#endif
if (imask && (intena & 0x4000)) { unsigned long curr_time = get_cycles ();
unsigned long cycles = get_cycles ();
int i; int i;
for (i = 14; i >= 0; i--) { for (i = 14; i >= 0; i--) {
if (imask & (1 << i)) { if (imask & (1 << i)) {
if (irq_pending[i] && (cycles >= irq_due[i])) { if (irq_pending[i] == 0 || ((curr_time - irq_time[i]) > 4 * CYCLE_UNIT)) {
/* Mark IRQ as arrived. */
irq_pending[i] = 0; irq_pending[i] = 0;
/* Get priority level of IRQ. */
if (i == 13 || i == 14) if (i == 13 || i == 14)
il = -1; return 6;
else if (i == 11 || i == 12) if (i == 11 || i == 12)
return 5; return 5;
else if (i >= 7 && i <= 10) if (i >= 7 && i <= 10)
return 4; return 4;
else if (i >= 4 && i <= 6) if (i >= 4 && i <= 6)
return 3; return 3;
else if (i == 3) if (i == 3)
return 2; return 2;
else else
return 1; return 1;
} }
} }
} }
} else /* If we got here, then an at least one IRQ must be pending,
unset_special (&regs, SPCFLAG_INT); * but has not yet arrived at the CPU. */
return 0;
return il;
} }
#endif #endif
/* /*
* Get interrupt level of IRQ. * Get priority level of IRQ (not cycle-exact mode)
*/
STATIC_INLINE int intlev_simple (uae_u16 imask)
{
#if 0
assert ((imask & 0x7FFF) != 0);
#endif
if (imask & 0x6000)
return 6;
if (imask & 0x1800)
return 5;
if (imask & 0x0780)
return 4;
if (imask & 0x0070)
return 3;
if (imask & 0x0008)
return 2;
else
return 1;
}
/*
* Get level of interrupt request presented to CPU.
*
* If no IRQs are active and enabled, returns -1.
* If none of the active IRQs have yet reached the CPU, returns 0.
* Otherwise, returns the priority level of the highest priorty active IRQ.
*/ */
int intlev (void) int intlev (void)
{
int il = -1;
#ifdef CPUEMU_6
if (currprefs.cpu_cycle_exact) {
il = intlev_2 ();
if (il >= 0 && il <= (int) regs.intmask)
unset_special (&regs, SPCFLAG_INT);
} else
#endif
{ {
uae_u16 imask = intreq & intena; uae_u16 imask = intreq & intena;
if (imask && (intena & 0x4000)) { if (imask && (intena & 0x4000)) {
if (imask & 0x6000) #ifdef CPUEMU_6
il = 6; if (currprefs.cpu_cycle_exact)
if (imask & 0x1800) return intlev_exact (imask);
il = 5; else
if (imask & 0x0780) #endif
il = 4; return intlev_simple (imask);
if (imask & 0x0070)
il = 3;
if (imask & 0x0008)
il = 2;
if (imask & 0x0007)
il = 1;
} }
return -1;
} }
return il; /*
} * Enable/disable an IRQ.
*/
static void doint (void) static void doint (void)
{ {
if (intena & 0x4000)
set_special (&regs, SPCFLAG_INT); set_special (&regs, SPCFLAG_INT);
#ifdef CPUEMU_6 #ifdef CPUEMU_6
@ -2639,12 +2642,12 @@ static void doint (void)
imask = intreq & intena; imask = intreq & intena;
if (imask && (intena & 0x4000)) { if (imask && (intena & 0x4000)) {
/* Set up delay for IRQ to arrive at the CPU. */ /* Set up time for IRQ to arrive at the CPU. */
unsigned long cycle_irq_due = get_cycles () + 4 * CYCLE_UNIT; unsigned long curr_time = get_cycles ();
for (i = 0; i < 15; i++) { for (i = 0; i < 15; i++) {
if ((imask & (1 << i)) && irq_pending[i] == 0) { if ((imask & (1 << i)) && irq_pending[i] == 0) {
irq_pending[i] = 1; irq_pending[i] = 1;
irq_due[i] = cycle_irq_due; irq_time[i] = curr_time;
} }
} }
} }
@ -2677,13 +2680,16 @@ void INTREQ_0 (uae_u16 v)
* pending status. */ * pending status. */
int i; int i;
for (i = 0; i < 15; i++) { for (i = 0; i < 15; i++) {
if (v & (1 << i)) if (v & (1 << i)) {
irq_pending[i] = 0; irq_pending[i] = 0;
irq_time[i] = 0;
}
} }
} }
} }
#endif #endif
if (intena & 0x4000)
doint (); doint ();
} }
@ -2924,6 +2930,7 @@ static void DIWHIGH (int hpos, uae_u16 v)
{ {
if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS))
return; return;
v &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040);
if (diwhigh_written && diwhigh == v) if (diwhigh_written && diwhigh == v)
return; return;
decide_line (hpos); decide_line (hpos);
@ -3056,8 +3063,10 @@ static void BLTSIZE (uae_u16 v)
blt_info.vblitsize = v >> 6; blt_info.vblitsize = v >> 6;
blt_info.hblitsize = v & 0x3F; blt_info.hblitsize = v & 0x3F;
if (!blt_info.vblitsize) blt_info.vblitsize = 1024; if (!blt_info.vblitsize)
if (!blt_info.hblitsize) blt_info.hblitsize = 64; blt_info.vblitsize = 1024;
if (!blt_info.hblitsize)
blt_info.hblitsize = 64;
do_blitter (current_hpos()); do_blitter (current_hpos());
} }
@ -3443,11 +3452,6 @@ static int isagnus[]= {
static void dump_copper (const char *error, unsigned int until_hpos) static void dump_copper (const char *error, unsigned int until_hpos)
{ {
static int warned = 10;
if (warned < 0)
return;
warned--;
write_log ("%s: vpos=%d until_hpos=%d\n", write_log ("%s: vpos=%d until_hpos=%d\n",
error, vpos, until_hpos); error, vpos, until_hpos);
write_log("cvcmp=%d chcmp=%d chpos=%d cvpos=%d ci1=%#4.4X ci2=%#4.4X\n", write_log("cvcmp=%d chcmp=%d chpos=%d cvpos=%d ci1=%#4.4X ci2=%#4.4X\n",
@ -3664,11 +3668,6 @@ static void update_copper (unsigned int until_hpos)
static int skipped_before; static int skipped_before;
unsigned int vcmp, hcmp, vp1, hp1; unsigned int vcmp, hcmp, vp1, hp1;
if (! skipped_before) {
skipped_before = 1;
write_log ("Program uses Copper SKIP instruction.\n");
}
if (c_hpos >= (maxhpos & ~1)) if (c_hpos >= (maxhpos & ~1))
break; break;
@ -4034,6 +4033,7 @@ static void adjust_array_sizes (void)
static void init_hardware_frame (void) static void init_hardware_frame (void)
{ {
first_bpl_vpos = -1;
next_lineno = 0; next_lineno = 0;
nextline_how = nln_normal; nextline_how = nln_normal;
diwstate = DIW_waiting_start; diwstate = DIW_waiting_start;
@ -4286,8 +4286,6 @@ static void vsync_handler (void)
picasso_handle_vsync (); picasso_handle_vsync ();
#endif #endif
vsync_handle_redraw (lof, lof_changed);
{ {
static int cnt = 0; static int cnt = 0;
if (cnt == 0) { if (cnt == 0) {
@ -4303,6 +4301,8 @@ static void vsync_handler (void)
record_copper_reset(); record_copper_reset();
#endif #endif
vsync_handle_redraw (lof, lof_changed);
/* For now, let's only allow this to change at vsync time. It gets too /* For now, let's only allow this to change at vsync time. It gets too
* hairy otherwise. */ * hairy otherwise. */
if ((beamcon0 & (0x20|0x80)) != (new_beamcon0 & (0x20|0x80)) || hack_vpos) if ((beamcon0 & (0x20|0x80)) != (new_beamcon0 & (0x20|0x80)) || hack_vpos)
@ -4313,11 +4313,11 @@ static void vsync_handler (void)
eventtab[ev_copper].active = 0; eventtab[ev_copper].active = 0;
COPJMP (1); COPJMP (1);
init_hardware_frame ();
if (timehack_alive > 0) if (timehack_alive > 0)
timehack_alive--; timehack_alive--;
inputdevice_vsync (); inputdevice_vsync ();
init_hardware_frame ();
} }
#ifdef JIT #ifdef JIT
@ -4545,6 +4545,9 @@ void customreset (void)
bplcon4 = 0x11; /* Get AGA chipset into ECS compatibility mode */ bplcon4 = 0x11; /* Get AGA chipset into ECS compatibility mode */
bplcon3 = 0xC00; bplcon3 = 0xC00;
diwhigh = 0;
diwhigh_written = 0;
FMODE (0); FMODE (0);
CLXCON (0); CLXCON (0);
} }
@ -5124,14 +5127,20 @@ void REGPARAM2 custom_wput (uaecptr addr, uae_u32 value)
write_log ("%d:%d:wput: %04.4X %04.4X pc=%p\n", hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc (&regs)); write_log ("%d:%d:wput: %04.4X %04.4X pc=%p\n", hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc (&regs));
#endif #endif
sync_copper_with_cpu (hpos, 1); sync_copper_with_cpu (hpos, 1);
if (addr & 1) {
addr &= ~1;
custom_wput_1 (hpos, addr, (value >> 8) | (value & 0xff00), 0);
custom_wput_1 (hpos, addr + 2, (value << 8) | (value & 0x00ff), 0);
return;
}
custom_wput_1 (hpos, addr, value, 0); custom_wput_1 (hpos, addr, value, 0);
} }
void REGPARAM2 custom_bput (uaecptr addr, uae_u32 value) void REGPARAM2 custom_bput (uaecptr addr, uae_u32 value)
{ {
uae_u16 rval = (value << 8) | (value & 0xFF);
static int warned; static int warned;
uae_u16 rval = (value << 8) | (value & 0xFF);
#ifdef JIT #ifdef JIT
special_mem |= SPECIAL_MEM_WRITE; special_mem |= SPECIAL_MEM_WRITE;
#endif #endif
@ -5280,8 +5289,7 @@ const uae_u8 *restore_custom (const uae_u8 *src)
vsstrt = RW; /* 1E0 VSSTT */ vsstrt = RW; /* 1E0 VSSTT */
hcenter = RW; /* 1E2 HCENTER */ hcenter = RW; /* 1E2 HCENTER */
diwhigh = RW; /* 1E4 DIWHIGH */ diwhigh = RW; /* 1E4 DIWHIGH */
if (diwhigh & 0x8000) diwhigh_written = (diwhigh & 0x8000) ? 1 : 0;
diwhigh_written = 1;
diwhigh &= 0x7fff; diwhigh &= 0x7fff;
RW; /* 1E6 ? */ RW; /* 1E6 ? */
RW; /* 1E8 ? */ RW; /* 1E8 ? */

View File

@ -1025,7 +1025,7 @@ static void rand_shifter (void)
} }
} }
static int drive_empty (drive * drv) STATIC_INLINE int drive_empty (const drive * drv)
{ {
#ifdef CATWEASEL #ifdef CATWEASEL
if (drv->catweasel) if (drv->catweasel)
@ -2122,7 +2122,7 @@ static char *tobin (uae_u8 v)
static char buf[10]; static char buf[10];
for ( i = 7; i >= 0; i--) for ( i = 7; i >= 0; i--)
buf[7 - i] = v & (1 << i) ? '1' : '0'; buf[7 - i] = v & (1 << i) ? '1' : '0';
buf[i] = 0; buf[8] = 0;
return buf; return buf;
} }
@ -2262,7 +2262,7 @@ uae_u8 DISK_status (void)
return st; return st;
} }
static int unformatted (drive *drv) STATIC_INLINE int unformatted (const drive *drv)
{ {
unsigned int tr = drv->cyl * 2 + side; unsigned int tr = drv->cyl * 2 + side;
if (tr >= drv->num_tracks) if (tr >= drv->num_tracks)
@ -2442,20 +2442,20 @@ static void updatetrackspeed (drive *drv, unsigned int mfmpos)
} }
} }
static void disk_doupdate_predict (drive * drv, unsigned int startcycle) STATIC_INLINE void disk_doupdate_predict (drive * drv, unsigned int startcycle, int write)
{ {
unsigned int firstcycle = startcycle; unsigned int firstcycle = startcycle;
unsigned int endcycle = maxhpos << 8;
uae_u32 tword = word; uae_u32 tword = word;
unsigned int mfmpos = drv->mfmpos; unsigned int mfmpos = drv->mfmpos;
int indexhack = drv->indexhack;
int is_empty = drive_empty (drv); int is_empty = drive_empty (drv);
int is_unformatted = unformatted (drv); int is_unformatted = unformatted (drv);
unsigned int event_flag = 0;
diskevent_flag = 0; while (startcycle < endcycle && !event_flag) {
while (startcycle < (maxhpos << 8) && !diskevent_flag) {
if (drv->tracktiming[0]) if (drv->tracktiming[0])
updatetrackspeed (drv, mfmpos); updatetrackspeed (drv, mfmpos);
if (dskdmaen != 3) { if (!write) {
tword <<= 1; tword <<= 1;
if (!is_empty) { if (!is_empty) {
if (is_unformatted) if (is_unformatted)
@ -2464,34 +2464,31 @@ static void disk_doupdate_predict (drive * drv, unsigned int startcycle)
tword |= getonebit (drv->bigmfmbuf, mfmpos); tword |= getonebit (drv->bigmfmbuf, mfmpos);
} }
if ((tword & 0xffff) == dsksync) if ((tword & 0xffff) == dsksync)
diskevent_flag |= DISK_WORDSYNC; event_flag |= DISK_WORDSYNC;
} }
mfmpos++; mfmpos++;
mfmpos %= drv->tracklen; mfmpos %= drv->tracklen;
if (mfmpos == 0) if (mfmpos == 0)
diskevent_flag |= DISK_REVOLUTION << (drv - floppy); event_flag |= DISK_REVOLUTION << (drv - floppy);
if (mfmpos == drv->indexoffset) { if (mfmpos == drv->indexoffset)
diskevent_flag |= DISK_INDEXSYNC; event_flag |= DISK_INDEXSYNC;
indexhack = 0; if (!write && (int)mfmpos == drv->skipoffset) {
}
if (dskdmaen != 3 && (int)mfmpos == drv->skipoffset) {
int skipcnt = disk_jitter; int skipcnt = disk_jitter;
while (skipcnt-- > 0) { while (skipcnt-- > 0) {
mfmpos++; mfmpos++;
mfmpos %= drv->tracklen; mfmpos %= drv->tracklen;
if (mfmpos == 0) if (mfmpos == 0)
diskevent_flag |= DISK_REVOLUTION << (drv - floppy); event_flag |= DISK_REVOLUTION << (drv - floppy);
if (mfmpos == drv->indexoffset) { if (mfmpos == drv->indexoffset)
diskevent_flag |= DISK_INDEXSYNC; event_flag |= DISK_INDEXSYNC;
indexhack = 0;
}
} }
} }
startcycle += drv->trackspeed; startcycle += drv->trackspeed;
} }
if (drv->tracktiming[0]) if (drv->tracktiming[0])
updatetrackspeed (drv, drv->mfmpos); updatetrackspeed (drv, drv->mfmpos);
if (diskevent_flag) { diskevent_flag = event_flag;
if (event_flag) {
disk_sync_cycle = startcycle >> 8; disk_sync_cycle = startcycle >> 8;
eventtab[ev_disk].oldcycles = get_cycles (); eventtab[ev_disk].oldcycles = get_cycles ();
eventtab[ev_disk].evtime = get_cycles () + startcycle - firstcycle; eventtab[ev_disk].evtime = get_cycles () + startcycle - firstcycle;
@ -2708,7 +2705,7 @@ void DISK_hsync (unsigned int tohpos)
void DISK_update (unsigned int tohpos) void DISK_update (unsigned int tohpos)
{ {
unsigned int dr; unsigned int dr;
unsigned int cycles = (tohpos << 8) - disk_hpos; int cycles = (int)((tohpos << 8) - disk_hpos);
disk_jitter = ((rand () >> 4) & 3) + 1; disk_jitter = ((rand () >> 4) & 3) + 1;
if (disk_jitter > 2) if (disk_jitter > 2)
@ -2744,11 +2741,13 @@ void DISK_update (unsigned int tohpos)
continue; continue;
if (selected & (1 << dr)) if (selected & (1 << dr))
continue; continue;
if (dskdmaen == 3) if (dskdmaen == 3) {
disk_doupdate_write (drv, drv->floppybitcounter); disk_doupdate_write (drv, drv->floppybitcounter);
else disk_doupdate_predict (drv, disk_hpos, 1);
} else {
disk_doupdate_read (drv, drv->floppybitcounter); disk_doupdate_read (drv, drv->floppybitcounter);
disk_doupdate_predict (drv, disk_hpos); disk_doupdate_predict (drv, disk_hpos, 0);
}
drv->floppybitcounter %= drv->trackspeed; drv->floppybitcounter %= drv->trackspeed;
break; break;
} }

View File

@ -75,8 +75,6 @@ static int dblpfofs[] = { 0, 2, 4, 8, 16, 32, 64, 128 };
static int sprite_offs[256]; static int sprite_offs[256];
static uae_u32 clxtab[256];
/* Video buffer description structure. Filled in by the graphics system /* Video buffer description structure. Filled in by the graphics system
* dependent code. */ * dependent code. */
@ -653,14 +651,6 @@ static void gen_pfield_tables (void)
dblpf_ind2[i] = i >= 128 ? i & 0x7F : (plane2 == 0 ? plane1 : plane2); dblpf_ind2[i] = i >= 128 ? i & 0x7F : (plane2 == 0 ? plane1 : plane2);
sprite_offs[i] = (i & 15) ? 0 : 2; sprite_offs[i] = (i & 15) ? 0 : 2;
clxtab[i] = ((((i & 3) && (i & 12)) << 9)
| (((i & 3) && (i & 48)) << 10)
| (((i & 3) && (i & 192)) << 11)
| (((i & 12) && (i & 48)) << 12)
| (((i & 12) && (i & 192)) << 13)
| (((i & 48) && (i & 192)) << 14));
} }
} }
@ -1826,12 +1816,14 @@ void finish_drawing_frame (void)
#endif #endif
for (i = 0; i < max_ypos_thisframe; i++) { for (i = 0; i < max_ypos_thisframe; i++) {
int where; int where;
int i1 = i + min_ypos_for_screen; int i1;
int line = i + thisframe_y_adjust_real; int line = i + thisframe_y_adjust_real;
if (linestate[line] == LINE_UNDECIDED) if (linestate[line] == LINE_UNDECIDED)
break; break;
i1 = i + min_ypos_for_screen;
where = amiga2aspect_line_map[i1]; where = amiga2aspect_line_map[i1];
if (where >= gfxvidinfo.height) if (where >= gfxvidinfo.height)
break; break;
@ -1841,8 +1833,8 @@ void finish_drawing_frame (void)
pfield_draw_line (line, where, amiga2aspect_line_map[i1 + 1]); pfield_draw_line (line, where, amiga2aspect_line_map[i1 + 1]);
} }
if (currprefs.leds_on_screen) { if (currprefs.leds_on_screen) {
for (i = 0; i < TD_TOTAL_HEIGHT; i++) { int line = gfxvidinfo.height - TD_TOTAL_HEIGHT;
int line = gfxvidinfo.height - TD_TOTAL_HEIGHT + i; for (i = TD_TOTAL_HEIGHT; i--; line++) {
draw_status_line (line); draw_status_line (line);
do_flush_line (line); do_flush_line (line);
} }
@ -2024,7 +2016,7 @@ void reset_drawing (void)
lores_reset (); lores_reset ();
for (i = 0; i < sizeof linestate / sizeof *linestate; i++) for (i = sizeof linestate / sizeof *linestate; i--;)
linestate[i] = LINE_UNDECIDED; linestate[i] = LINE_UNDECIDED;
init_aspect_maps (); init_aspect_maps ();

View File

@ -12,6 +12,7 @@
; 200?.??.?? Picasso96 vblank hack (TW) ; 200?.??.?? Picasso96 vblank hack (TW)
; 2006.03.04 Mousehack code integrated (TW) ; 2006.03.04 Mousehack code integrated (TW)
; 2006.18.07 FileSystem.resource find routine access fault fixed (TW) ; 2006.18.07 FileSystem.resource find routine access fault fixed (TW)
; 2007.03.30 mousehack do not start multiple times anymore (TW)
AllocMem = -198 AllocMem = -198
FreeMem = -210 FreeMem = -210
@ -160,7 +161,7 @@ general_ret:
exter_data: exter_data:
exter_server: exter_server:
movem.l a2,-(sp) movem.l a2,-(sp)
move.w #$FF50,d0 move.w #$FF50,d0 ; exter_int_helper
bsr.w getrtbase bsr.w getrtbase
moveq.l #0,d0 moveq.l #0,d0
jsr (a0) jsr (a0)
@ -621,8 +622,10 @@ filesys_mainloop:
FSML_loop: FSML_loop:
bsr.w mousehack_init bsr.w mousehack_init
move.l a5,a0 move.l a5,a0
jsr -384(a6) ; WaitPort jsr -384(a6) ; WaitPort
move.l a5,a0 move.l a5,a0
jsr -372(a6) ; GetMsg jsr -372(a6) ; GetMsg
move.l d0,a4 move.l d0,a4
@ -665,7 +668,7 @@ nonotif
move.l (a2),a0 move.l (a2),a0
FSML_check_old: FSML_check_old:
move.l a0,d0 move.l a0,d0
beq.b FSML_loop beq.w FSML_loop
move.l (a0),a1 move.l (a0),a1
move.l d0,a0 move.l d0,a0
; This field may be accessed concurrently by several UAE threads. ; This field may be accessed concurrently by several UAE threads.
@ -697,7 +700,7 @@ FSML_FromDOS:
FSML_DoCommand: FSML_DoCommand:
bsr.b LockCheck ; Make sure there are enough locks for the C code to grab. bsr.b LockCheck ; Make sure there are enough locks for the C code to grab.
move.w #$FF30,d0 move.w #$FF30,d0 ; filesys_handler
bsr.w getrtbase bsr.w getrtbase
jsr (a0) jsr (a0)
tst.l d0 tst.l d0
@ -903,12 +906,16 @@ mousehack_init:
tst.b 157(a3) tst.b 157(a3)
bne.s .no bne.s .no
lea mousehack_e(pc),a0 lea mousehack_e(pc),a0
tst.w (a0) cmp.b #1,(a0)
beq.s .no bne.s .no
lea mhname(pc),a0 lea mhname(pc),a0
lea mousehack_task(pc),a1 lea mousehack_task(pc),a1
bsr createtask bsr createtask
st 157(a3) st 157(a3)
;tell native side that mousehack is active
move.w #$FF38,d0
bsr.w getrtbase
jsr (a0)
.no move.l (sp)+,a0 .no move.l (sp)+,a0
rts rts

View File

@ -1,35 +1,35 @@
db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00);
db(0x60); db(0x00); db(0x04); db(0xf6); db(0x00); db(0x00); db(0x03); db(0xb2); db(0x60); db(0x00); db(0x04); db(0xee); db(0x00); db(0x00); db(0x03); db(0xaa);
db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x00); db(0xd4); db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x00); db(0xd4);
db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x01); db(0x8e); db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x01); db(0x8e);
db(0x00); db(0x00); db(0x06); db(0xb6); db(0x00); db(0x00); db(0x07); db(0xda); db(0x00); db(0x00); db(0x06); db(0xb0); db(0x00); db(0x00); db(0x07); db(0xd4);
db(0x43); db(0xfa); db(0x09); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x43); db(0xfa); db(0x09); db(0xac); db(0x4e); db(0xae); db(0xff); db(0xa0);
db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40);
db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xff); db(0xfe);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc);
db(0x61); db(0x00); db(0x06); db(0x64); db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x61); db(0x00); db(0x06); db(0x5e); db(0x2a); db(0x50); db(0x43); db(0xfa);
db(0x09); db(0x9e); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0x09); db(0xa4); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa);
db(0x09); db(0x8e); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0x09); db(0x94); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae);
db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00);
db(0x02); db(0x2c); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x02); db(0x2c); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00);
db(0xbc); db(0xad); db(0x01); db(0x0c); db(0x64); db(0x24); db(0x2f); db(0x06); db(0xbc); db(0xad); db(0x01); db(0x0c); db(0x64); db(0x24); db(0x2f); db(0x06);
db(0x7e); db(0x01); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x7e); db(0x01); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00);
db(0x03); db(0x2a); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0x03); db(0x22); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff);
db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46);
db(0x48); db(0x46); db(0x60); db(0xe4); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xe4); db(0x2c); db(0x1f); db(0x52); db(0x46);
db(0x60); db(0xd6); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); db(0x60); db(0xd6); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c);
db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); db(0xff); db(0x80); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); db(0xff); db(0x80);
db(0x61); db(0x00); db(0x05); db(0xf4); db(0x4e); db(0x90); db(0x72); db(0x03); db(0x61); db(0x00); db(0x05); db(0xee); db(0x4e); db(0x90); db(0x72); db(0x03);
db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00);
db(0x90); db(0x88); db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00); db(0x90); db(0x88); db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00);
db(0x22); db(0x44); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x4c); db(0xdf); db(0x22); db(0x44); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x4c); db(0xdf);
db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20);
db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x05); db(0xc8); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x05); db(0xc2);
db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00);
db(0x00); db(0xa0); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0x00); db(0xa0); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x05); db(0xb2); db(0x70); db(0x02); db(0xff); db(0x50); db(0x61); db(0x00); db(0x05); db(0xac); db(0x70); db(0x02);
db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x7a); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x7a);
db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe6); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe6);
db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01);
@ -47,11 +47,11 @@
db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10);
db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00);
db(0xff); db(0x76); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00);
db(0x05); db(0x26); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x05); db(0x20); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01);
db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7);
db(0xc0); db(0xc0); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0xc0); db(0xc0); db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01);
db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40);
db(0x41); db(0xfa); db(0x08); db(0x17); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x08); db(0x1d); db(0x23); db(0x48); db(0x00); db(0x0a);
db(0x41); db(0xfa); db(0xff); db(0x2a); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x2a); db(0x23); db(0x48); db(0x00); db(0x0e);
db(0x41); db(0xfa); db(0xff); db(0x22); db(0x23); db(0x48); db(0x00); db(0x12); db(0x41); db(0xfa); db(0xff); db(0x22); db(0x23); db(0x48); db(0x00); db(0x12);
db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03);
@ -64,24 +64,23 @@
db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40);
db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88);
db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa);
db(0x07); db(0xb1); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x07); db(0xb7); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b);
db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae);
db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75);
db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3);
db(0x66); db(0x00); db(0x00); db(0xec); db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a);
db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87);
db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80);
db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00);
db(0x24); db(0x12); db(0xe5); db(0x8a); db(0x72); db(0x01); db(0x08); db(0x03); db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e);
db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1);
db(0x08); db(0xc1); db(0x00); db(0x10); db(0x08); db(0x83); db(0x00); db(0x1f); db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04);
db(0x08); db(0x83); db(0x00); db(0x1e); db(0x20); db(0x02); db(0x66); db(0x04);
db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae);
db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0);
db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d);
db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80);
db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xb8); db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0);
db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81);
db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b);
db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00);
@ -106,48 +105,48 @@
db(0x60); db(0xd4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x60); db(0xd4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78);
db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50);
db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a);
db(0x45); db(0xfa); db(0x06); db(0x9e); db(0x10); db(0x19); db(0x12); db(0x1a); db(0x45); db(0xfa); db(0x06); db(0xac); db(0x10); db(0x19); db(0x12); db(0x1a);
db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42);
db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20);
db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae);
db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08);
db(0x00); db(0x08); db(0x41); db(0xfa); db(0x06); db(0x74); db(0x25); db(0x48); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x06); db(0x82); db(0x25); db(0x48);
db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x06); db(0x2d); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x06); db(0x3b); db(0x25); db(0x48);
db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88);
db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee);
db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a);
db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02);
db(0x4e); db(0x75); db(0x61); db(0x00); db(0xff); db(0x8e); db(0x21); db(0x40); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xff); db(0x8e); db(0x21); db(0x40);
db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc);
db(0x61); db(0x00); db(0x02); db(0xe4); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0x61); db(0x00); db(0x02); db(0xe6); db(0x2a); db(0x50); db(0x30); db(0x3c);
db(0xff); db(0x28); db(0x61); db(0x00); db(0x02); db(0xda); db(0x22); db(0x48); db(0xff); db(0x28); db(0x61); db(0x00); db(0x02); db(0xdc); db(0x22); db(0x48);
db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8);
db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x83); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x83);
db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xfc); db(0xec); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xfc); db(0xf4);
db(0x0c); db(0x83); db(0x00); db(0x00); db(0x00); db(0x02); db(0x67); db(0x0c); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x00); db(0x02); db(0x67); db(0x0c);
db(0xc0); db(0x85); db(0x67); db(0x08); db(0x4a); db(0xa8); db(0x01); db(0x90); db(0xc0); db(0x85); db(0x67); db(0x08); db(0x4a); db(0xa8); db(0x01); db(0x90);
db(0x67); db(0x00); db(0xfc); db(0xd8); db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x00); db(0xfc); db(0xe0); db(0x20); db(0x28); db(0x01); db(0x90);
db(0x67); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x67); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78);
db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f);
db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x10); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x10);
db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00);
db(0x02); db(0x86); db(0x4e); db(0x90); db(0x60); db(0x00); db(0x00); db(0x28); db(0x02); db(0x88); db(0x4e); db(0x90); db(0x60); db(0x00); db(0x00); db(0x28);
db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70);
db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c);
db(0xff); db(0x20); db(0x61); db(0x00); db(0x02); db(0x6a); db(0x4e); db(0x90); db(0xff); db(0x20); db(0x61); db(0x00); db(0x02); db(0x6c); db(0x4e); db(0x90);
db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40);
db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9);
db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94);
db(0x61); db(0x00); db(0xfd); db(0xc6); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x61); db(0x00); db(0xfd); db(0xce); db(0x48); db(0xe7); db(0x80); db(0xc0);
db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e);
db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04);
db(0x61); db(0x00); db(0xfd); db(0x50); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x58); db(0x4a); db(0x83); db(0x6b); db(0x00);
db(0xfc); db(0x52); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0xfc); db(0x5a); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00);
db(0x02); db(0x1e); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); db(0x02); db(0x20); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29);
db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c);
db(0x00); db(0x00); db(0x0f); db(0xa0); db(0x00); db(0x14); db(0x43); db(0xfa); db(0x00); db(0x00); db(0x0f); db(0xa0); db(0x00); db(0x14); db(0x43); db(0xfa);
db(0xfb); db(0x5c); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x27); db(0x40); db(0xfb); db(0x64); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x27); db(0x40);
db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24);
db(0x4a); db(0x87); db(0x67); db(0x36); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x87); db(0x67); db(0x36); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a);
@ -160,7 +159,7 @@
db(0x70); db(0xff); db(0x2c); db(0x4c); db(0x4e); db(0xee); db(0xff); db(0x6a); db(0x70); db(0xff); db(0x2c); db(0x4c); db(0x4e); db(0xee); db(0xff); db(0x6a);
db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x22); db(0x40); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x22); db(0x40);
db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8);
db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x04); db(0xbc); db(0x70); db(0x00); db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x04); db(0xca); db(0x70); db(0x00);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c);
db(0x00); db(0x00); db(0x00); db(0x9e); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x00); db(0x00); db(0x9e); db(0x22); db(0x3c); db(0x00); db(0x01);
db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40);
@ -168,9 +167,9 @@
db(0x27); db(0x46); db(0x00); db(0x08); db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x27); db(0x46); db(0x00); db(0x08); db(0x7a); db(0x00); db(0x20); db(0x4d);
db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae);
db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a);
db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x01); db(0x58); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x01); db(0x5a);
db(0x70); db(0x00); db(0x4e); db(0x90); db(0x61); db(0x00); db(0x02); db(0x88); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x61); db(0x00); db(0x02); db(0x8a);
db(0x60); db(0x00); db(0x00); db(0xd8); db(0x61); db(0x00); db(0x02); db(0x80); db(0x60); db(0x00); db(0x00); db(0xda); db(0x61); db(0x00); db(0x02); db(0x82);
db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d);
db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x0c); db(0x6c); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x0c); db(0x6c);
db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4a); db(0x0c); db(0xac); db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4a); db(0x0c); db(0xac);
@ -183,142 +182,144 @@
db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08);
db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xa6); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xa6); db(0x22); db(0x4c);
db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x9c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x9c);
db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3c); db(0x30); db(0x3c); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); db(0x30); db(0x3c);
db(0xff); db(0x50); db(0x61); db(0x00); db(0x00); db(0xda); db(0x70); db(0x01); db(0xff); db(0x50); db(0x61); db(0x00); db(0x00); db(0xdc); db(0x70); db(0x01);
db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52); db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52);
db(0x20); db(0x08); db(0x67); db(0x80); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x80); db(0x22); db(0x50);
db(0x20); db(0x28); db(0x00); db(0x04); db(0x6a); db(0x16); db(0x48); db(0xe7); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0x6a); db(0x16);
db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a);
db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00);
db(0x20); db(0x49); db(0x60); db(0xdc); db(0x24); db(0x48); db(0x20); db(0x49); db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xda); db(0x24); db(0x48);
db(0x60); db(0xd6); db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x20); db(0x49); db(0x60); db(0xd4); db(0x0c); db(0x85); db(0x00); db(0x00);
db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01);
db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x32); db(0x30); db(0x3c); db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x32);
db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0x8a); db(0x4e); db(0x90); db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0x8a);
db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85);
db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04);
db(0xff); db(0x2c); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0x60); db(0x00); db(0xff); db(0x2a); db(0x28); db(0x43); db(0x61); db(0x04);
db(0xff); db(0x24); db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x22); db(0x22); db(0x54); db(0x20); db(0x6c);
db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee);
db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53);
db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c);
db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52);
db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47);
db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a);
db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40);
db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10);
db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a);
db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e);
db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a);
db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75);
db(0xf9); db(0x4c); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0x41); db(0xfa); db(0xf9); db(0x52); db(0x02); db(0x80); db(0x00); db(0x00);
db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x0c); db(0xaf); db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x00); db(0x00);
db(0x00); db(0x00); db(0x00); db(0x22); db(0x00); db(0x08); db(0x66); db(0x30); db(0x0c); db(0xaf); db(0x00); db(0x00); db(0x00); db(0x22); db(0x00); db(0x08);
db(0x48); db(0xe7); db(0xc0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x66); db(0x30); db(0x48); db(0xe7); db(0xc0); db(0xe2); db(0x2c); db(0x78);
db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x24); db(0x40); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda);
db(0x22); db(0x4a); db(0x70); db(0xec); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x70); db(0xec); db(0x4e); db(0xae);
db(0x41); db(0xfa); db(0xff); db(0xda); db(0x32); db(0x10); db(0xb2); db(0x50); db(0xfe); db(0xd4); db(0x41); db(0xfa); db(0xff); db(0xda); db(0x32); db(0x10);
db(0x67); db(0xfc); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0xb2); db(0x50); db(0x67); db(0xfc); db(0x22); db(0x4a); db(0x4e); db(0xae);
db(0x72); db(0x01); db(0x4c); db(0xdf); db(0x47); db(0x03); db(0x58); db(0x8f); db(0xfe); db(0xd4); db(0x72); db(0x01); db(0x4c); db(0xdf); db(0x47); db(0x03);
db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); db(0x58); db(0x8f); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90);
db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08);
db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79);
db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae);
db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32);
db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40);
db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04);
db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9);
db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10);
db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xae); db(0x20); db(0x4a); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xae);
db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04);
db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x79);
db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x20); db(0x24); db(0x40); db(0x00); db(0x00); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x20);
db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x24); db(0x40); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c);
db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a);
db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); db(0x21); db(0x42); db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08);
db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4c); db(0xdf); db(0x21); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e);
db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x30); db(0x32); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7);
db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x24); db(0x08); db(0x30); db(0x32); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04);
db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00);
db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00);
db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x00); db(0x2c); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01);
db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); db(0x00); db(0x08); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea);
db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb);
db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b);
db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x4e); db(0xae); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb);
db(0xfe); db(0xe6); db(0x4c); db(0xdf); db(0x4c); db(0x0c); db(0x4e); db(0x75); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x4c); db(0xdf); db(0x4c); db(0x0c);
db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x2f); db(0x08); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00);
db(0x4a); db(0x2b); db(0x00); db(0x9d); db(0x66); db(0x18); db(0x41); db(0xfa); db(0x2f); db(0x08); db(0x4a); db(0x2b); db(0x00); db(0x9d); db(0x66); db(0x24);
db(0xff); db(0xf0); db(0x4a); db(0x50); db(0x67); db(0x10); db(0x41); db(0xfa); db(0x41); db(0xfa); db(0xff); db(0xf0); db(0x0c); db(0x10); db(0x00); db(0x01);
db(0x01); db(0xba); db(0x43); db(0xfa); db(0x00); db(0x0e); db(0x61); db(0x00); db(0x66); db(0x1a); db(0x41); db(0xfa); db(0x01); db(0xc4); db(0x43); db(0xfa);
db(0xff); db(0x8c); db(0x50); db(0xeb); db(0x00); db(0x9d); db(0x20); db(0x5f); db(0x00); db(0x18); db(0x61); db(0x00); db(0xff); db(0x8a); db(0x50); db(0xeb);
db(0x4e); db(0x75); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x00); db(0x9d); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00);
db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00); db(0xfe); db(0xa0); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75);
db(0x01); db(0xc2); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff);
db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2);
db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x43); db(0xfa); db(0x01); db(0xae); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40);
db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4);
db(0x30); db(0x3c); db(0x00); db(0x44); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x70); db(0x00); db(0x43); db(0xfa); db(0x01); db(0xae); db(0x4e); db(0xae);
db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c);
db(0x61); db(0x00); db(0xfe); db(0xbe); db(0x61); db(0x00); db(0xff); db(0x0a); db(0x00); db(0x44); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01);
db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); db(0x00); db(0x7a); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x61); db(0x00);
db(0x22); db(0x40); db(0x41); db(0xfa); db(0x01); db(0x3c); db(0x70); db(0x00); db(0xfe); db(0xb2); db(0x61); db(0x00); db(0xfe); db(0xfe); db(0x2b); db(0x40);
db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x00); db(0x3c); db(0x67); db(0x00); db(0x00); db(0x7a); db(0x22); db(0x40);
db(0x66); db(0x00); db(0x00); db(0x66); db(0x61); db(0x00); db(0xfe); db(0x9a); db(0x41); db(0xfa); db(0x01); db(0x3c); db(0x70); db(0x00); db(0x72); db(0x00);
db(0x61); db(0x00); db(0xfe); db(0xe6); db(0x2b); db(0x40); db(0x00); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0x00);
db(0x67); db(0x00); db(0x00); db(0x56); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x00); db(0x66); db(0x61); db(0x00); db(0xfe); db(0x8e); db(0x61); db(0x00);
db(0x01); db(0x25); db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x40); db(0x67); db(0x00);
db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0x00); db(0x00); db(0x42); db(0x00); db(0x56); db(0x22); db(0x40); db(0x41); db(0xfa); db(0x01); db(0x25);
db(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x70); db(0x00); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44);
db(0x27); db(0x42); db(0x00); db(0x08); db(0x70); db(0xff); db(0x26); db(0x80); db(0x4a); db(0x80); db(0x66); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed);
db(0x27); db(0x40); db(0x00); db(0x04); db(0x43); db(0xed); db(0x00); db(0x00); db(0x00); db(0x16); db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42);
db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x08); db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40);
db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x00); db(0xfc); db(0x00); db(0x04); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c);
db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05);
db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x00); db(0xfc); db(0x23); db(0x48);
db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x60); db(0x02); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48);
db(0x4e); db(0x75); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x00); db(0x12); db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05);
db(0x22); db(0x6d); db(0x00); db(0x3c); db(0x45); db(0xed); db(0x00); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75);
db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d);
db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x3c); db(0x45); db(0xed); db(0x00); db(0x26); db(0x33); db(0x7c);
db(0x00); db(0x28); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00);
db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28);
db(0x00); db(0x05); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x15); db(0x7c);
db(0x00); db(0x08); db(0x20); db(0x47); db(0x20); db(0x2d); db(0x00); db(0x16); db(0x00); db(0x04); db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05);
db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08);
db(0x35); db(0x40); db(0x00); db(0x0a); db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x20); db(0x47); db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28);
db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40);
db(0x48); db(0xc0); db(0x35); db(0x40); db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x0a); db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28);
db(0x00); db(0x40); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0);
db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0x35); db(0x40); db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40);
db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x00); db(0x40); db(0x25); db(0x69); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c);
db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38);
db(0x00); db(0x12); db(0x22); db(0x6d); db(0x00); db(0x3c); db(0x4e); db(0xae); db(0x22); db(0x6d); db(0x00); db(0x40); db(0x25); db(0x69); db(0x00); db(0x20);
db(0xfe); db(0x38); db(0x60); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3a); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12);
db(0xfe); db(0x82); db(0x48); db(0xc0); db(0x32); db(0x3a); db(0xfe); db(0x7e); db(0x22); db(0x6d); db(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38);
db(0x48); db(0xc1); db(0xb0); db(0x91); db(0x66); db(0x00); db(0x00); db(0x0a); db(0x60); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0x76);
db(0xb2); db(0xa9); db(0x00); db(0x04); db(0x67); db(0x00); db(0x00); db(0x18); db(0x48); db(0xc0); db(0x32); db(0x3a); db(0xfe); db(0x72); db(0x48); db(0xc1);
db(0x23); db(0x41); db(0x00); db(0x04); db(0x22); db(0x80); db(0x20); db(0x29); db(0xb0); db(0x91); db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9);
db(0x00); db(0x08); db(0x22); db(0x69); db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41);
db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0x04); db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08);
db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x22); db(0x69); db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04);
db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf);
db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x69); db(0x6e);
db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69);
db(0x65); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72);
db(0x75); db(0x73); db(0x65); db(0x20); db(0x68); db(0x61); db(0x63); db(0x6b); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00);
db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73);
db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x65); db(0x20); db(0x68); db(0x61); db(0x63); db(0x6b); db(0x00); db(0x55);
db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73);
db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x64); db(0x6f);
db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72);
db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74);
db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72);
db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); db(0x61);
db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69);
db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69);
db(0x72); db(0x63); db(0x65); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d);
db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63);
db(0x65); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2);

View File

@ -93,11 +93,15 @@ static void generate_func(void)
#endif #endif
if (a_is_on) printf("uae_u32 preva = 0;\n"); if (a_is_on) printf("uae_u32 preva = 0;\n");
if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n"); if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n");
printf("uae_u32 srcc = b->bltcdat;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n");
printf("uae_u32 dstd=0;\n"); printf("uae_u32 dstd=0;\n");
printf("uaecptr dstp = 0;\n"); printf("uaecptr dstp = 0;\n");
printf("for (j = b->vblitsize; j--; ) {\n"); printf("for (j = b->vblitsize; j--; ) {\n");
if (a_is_on) {
printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n\n");
} else {
printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, srca;\n\n");
}
if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc += 2; }\n"); if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc += 2; }\n");
if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget (ptb); ptb += 2;\n"); if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget (ptb); ptb += 2;\n");
if (b_is_on) printf("\t\t\tsrcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift;\n"); if (b_is_on) printf("\t\t\tsrcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift;\n");
@ -116,8 +120,8 @@ static void generate_func(void)
if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n"); if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n");
printf("\tif (ptd) ptd += b->bltdmod;\n"); printf("\tif (ptd) ptd += b->bltdmod;\n");
printf("}\n"); printf("}\n");
if (b_is_on) printf("b->bltbhold = srcb;\n"); if (b_is_on) printf("\tb->bltbhold = srcb;\n");
printf("b->bltcdat = srcc;\n"); if (c_is_on) printf("\tb->bltcdat = srcc;\n");
printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n"); printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n");
#if 0 #if 0
printf("}\n"); printf("}\n");
@ -170,11 +174,15 @@ static void generate_func(void)
#endif #endif
if (a_is_on) printf("uae_u32 preva = 0;\n"); if (a_is_on) printf("uae_u32 preva = 0;\n");
if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n"); if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n");
printf("uae_u32 srcc = b->bltcdat;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n");
printf("uae_u32 dstd=0;\n"); printf("uae_u32 dstd=0;\n");
printf("uaecptr dstp = 0;\n"); printf("uaecptr dstp = 0;\n");
printf("for (j = b->vblitsize; j--; ) {\n"); printf("for (j = b->vblitsize; j--; ) {\n");
if (a_is_on) {
printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n");
} else {
printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, srca;\n");
}
if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc -= 2; }\n"); if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget (ptc); ptc -= 2; }\n");
if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget (ptb); ptb -= 2;\n"); if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget (ptb); ptb -= 2;\n");
if (b_is_on) printf("\t\t\tsrcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift;\n"); if (b_is_on) printf("\t\t\tsrcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift;\n");
@ -193,8 +201,8 @@ static void generate_func(void)
if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n"); if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n");
printf("\tif (ptd) ptd -= b->bltdmod;\n"); printf("\tif (ptd) ptd -= b->bltdmod;\n");
printf("}\n"); printf("}\n");
if (b_is_on) printf("b->bltbhold = srcb;\n"); if (b_is_on) printf("\tb->bltbhold = srcb;\n");
printf("b->bltcdat = srcc;\n"); if (c_is_on) printf("\tb->bltcdat = srcc;\n");
printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n"); printf("\t\tif (dstp) chipmem_wput (dstp, dstd);\n");
#if 0 #if 0
printf("}\n"); printf("}\n");
@ -268,4 +276,3 @@ int main(int argc, char **argv)
} }
return 0; return 0;
} }

View File

@ -52,7 +52,7 @@
#ifdef DEBUG #ifdef DEBUG
#define DEBUG_LOG write_log #define DEBUG_LOG write_log
#else #else
#define DEBUG_LOG(...) do ; while(0) #define DEBUG_LOG(...) do {} while(0)
#endif #endif
static SDL_Surface *display; static SDL_Surface *display;
@ -1159,7 +1159,7 @@ void handle_events (void)
switch (rEvent.type) { switch (rEvent.type) {
case SDL_QUIT: case SDL_QUIT:
DEBUG_LOG ("Event: quit\n"); DEBUG_LOG ("Event: quit\n");
uae_stop (); uae_quit ();
break; break;
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:

View File

@ -432,8 +432,12 @@ static uae_u32 REGPARAM2 hardfile_close (TrapContext *context)
if (!hfpd->opencount) if (!hfpd->opencount)
return 0; return 0;
hfpd->opencount--; hfpd->opencount--;
if (hfpd->opencount == 0)
if (hfpd->opencount == 0) {
write_comm_pipe_u32 (&hfpd->requests, 0, 1); write_comm_pipe_u32 (&hfpd->requests, 0, 1);
uae_sem_wait (&hfpd->sync_sem);
}
put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) - 1); put_word (m68k_areg (&context->regs, 6) + 32, get_word (m68k_areg (&context->regs, 6) + 32) - 1);
return 0; return 0;
} }
@ -663,7 +667,7 @@ static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata
error = handle_scsi (request, hfd); error = handle_scsi (request, hfd);
} else { /* we don't want users trashing their "partition" hardfiles with hdtoolbox */ } else { /* we don't want users trashing their "partition" hardfiles with hdtoolbox */
error = -3; /* IOERR_NOCMD */ error = -3; /* IOERR_NOCMD */
write_log ("UAEHF: HD_SCSICMD tried on regular HDF, unit %d", unit); write_log ("UAEHF: HD_SCSICMD tried on regular HDF, unit %d\n", unit);
} }
break; break;
@ -793,11 +797,20 @@ void hardfile_reset (void)
if ((request = hfpd->d_request[i])) if ((request = hfpd->d_request[i]))
abort_async (hfpd, request, 0, 0); abort_async (hfpd, request, 0, 0);
} }
write_comm_pipe_u32 (&hfpd->requests, 0, 1);
uae_sem_wait (&hfpd->sync_sem);
} }
memset (hfpd, 0, sizeof (struct hardfileprivdata)); memset (hfpd, 0, sizeof (struct hardfileprivdata));
} }
} }
void hardfile_cleanup (void)
{
hardfile_reset ();
}
void hardfile_install (void) void hardfile_install (void)
{ {
uae_u32 functable, datatable; uae_u32 functable, datatable;

View File

@ -16,7 +16,7 @@
#ifdef HDF_DEBUG #ifdef HDF_DEBUG
#define DEBUG_LOG write_log ( "%s: ", __func__); write_log #define DEBUG_LOG write_log ( "%s: ", __func__); write_log
#else #else
#define DEBUG_LOG(...) do ; while(0) #define DEBUG_LOG(...) do {} while(0)
#endif #endif
@ -47,7 +47,7 @@ static int hdf_seek (struct hardfiledata *hfd, uae_u64 offset)
return -1; return -1;
} }
ret = lseek ((int)hfd->handle, offset, SEEK_SET); ret = lseek (hfd->handle, offset, SEEK_SET);
if (ret == -1) { if (ret == -1) {
DEBUG_LOG ("seek failed\n"); DEBUG_LOG ("seek failed\n");
@ -67,7 +67,7 @@ static void poscheck (struct hardfiledata *hfd, int len)
abort (); abort ();
} }
pos = lseek ((int)hfd->handle, 0, SEEK_CUR); pos = lseek (hfd->handle, 0, SEEK_CUR);
if (pos == -1 ) { if (pos == -1 ) {
gui_message ("hd: poscheck failed. seek failure, error %d", errno); gui_message ("hd: poscheck failed. seek failure, error %d", errno);
@ -101,7 +101,7 @@ int hdf_open (struct hardfiledata *hfd, const char *name)
if ((handle = open (name, hfd->readonly ? O_RDONLY : O_RDWR)) != -1) { if ((handle = open (name, hfd->readonly ? O_RDONLY : O_RDWR)) != -1) {
int i; int i;
strcpy (hfd->path, name); strcpy (hfd->path, name);
hfd->handle = (void *) handle; hfd->handle = handle;
hfd->cache = 0; hfd->cache = 0;
i = strlen (name) - 1; i = strlen (name) - 1;
@ -131,8 +131,8 @@ extern int hdf_dup (struct hardfiledata *dhfd, const struct hardfiledata *shfd)
{ {
DEBUG_LOG ("called\n"); DEBUG_LOG ("called\n");
if ((int)shfd->handle >= 0) { if (shfd->handle >= 0) {
dhfd->handle = (void *)dup ((int)shfd->handle); dhfd->handle = dup (shfd->handle);
} }
return 0; return 0;
@ -142,8 +142,8 @@ void hdf_close (struct hardfiledata *hfd)
{ {
DEBUG_LOG ("called\n"); DEBUG_LOG ("called\n");
close ((int)hfd->handle); close (hfd->handle);
hfd->handle = (void *)-1; hfd->handle = -1;
} }
int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len)
@ -155,7 +155,7 @@ int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len)
hfd->cache_valid = 0; hfd->cache_valid = 0;
hdf_seek (hfd, offset); hdf_seek (hfd, offset);
poscheck (hfd, len); poscheck (hfd, len);
n = read ((int)hfd->handle, buffer, len); n = read (hfd->handle, buffer, len);
DEBUG_LOG ("read %d bytes\n", n); DEBUG_LOG ("read %d bytes\n", n);
@ -171,7 +171,7 @@ int hdf_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len)
hfd->cache_valid = 0; hfd->cache_valid = 0;
hdf_seek (hfd, offset); hdf_seek (hfd, offset);
poscheck (hfd, len); poscheck (hfd, len);
n = write ((int)hfd->handle, buffer, len); n = write (hfd->handle, buffer, len);
DEBUG_LOG ("Wrote %d bytes\n", n); DEBUG_LOG ("Wrote %d bytes\n", n);

View File

@ -45,6 +45,7 @@ extern void filesys_install_code (void);
extern void filesys_store_devinfo (uae_u8 *); extern void filesys_store_devinfo (uae_u8 *);
extern void hardfile_install (void); extern void hardfile_install (void);
extern void hardfile_reset (void); extern void hardfile_reset (void);
extern void hardfile_cleanup (void);
extern void emulib_install (void); extern void emulib_install (void);
extern void expansion_init (void); extern void expansion_init (void);
extern void expansion_cleanup (void); extern void expansion_cleanup (void);

View File

@ -9,7 +9,7 @@
typedef union { typedef union {
int i; int i;
uae_u32 u32; uae_u32 u32;
void *pv; const void *pv;
} uae_pt; } uae_pt;
/* These currently require the maximum size to be known at initialization /* These currently require the maximum size to be known at initialization
@ -128,7 +128,7 @@ STATIC_INLINE uae_u32 read_comm_pipe_u32_blocking (smp_comm_pipe *p)
return foo.u32; return foo.u32;
} }
STATIC_INLINE void *read_comm_pipe_pvoid_blocking (smp_comm_pipe *p) STATIC_INLINE const void *read_comm_pipe_pvoid_blocking (smp_comm_pipe *p)
{ {
uae_pt foo = read_comm_pipe_pt_blocking (p); uae_pt foo = read_comm_pipe_pt_blocking (p);
return foo.pv; return foo.pv;
@ -148,7 +148,7 @@ STATIC_INLINE void write_comm_pipe_u32 (smp_comm_pipe *p, int data, int no_buffe
write_comm_pipe_pt (p, foo, no_buffer); write_comm_pipe_pt (p, foo, no_buffer);
} }
STATIC_INLINE void write_comm_pipe_pvoid (smp_comm_pipe *p, void *data, int no_buffer) STATIC_INLINE void write_comm_pipe_pvoid (smp_comm_pipe *p, const void *data, int no_buffer)
{ {
uae_pt foo; uae_pt foo;
foo.pv = data; foo.pv = data;

View File

@ -14,7 +14,11 @@ struct hardfiledata {
int surfaces; int surfaces;
int reservedblocks; int reservedblocks;
unsigned int blocksize; unsigned int blocksize;
#ifdef WIN32
void *handle; void *handle;
#else
int handle;
#endif
int readonly; int readonly;
int flags; int flags;
uae_u8 *cache; uae_u8 *cache;

View File

@ -28,16 +28,11 @@ extern void sound_volume (int dir);
extern void switch_audio_interpol (void); extern void switch_audio_interpol (void);
extern void sample16_handler (void); extern void sample16_handler (void);
extern void sample8_handler (void);
extern void sample16s_handler (void); extern void sample16s_handler (void);
extern void sample16ss_handler (void); extern void sample16ss_handler (void);
extern void sample8s_handler (void);
extern void sample_ulaw_handler (void);
#ifdef MULTIPLICATION_PROFITABLE #ifdef MULTIPLICATION_PROFITABLE
STATIC_INLINE void init_sound_table16 (void) { } STATIC_INLINE void init_sound_table16 (void) { }
STATIC_INLINE void init_sound_table8 (void) { }
#else #else
extern void init_sound_table16 (void); extern void init_sound_table16 (void);
extern void init_sound_table8 (void);
#endif #endif

View File

@ -76,7 +76,6 @@ struct uae_prefs {
int sound_stereo; int sound_stereo;
int sound_stereo_separation; int sound_stereo_separation;
int sound_mixed_stereo; int sound_mixed_stereo;
int sound_bits;
int sound_freq; int sound_freq;
int sound_latency; int sound_latency;
int sound_interpol; int sound_interpol;

View File

@ -340,7 +340,7 @@ extern int gui_message_multibutton (int flags, const char *format,...);
# define rmdir unlink # define rmdir unlink
/* Definately problems! */ /* Definately problems! */
# define chmod(a,b) //# define chmod(a,b)
# define dup(fd) fd # define dup(fd) fd
# define utime(filename, buf) 0 # define utime(filename, buf) 0
#endif #endif

View File

@ -11,14 +11,9 @@
#include "sysconfig.h" #include "sysconfig.h"
/* TODO: Version details currently are currently defined #define UAEMAJOR UAE_VERSION_MAJOR
* twice: once in the configure script and once here. #define UAEMINOR UAE_VERSION_MINOR
* Need to fix this. #define UAESUBREV UAE_VERSION_REVISION
*/
#define UAEMAJOR 0
#define UAEMINOR 8
#define UAESUBREV 29
#define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV) #define UAEVERSION (256*65536L*UAEMAJOR + 65536L*UAEMINOR + UAESUBREV)
@ -28,10 +23,6 @@
# define UAE_NAME "E-UAE" # define UAE_NAME "E-UAE"
#endif #endif
#define STRINGIZE(x) #x #define UAE_VERSION_STRING UAE_NAME " " UAE_VERSION
#define MAKE_VERSION_STRING(x,y,z) STRINGIZE(x) "." STRINGIZE(y) "." STRINGIZE(z)
#define UAE_VERSION_STRING \
UAE_NAME " " MAKE_VERSION_STRING (UAEMAJOR, UAEMINOR, UAESUBREV)
#endif #endif

View File

@ -530,15 +530,18 @@ int mousehack_alive (void)
static void mousehack_enable (void) static void mousehack_enable (void)
{ {
#ifdef FILESYS /* Internal mousehack depends on filesys boot-rom */
if (!mousehack_allowed ()) if (!mousehack_allowed ())
return; return;
if (rtarea[get_long (RTAREA_BASE + 40) + 12 - 1]) if (rtarea[get_long (RTAREA_BASE + 40) + 12 - 1])
return; return;
rtarea[get_long (RTAREA_BASE + 40) + 12 - 1] = 1; rtarea[get_long (RTAREA_BASE + 40) + 12 - 1] = 1;
#endif
} }
static void mousehack_helper (void) static void mousehack_helper (void)
{ {
#ifdef FILESYS /* Internal mousehack depends on filesys boot-rom */
int mousexpos, mouseypos; int mousexpos, mouseypos;
uae_u8 *p; uae_u8 *p;
@ -561,6 +564,7 @@ static void mousehack_helper (void)
p[1] = mousexpos; p[1] = mousexpos;
p[2] = mouseypos >> 8; p[2] = mouseypos >> 8;
p[3] = mouseypos; p[3] = mouseypos;
#endif
} }
STATIC_INLINE int adjust (int val) STATIC_INLINE int adjust (int val)

View File

@ -29,7 +29,7 @@ static int *fs_np;
static int *fs_np; static int *fs_np;
static int *fs_ck; static int *fs_ck;
static int *fs_se; static int *fs_se;
#ifdef ARCADIA #ifdef XARCADE
static int *fs_xa1; static int *fs_xa1;
static int *fs_xa2; static int *fs_xa2;
#endif #endif
@ -114,7 +114,7 @@ void record_key (int kc)
case AK_LSH: fs = 1; fs_se[5] = b; break; case AK_LSH: fs = 1; fs_se[5] = b; break;
} }
} }
#ifdef ARCADIA #ifdef XARCADE
if (fs_xa1 != 0) { if (fs_xa1 != 0) {
switch (k) { switch (k) {
case AK_NP8: fs = 1; fs_xa1[0] = b; break; case AK_NP8: fs = 1; fs_xa1[0] = b; break;
@ -149,7 +149,7 @@ void record_key (int kc)
kc ^= AK_RCTRL << 1; kc ^= AK_RCTRL << 1;
kc ^= AK_CTRL << 1; kc ^= AK_CTRL << 1;
} }
#ifdef ARCADIA #ifdef XARCADE
if (fs_xa1 || fs_xa2) { if (fs_xa1 || fs_xa2) {
int k2 = k; int k2 = k;
if (k == AK_1) if (k == AK_1)
@ -187,7 +187,7 @@ void record_key (int kc)
void joystick_setting_changed (void) void joystick_setting_changed (void)
{ {
fs_np = fs_ck = fs_se = 0; fs_np = fs_ck = fs_se = 0;
#ifdef ARCADIA #ifdef XARCADE
fs_xa1 = fs_xa2 = 0; fs_xa1 = fs_xa2 = 0;
#endif #endif
@ -206,7 +206,7 @@ void joystick_setting_changed (void)
else if (JSEM_ISSOMEWHEREELSE (1, &currprefs)) else if (JSEM_ISSOMEWHEREELSE (1, &currprefs))
fs_se = fakestate[1]; fs_se = fakestate[1];
#ifdef ARCADIA #ifdef XARCADE
if (JSEM_ISXARCADE1 (0, &currprefs)) if (JSEM_ISXARCADE1 (0, &currprefs))
fs_xa1 = fakestate[0]; fs_xa1 = fakestate[0];
else if (JSEM_ISXARCADE1 (1, &currprefs)) else if (JSEM_ISXARCADE1 (1, &currprefs))

View File

@ -458,11 +458,7 @@ void usage (void)
static void show_version (void) static void show_version (void)
{ {
#ifdef PACKAGE_VERSION write_log (UAE_VERSION_STRING "\n");
write_log (PACKAGE_NAME " " PACKAGE_VERSION "\n");
#else
write_log ("UAE %d.%d.%d\n", UAEMAJOR, UAEMINOR, UAESUBREV);
#endif
write_log ("Build date: " __DATE__ " " __TIME__ "\n"); write_log ("Build date: " __DATE__ " " __TIME__ "\n");
} }
@ -533,29 +529,7 @@ static void parse_cmdline (int argc, char **argv)
} }
} }
#endif #endif
/*
static void parse_user_conf_file(const char *extension)
{
// FIXME! ska: This is temporary, and will be removed when you can
// pass command line options in meta.xml for the homebrew channel
char user_options[255] = "";
char *user_argv[] = {"program", "-f", user_options};
#ifdef OPTIONS_IN_HOME
char *home = getenv ("HOME");
if (home != NULL && strlen (home) < 240)
{
strcpy (user_options, home);
strcat (user_options, "/");
}
#endif
strcat(user_options, OPTIONSFILENAME);
strcat(user_options, extension);
// Allow the user uaerc to override the default one
//parse_cmdline (3, user_argv);
// Until here
}
*/
static void parse_cmdline_and_init_file (int argc, char **argv) static void parse_cmdline_and_init_file (int argc, char **argv)
{ {
char *home; char *home;
@ -741,8 +715,8 @@ static int do_preinit_machine (int argc, char **argv)
init_shm (); init_shm ();
#endif #endif
rtarea_init ();
#ifdef FILESYS #ifdef FILESYS
rtarea_init ();
hardfile_install (); hardfile_install ();
#endif #endif
@ -952,6 +926,7 @@ static void do_exit_machine (void)
#endif #endif
#ifdef FILESYS #ifdef FILESYS
filesys_cleanup (); filesys_cleanup ();
hardfile_cleanup ();
#endif #endif
#ifdef SAVESTATE #ifdef SAVESTATE
savestate_free (); savestate_free ();
@ -968,7 +943,7 @@ void real_main (int argc, char **argv)
{ {
show_version (); show_version ();
#if defined(FILESYS) #ifdef FILESYS
currprefs.mountinfo = changed_prefs.mountinfo = &options_mountinfo; currprefs.mountinfo = changed_prefs.mountinfo = &options_mountinfo;
#endif #endif
restart_program = 1; restart_program = 1;

184
src/make_hdf.c Normal file
View File

@ -0,0 +1,184 @@
/*
* E-UAE - The portable Amiga Emulator
*
* make_hdf
*
* A quick hack to generate a hard file image and associated config option.
* Anybody want to show this rubbish some love, feel free.
*
* Copyright Richard Drummond 2007
*
*/
#include "sysconfig.h"
#include "sysdeps.h"
#include <ctype.h>
static void print_help (void)
{
fprintf (stderr, "make_hdf <path> <size> [<device>]\n");
fprintf (stderr, "\n");
fprintf (stderr, "<path> = file path to hdf image to create\n");
fprintf (stderr, "<size> = size of image to create in MB\n");
fprintf (stderr, " follow <size> by G to specify size in GB\n");
fprintf (stderr, "<device> = device name to include in config option\n");
fprintf (stderr, " defaults to DH0 if omitted\n");
}
static int create_hdf (const char *path, off_t size)
{
FILE *f;
void *buf;
const size_t CHUNK_SIZE = 4096;
f = fopen (path, "wb+");
if (f) {
if (size == 0) {
fclose (f);
return 0;
}
/*
* Try it the easy way.
*/
if (fseeko (f, size - 1, SEEK_SET) == 0) {
fputc (0, f);
if (fseeko (f, 0, SEEK_SET) == 0) {
fclose (f);
return 0;
}
}
/*
* Okay. That failed. Let's assume seeking passed
* the end of a file ain't supported. Do it the
* hard way.
*/
fseeko (f, 0, SEEK_SET);
buf = calloc (1, CHUNK_SIZE);
while (size >= (off_t) CHUNK_SIZE) {
if (fwrite (buf, CHUNK_SIZE, 1, f) != 1)
break;
size -= CHUNK_SIZE;
}
if (size < (off_t) CHUNK_SIZE) {
if (size == 0 || fwrite (buf, (size_t)size, 1, f) == 1) {
fclose (f);
return 0;
}
}
}
perror ("Failed creating hdf");
if (f) {
fclose (f);
/* TODO: Should probably delete failed image here. */
}
return -1;
}
int main (int argc, char *argv[])
{
const char *hdf_path;
const char *device_name = "DH0";
uae_u64 size;
char *size_spec;
uae_u32 block_size = 512;
uae_u64 num_blocks;
uae_u32 cylinders;
uae_u32 blocks_per_track;
uae_u32 surfaces;
if (argc < 3 || strcmp (argv[1], "-h") == 0) {
print_help ();
exit (EXIT_SUCCESS);
}
hdf_path = argv[1];
size = strtoll(argv[2], &size_spec, 10);
if (argv[3])
device_name = argv[3];
/* Munge size specifier */
if (size > 0) {
char c = (toupper(*size_spec));
if (c == 'K')
size *= 1024;
else if (c == 'M' || c == '\0')
size *= 1024 * 1024;
else if (c == 'G')
size *= 1024 * 1024 * 1024;
else
size = 0;
}
if (size <= 0) {
fprintf (stderr, "Invalid size\n");
exit (EXIT_FAILURE);
}
if ((size >= (1LL << 31)) && (sizeof (off_t) < sizeof (uae_u64))) {
fprintf (stderr, "Specified size too large (2GB file size is maximum).\n");
exit (EXIT_FAILURE);
}
num_blocks = size / block_size;
/* We don't want more than (2^32)-1 blocks */
if (num_blocks >= (1LL << 32)) {
fprintf (stderr, "Specified size too large (too many blocks).\n");
exit (EXIT_FAILURE);
}
/*
* Try and work out some plausible geometry
*
* We try and set surfaces and blocks_per_track to keep
* cylinders < 65536. Prior to OS 3.9, FFS had problems with
* more cylinders than that.
*/
/* The default practice in UAE hardfiles, so let's start there. */
blocks_per_track = 32;
surfaces = 1;
cylinders = num_blocks / (blocks_per_track * surfaces);
if (cylinders == 0) {
fprintf (stderr, "Specified size is too small.\n");
exit (EXIT_FAILURE);
}
while (cylinders > 65535 && surfaces < 255) {
surfaces++;
cylinders = num_blocks / (blocks_per_track * surfaces);
}
while (cylinders > 65535 && blocks_per_track < 255) {
blocks_per_track++;
cylinders = num_blocks / (blocks_per_track * surfaces);
}
/* Calculate size based on above geometry */
num_blocks = (uae_u64)cylinders * surfaces * blocks_per_track;
/* make file */
if (create_hdf (hdf_path, num_blocks * block_size) < 0)
return EXIT_FAILURE;
/* output_spec */
printf ("hardfile2=rw,%s:%s,%d,%d,%d,%d,%d,\n", device_name, hdf_path, blocks_per_track, surfaces, 2, block_size, 0);
printf ("hardfile=rw,%d,%d,%d,%d,%s\n", blocks_per_track, surfaces, 2, block_size, hdf_path);
return EXIT_SUCCESS;
}

View File

@ -389,6 +389,7 @@ static uae_u32 REGPARAM2 misc_demux (TrapContext *context)
void misc_hsync_stuff (void) void misc_hsync_stuff (void)
{ {
#ifdef FILESYS
static int misc_demux_installed; static int misc_demux_installed;
#ifdef AHI #ifdef AHI
@ -413,4 +414,5 @@ void misc_hsync_stuff (void)
org (a); org (a);
misc_demux_installed = 1; misc_demux_installed = 1;
} }
#endif
} }

View File

@ -690,7 +690,10 @@ void REGPARAM2 MakeFromSR (struct regstruct *regs)
} }
} }
/* Interrupt priority level may have changed. Assert SPCFLAG_INT
* to check if there's an IRQ ready to go at the new level. */
set_special (regs, SPCFLAG_INT); set_special (regs, SPCFLAG_INT);
if (regs->t1 || regs->t0) if (regs->t1 || regs->t0)
set_special (regs, SPCFLAG_TRACE); set_special (regs, SPCFLAG_TRACE);
else else
@ -976,8 +979,6 @@ void REGPARAM2 Exception (int nr, struct regstruct *regs, uaecptr oldpc)
STATIC_INLINE void service_interrupt (unsigned int level, struct regstruct *regs) STATIC_INLINE void service_interrupt (unsigned int level, struct regstruct *regs)
{ {
if (level > regs->intmask) {
regs->stopped = 0; regs->stopped = 0;
unset_special (regs, SPCFLAG_STOP); unset_special (regs, SPCFLAG_STOP);
@ -985,7 +986,6 @@ STATIC_INLINE void service_interrupt (unsigned int level, struct regstruct *regs
regs->intmask = level; regs->intmask = level;
} }
}
/* /*
* Directly cause an interrupt to occur. * Directly cause an interrupt to occur.
@ -1697,12 +1697,14 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs)
* In non-cycle-exact mode we handle this by separating the interrupt request * In non-cycle-exact mode we handle this by separating the interrupt request
* pending (SPCFLAG_INT) and interrupt request arrived (SPCFLAG_DOINT) events. * pending (SPCFLAG_INT) and interrupt request arrived (SPCFLAG_DOINT) events.
* This ensures that there's always a delay of one opcode (and so at least 2 * This ensures that there's always a delay of one opcode (and so at least 2
* machine cycles) between the interrupt controller requesting an interrupt * machine cycles) between the interrupt controller requesting an interrupt or
* and us servicing it here. * the processor changing its interrupt priority level and us servicing it here.
* *
* In cycle-exact mode, there's just one event (SPCFLAG_INT) and the delay is * In cycle-exact mode, there's just one event (SPCFLAG_INT) and the delay is
* handled internally by the interrupt controller code in custom.c - intlev() * handled internally by the interrupt controller code in custom.c - intlev()
* and friends. * and friends.
*
* This stuff needs some tidying up!
*/ */
if ((regs->spcflags & SPCFLAG_DOINT) || if ((regs->spcflags & SPCFLAG_DOINT) ||
(currprefs.cpu_cycle_exact && (regs->spcflags & SPCFLAG_INT))) { (currprefs.cpu_cycle_exact && (regs->spcflags & SPCFLAG_INT))) {
@ -1711,8 +1713,15 @@ STATIC_INLINE int do_specialties (int cycles, struct regstruct *regs)
unset_special (regs, SPCFLAG_DOINT); unset_special (regs, SPCFLAG_DOINT);
if (intr != -1) if (intr > (int)regs->intmask) {
if (currprefs.cpu_cycle_exact)
unset_special(regs, SPCFLAG_INT);
service_interrupt (intr, regs); service_interrupt (intr, regs);
} else {
if (intr < 0 && currprefs.cpu_cycle_exact)
unset_special (regs, SPCFLAG_INT);
}
} }
if ((regs->spcflags & SPCFLAG_INT) && !currprefs.cpu_cycle_exact) { if ((regs->spcflags & SPCFLAG_INT) && !currprefs.cpu_cycle_exact) {

View File

@ -1153,28 +1153,84 @@ static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res,
dm->res.width * dm->res.height * dm->refresh); dm->res.width * dm->res.height * dm->refresh);
} }
static uae_u32 AssignModeID (int i, int count) struct modeids {
int width, height;
int id;
};
static const struct modeids mi[] =
{ {
if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 200) /* "original" modes */
return 0x50001000;
else if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 240)
return 0x50011000;
else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 400)
return 0x50021000;
else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 480)
return 0x50031000;
else if (DisplayModes[i].res.width == 800 && DisplayModes[i].res.height == 600)
return 0x50041000;
else if (DisplayModes[i].res.width == 1024 && DisplayModes[i].res.height == 768)
return 0x50051000;
else if (DisplayModes[i].res.width == 1152 && DisplayModes[i].res.height == 864)
return 0x50061000;
else if (DisplayModes[i].res.width == 1280 && DisplayModes[i].res.height == 1024)
return 0x50071000;
else if (DisplayModes[i].res.width == 1600 && DisplayModes[i].res.height == 1280)
return 0x50081000;
return 0x50091000 + count * 0x10000; { 320, 200, 0 },
{ 320, 240, 1 },
{ 640, 400, 2 },
{ 640, 480, 3 },
{ 800, 600, 4 },
{ 1024, 768, 5 },
{ 1152, 864, 6 },
{ 1280,1024, 7 },
{ 1600,1280, 8 },
/* new modes */
{ 704, 480, 129 },
{ 704, 576, 130 },
{ 720, 480, 131 },
{ 720, 576, 132 },
{ 768, 483, 133 },
{ 768, 576, 134 },
{ 800, 480, 135 },
{ 848, 480, 136 },
{ 854, 480, 137 },
{ 948, 576, 138 },
{ 1024, 576, 139 },
{ 1152, 768, 140 },
{ 1152, 864, 141 },
{ 1280, 720, 142 },
{ 1280, 768, 143 },
{ 1280, 800, 144 },
{ 1280, 854, 145 },
{ 1280, 960, 146 },
{ 1366, 768, 147 },
{ 1440, 900, 148 },
{ 1440, 960, 149 },
{ 1600,1200, 150 },
{ 1680,1050, 151 },
{ 1920,1080, 152 },
{ 1920,1200, 153 },
{ 2048,1152, 154 },
{ 2048,1536, 155 },
{ 2560,1600, 156 },
{ 2560,2048, 157 },
{ 400, 300, 158 },
{ 512, 384, 159 },
{ 640, 432, 160 },
{ 1360, 768, 161 },
{ 1360,1024, 162 },
{ 1400,1050, 163 },
{ 1792,1344, 164 },
{ 1800,1440, 165 },
{ 1856,1392, 166 },
{ 1920,1440, 167 },
{ 480, 360, 168 },
{ 640, 350, 169 },
{ 1600, 900, 170 },
{ 960, 600, 171 },
{ 1088, 612, 172 },
{ -1, -1, 0 }
};
static uae_u32 AssignModeID (int w, int h, unsigned int *non_standard_count)
{
unsigned int i;
for (i = 0; mi[i].width > 0; i++) {
if (w == mi[i].width && h == mi[i].height)
return 0x50001000 | (mi[i].id * 0x10000);
}
(*non_standard_count)++;
write_log ("P96: Non-stanard mode %dx%d\n", w, h);
return 0x51001000 - (*non_standard_count) * 0x10000;
} }
/**************************************** /****************************************
@ -1204,6 +1260,7 @@ uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs)
{ {
struct LibResolution res; struct LibResolution res;
int i; int i;
unsigned int non_standard_count = 0;
int ModeInfoStructureCount = 1, LibResolutionStructureCount = 0; int ModeInfoStructureCount = 1, LibResolutionStructureCount = 0;
uaecptr amigamemptr = 0; uaecptr amigamemptr = 0;
uaecptr AmigaBoardInfo = m68k_areg (regs, 2); uaecptr AmigaBoardInfo = m68k_areg (regs, 2);
@ -1226,7 +1283,7 @@ uae_u32 REGPARAM2 picasso_InitCard (struct regstruct *regs)
for (i = 0; i < mode_count;) { for (i = 0; i < mode_count;) {
int j = i; int j = i;
/* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */ /* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */
res.DisplayID = AssignModeID (i, LibResolutionStructureCount); res.DisplayID = AssignModeID (DisplayModes[i].res.width, DisplayModes[i].res.height, &non_standard_count);
res.BoardInfo = AmigaBoardInfo; res.BoardInfo = AmigaBoardInfo;
res.Width = DisplayModes[i].res.width; res.Width = DisplayModes[i].res.width;
res.Height = DisplayModes[i].res.height; res.Height = DisplayModes[i].res.height;
@ -2011,7 +2068,7 @@ uae_u32 REGPARAM2 picasso_BlitRect (struct regstruct *regs)
P96TRACE (("P96: BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n", srcx, srcy, P96TRACE (("P96: BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n", srcx, srcy,
dstx, dsty, width, height, Mask)); dstx, dsty, width, height, Mask));
result = BlitRect (renderinfo, (uaecptr)NULL, srcx, srcy, dstx, dsty, result = BlitRect (renderinfo, 0, srcx, srcy, dstx, dsty,
width, height, Mask, BLIT_SRC); width, height, Mask, BLIT_SRC);
return result; return result;

View File

@ -31,7 +31,7 @@ static int in_callback, closing_sound;
static void clearbuffer (void) static void clearbuffer (void)
{ {
memset (sndbuffer, (spec.format == AUDIO_U8) ? SOUND8_BASE_VAL : SOUND16_BASE_VAL, sizeof (sndbuffer)); memset (sndbuffer, 0, sizeof (sndbuffer));
} }
/* This shouldn't be necessary . . . */ /* This shouldn't be necessary . . . */
@ -68,7 +68,7 @@ int setup_sound (void)
if (SDL_InitSubSystem (SDL_INIT_AUDIO) == 0) { if (SDL_InitSubSystem (SDL_INIT_AUDIO) == 0) {
spec.freq = currprefs.sound_freq; spec.freq = currprefs.sound_freq;
spec.format = currprefs.sound_bits == 8 ? AUDIO_U8 : AUDIO_S16SYS; spec.format = AUDIO_S16SYS;
spec.channels = currprefs.sound_stereo ? 2 : 1; spec.channels = currprefs.sound_stereo ? 2 : 1;
spec.callback = dummy_callback; spec.callback = dummy_callback;
spec.samples = spec.freq * currprefs.sound_latency / 1000; spec.samples = spec.freq * currprefs.sound_latency / 1000;
@ -92,7 +92,7 @@ int setup_sound (void)
static int open_sound (void) static int open_sound (void)
{ {
spec.freq = currprefs.sound_freq; spec.freq = currprefs.sound_freq;
spec.format = currprefs.sound_bits == 8 ? AUDIO_U8 : AUDIO_S16SYS; spec.format = AUDIO_S16SYS;
spec.channels = currprefs.sound_stereo ? 2 : 1; spec.channels = currprefs.sound_stereo ? 2 : 1;
spec.samples = spec.freq * currprefs.sound_latency / 1000; spec.samples = spec.freq * currprefs.sound_latency / 1000;
spec.callback = sound_callback; spec.callback = sound_callback;
@ -104,20 +104,15 @@ static int open_sound (void)
return 0; return 0;
} }
if (spec.format == AUDIO_S16SYS) {
init_sound_table16 (); init_sound_table16 ();
sample_handler = currprefs.sound_stereo ? sample16s_handler : sample16_handler; sample_handler = currprefs.sound_stereo ? sample16s_handler : sample16_handler;
} else {
init_sound_table8 ();
sample_handler = currprefs.sound_stereo ? sample8s_handler : sample8_handler;
}
have_sound = 1;
have_sound = 1;
sound_available = 1; sound_available = 1;
obtainedfreq = currprefs.sound_freq; obtainedfreq = currprefs.sound_freq;
sndbufsize = spec.samples * currprefs.sound_bits / 8 * spec.channels; sndbufsize = spec.samples * 2 * spec.channels;
write_log ("SDL sound driver found and configured for %d bits at %d Hz, buffer is %d ms (%d bytes).\n", write_log ("SDL sound driver found and configured at %d Hz, buffer is %d ms (%d bytes).\n",
currprefs.sound_bits, spec.freq, spec.samples * 1000 / spec.freq, sndbufsize); spec.freq, spec.samples * 1000 / spec.freq, sndbufsize);
sndbufpt = sndbuffer; sndbufpt = sndbuffer;
return 1; return 1;

View File

@ -42,10 +42,7 @@ STATIC_INLINE void check_sound_buffers (void)
#define PUT_SOUND_WORD_RIGHT(b) PUT_SOUND_WORD(b) #define PUT_SOUND_WORD_RIGHT(b) PUT_SOUND_WORD(b)
#define PUT_SOUND_WORD_MONO(b) PUT_SOUND_WORD_LEFT(b) #define PUT_SOUND_WORD_MONO(b) PUT_SOUND_WORD_LEFT(b)
#define SOUND16_BASE_VAL 0 #define SOUND16_BASE_VAL 0
#define SOUND8_BASE_VAL 128
#define DEFAULT_SOUND_BITS 16
#define DEFAULT_SOUND_FREQ 44100 #define DEFAULT_SOUND_FREQ 44100
#define DEFAULT_SOUND_LATENCY 100 #define DEFAULT_SOUND_LATENCY 100
#define HAVE_STEREO_SUPPORT #define HAVE_STEREO_SUPPORT
#define HAVE_8BIT_AUDIO_SUPPORT

View File

@ -15,9 +15,6 @@
/* Define to 1 if you have the <caps/capsimage.h> header file. */ /* Define to 1 if you have the <caps/capsimage.h> header file. */
#undef HAVE_CAPS_CAPSIMAGE_H #undef HAVE_CAPS_CAPSIMAGE_H
/* Define to 1 if you have the `cfmakeraw' function. */
#undef HAVE_CFMAKERAW
/* Define to 1 if you have the <curses.h> header file. */ /* Define to 1 if you have the <curses.h> header file. */
#undef HAVE_CURSES_H #undef HAVE_CURSES_H
@ -40,11 +37,8 @@
/* Define to 1 if you have the <fcntl.h> header file. */ /* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H #undef HAVE_FCNTL_H
/* Define to 1 if you have the `getcwd' function. */ /* Define to 1 if you have the CAPS framework. */
#undef HAVE_GETCWD #undef HAVE_FRAMEWORK_CAPSIMAGE
/* Define to 1 if you have the `getopt' function. */
#undef HAVE_GETOPT
/* Define to 1 if you have the `gettimeofday' function. */ /* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY #undef HAVE_GETTIMEOFDAY
@ -68,9 +62,6 @@
/* Define to 1 if you have the <libraries/cybergraphics.h> header file. */ /* Define to 1 if you have the <libraries/cybergraphics.h> header file. */
#undef HAVE_LIBRARIES_CYBERGRAPHICS_H #undef HAVE_LIBRARIES_CYBERGRAPHICS_H
/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ
/* Define to 1 if you have the `localtime_r' function. */ /* Define to 1 if you have the `localtime_r' function. */
#undef HAVE_LOCALTIME_R #undef HAVE_LOCALTIME_R
@ -83,9 +74,6 @@
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H #undef HAVE_MEMORY_H
/* Define to 1 if you have the `mkdir' function. */
#undef HAVE_MKDIR
/* Define to 1 if you have the `nanosleep' function. */ /* Define to 1 if you have the `nanosleep' function. */
#undef HAVE_NANOSLEEP #undef HAVE_NANOSLEEP
@ -101,9 +89,6 @@
/* Define to 1 if you have the `readdir_r' function. */ /* Define to 1 if you have the `readdir_r' function. */
#undef HAVE_READDIR_R #undef HAVE_READDIR_R
/* Define to 1 if you have the `rmdir' function. */
#undef HAVE_RMDIR
/* Define to 1 if you have the `select' function. */ /* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT #undef HAVE_SELECT
@ -231,9 +216,6 @@
/* Define to 1 if you have the <sys/vfs.h> header file. */ /* Define to 1 if you have the <sys/vfs.h> header file. */
#undef HAVE_SYS_VFS_H #undef HAVE_SYS_VFS_H
/* Define to 1 if you have the `tcgetattr' function. */
#undef HAVE_TCGETATTR
/* Define to 1 if you have the `timegm' function. */ /* Define to 1 if you have the `timegm' function. */
#undef HAVE_TIMEGM #undef HAVE_TIMEGM
@ -359,6 +341,21 @@
/* Define to 1 if your <sys/time.h> declares `struct tm'. */ /* Define to 1 if your <sys/time.h> declares `struct tm'. */
#undef TM_IN_SYS_TIME #undef TM_IN_SYS_TIME
/* Define to the UAE version */
#undef UAE_VERSION
/* Define to the UAE major version number */
#undef UAE_VERSION_MAJOR
/* Define to the UAE minor version number */
#undef UAE_VERSION_MINOR
/* Define to the UAE revision number */
#undef UAE_VERSION_REVISION
/* Define to the optional UAE version tag */
#undef UAE_VERSION_TAG
/* Version number of package */ /* Version number of package */
#undef VERSION #undef VERSION

View File

@ -1,6 +1,9 @@
/* src/sysconfig.h. Generated from sysconfig.h.in by configure. */ /* src/sysconfig.h. Generated from sysconfig.h.in by configure. */
/* src/sysconfig.h.in. Generated from configure.in by autoheader. */ /* src/sysconfig.h.in. Generated from configure.in by autoheader. */
/* Define if building universal (internal helper macro) */
/* #undef AC_APPLE_UNIVERSAL_BUILD */
/* Define to 1 if you have the `alarm' function. */ /* Define to 1 if you have the `alarm' function. */
#define HAVE_ALARM 1 #define HAVE_ALARM 1
@ -19,11 +22,8 @@
/* Define to 1 if you have the <caps/capsimage.h> header file. */ /* Define to 1 if you have the <caps/capsimage.h> header file. */
/* #undef HAVE_CAPS_CAPSIMAGE_H */ /* #undef HAVE_CAPS_CAPSIMAGE_H */
/* Define to 1 if you have the `cfmakeraw' function. */
#define HAVE_CFMAKERAW 1
/* Define to 1 if you have the <curses.h> header file. */ /* Define to 1 if you have the <curses.h> header file. */
#define HAVE_CURSES_H 1 /* #undef HAVE_CURSES_H */
/* Define to 1 if you have the <cybergraphx/cybergraphics.h> header file. */ /* Define to 1 if you have the <cybergraphx/cybergraphics.h> header file. */
/* #undef HAVE_CYBERGRAPHX_CYBERGRAPHICS_H */ /* #undef HAVE_CYBERGRAPHX_CYBERGRAPHICS_H */
@ -36,7 +36,7 @@
#define HAVE_DIRENT_H 1 #define HAVE_DIRENT_H 1
/* "Define to 1 if you have 'dlopen' function */ /* "Define to 1 if you have 'dlopen' function */
#define HAVE_DLOPEN 1 /* #undef HAVE_DLOPEN */
/* Define to 1 if you have the <dustat.h> header file. */ /* Define to 1 if you have the <dustat.h> header file. */
/* #undef HAVE_DUSTAT_H */ /* #undef HAVE_DUSTAT_H */
@ -44,11 +44,8 @@
/* Define to 1 if you have the <fcntl.h> header file. */ /* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1 #define HAVE_FCNTL_H 1
/* Define to 1 if you have the `getcwd' function. */ /* Define to 1 if you have the CAPS framework. */
#define HAVE_GETCWD 1 /* #undef HAVE_FRAMEWORK_CAPSIMAGE */
/* Define to 1 if you have the `getopt' function. */
#define HAVE_GETOPT 1
/* Define to 1 if you have the `gettimeofday' function. */ /* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1 #define HAVE_GETTIMEOFDAY 1
@ -72,9 +69,6 @@
/* Define to 1 if you have the <libraries/cybergraphics.h> header file. */ /* Define to 1 if you have the <libraries/cybergraphics.h> header file. */
/* #undef HAVE_LIBRARIES_CYBERGRAPHICS_H */ /* #undef HAVE_LIBRARIES_CYBERGRAPHICS_H */
/* Define to 1 if you have the `z' library (-lz). */
#define HAVE_LIBZ 1
/* Define to 1 if you have the `localtime_r' function. */ /* Define to 1 if you have the `localtime_r' function. */
#define HAVE_LOCALTIME_R 1 #define HAVE_LOCALTIME_R 1
@ -85,16 +79,13 @@
/* #undef HAVE_MACHINE_SOUNDCARD_H */ /* #undef HAVE_MACHINE_SOUNDCARD_H */
/* Define to 1 if you have the <memory.h> header file. */ /* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1 /* #undef HAVE_MEMORY_H */
/* Define to 1 if you have the `mkdir' function. */
#define HAVE_MKDIR 1
/* Define to 1 if you have the `nanosleep' function. */ /* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1 #define HAVE_NANOSLEEP 1
/* Define to 1 if you have the <ncurses.h> header file. */ /* Define to 1 if you have the <ncurses.h> header file. */
#define HAVE_NCURSES_H 1 /* #undef HAVE_NCURSES_H */
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */ /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
/* #undef HAVE_NDIR_H */ /* #undef HAVE_NDIR_H */
@ -105,9 +96,6 @@
/* Define to 1 if you have the `readdir_r' function. */ /* Define to 1 if you have the `readdir_r' function. */
#define HAVE_READDIR_R 1 #define HAVE_READDIR_R 1
/* Define to 1 if you have the `rmdir' function. */
#undef HAVE_RMDIR
/* Define to 1 if you have the `select' function. */ /* Define to 1 if you have the `select' function. */
#define HAVE_SELECT 1 #define HAVE_SELECT 1
@ -115,7 +103,7 @@
#define HAVE_SETITIMER 1 #define HAVE_SETITIMER 1
/* Define to 1 if you have the `sigaction' function. */ /* Define to 1 if you have the `sigaction' function. */
#undef HAVE_SIGACTION #define HAVE_SIGACTION 1
/* Define to 1 if you have the `sleep' function. */ /* Define to 1 if you have the `sleep' function. */
#define HAVE_SLEEP 1 #define HAVE_SLEEP 1
@ -137,7 +125,7 @@
#define HAVE_STRCASECMP 1 #define HAVE_STRCASECMP 1
/* Define to 1 if you have the `strcmpi' function. */ /* Define to 1 if you have the `strcmpi' function. */
/* #undef HAVE_STRCMPI */ #define HAVE_STRCMPI 1
/* Define to 1 if you have the `strdup' function. */ /* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1 #define HAVE_STRDUP 1
@ -146,12 +134,10 @@
#define HAVE_STRERROR 1 #define HAVE_STRERROR 1
/* Define to 1 if you have the `stricmp' function. */ /* Define to 1 if you have the `stricmp' function. */
/* #undef HAVE_STRICMP */ #define HAVE_STRICMP 1
/* Define to 1 if you have the <strings.h> header file. */ /* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1 #define HAVE_STRINGS_H 1
/*#undef HAVE_STRINGS_H */
/* Define to 1 if you have the <string.h> header file. */ /* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1 #define HAVE_STRING_H 1
@ -159,7 +145,7 @@
/* Define to 1 if you have the `strstr' function. */ /* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1 #define HAVE_STRSTR 1
/* Define to 1 if `st_blocks' is member of `struct stat'. */ /* Define to 1 if `st_blocks' is a member of `struct stat'. */
#define HAVE_STRUCT_STAT_ST_BLOCKS 1 #define HAVE_STRUCT_STAT_ST_BLOCKS 1
/* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use /* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use
@ -193,17 +179,16 @@
/* #undef HAVE_SYS_FS_TYPES_H */ /* #undef HAVE_SYS_FS_TYPES_H */
/* Define to 1 if you have the <sys/ioctl.h> header file. */ /* Define to 1 if you have the <sys/ioctl.h> header file. */
#define HAVE_SYS_IOCTL_H 1 /* #undef HAVE_SYS_IOCTL_H */
/* Define to 1 if you have the <sys/ipc.h> header file. */ /* Define to 1 if you have the <sys/ipc.h> header file. */
#define HAVE_SYS_IPC_H 1 /* #undef HAVE_SYS_IPC_H */
/* Define to 1 if you have the <sys/mman.h> header file. */ /* Define to 1 if you have the <sys/mman.h> header file. */
#define HAVE_SYS_MMAN_H 1 /* #undef HAVE_SYS_MMAN_H */
/* Define to 1 if you have the <sys/mount.h> header file. */ /* Define to 1 if you have the <sys/mount.h> header file. */
/*#define HAVE_SYS_MOUNT_H 1 */ /* #undef HAVE_SYS_MOUNT_H */
#undef HAVE_SYS_MOUNT_H
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'. /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
*/ */
@ -213,24 +198,22 @@
#define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/shm.h> header file. */ /* Define to 1 if you have the <sys/shm.h> header file. */
#define HAVE_SYS_SHM_H 1 /* #undef HAVE_SYS_SHM_H */
/* Define to 1 if you have the <sys/soundcard.h> header file. */ /* Define to 1 if you have the <sys/soundcard.h> header file. */
#define HAVE_SYS_SOUNDCARD_H 1 /* #undef HAVE_SYS_SOUNDCARD_H */
/* Define to 1 if you have the <sys/statfs.h> header file. */ /* Define to 1 if you have the <sys/statfs.h> header file. */
/*#define HAVE_SYS_STATFS_H 1*/ /* #undef HAVE_SYS_STATFS_H */
#undef HAVE_SYS_STATFS_H
/* Define to 1 if you have the <sys/statvfs.h> header file. */ /* Define to 1 if you have the <sys/statvfs.h> header file. */
#define HAVE_SYS_STATVFS_H 1 #define HAVE_SYS_STATVFS_H 1
/* #undef HAVE_SYS_STATVFS_H1 */
/* Define to 1 if you have the <sys/stat.h> header file. */ /* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1 #define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/termios.h> header file. */ /* Define to 1 if you have the <sys/termios.h> header file. */
#define HAVE_SYS_TERMIOS_H 1 /* #undef HAVE_SYS_TERMIOS_H */
/* Define to 1 if you have the <sys/time.h> header file. */ /* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1 #define HAVE_SYS_TIME_H 1
@ -239,14 +222,10 @@
#define HAVE_SYS_TYPES_H 1 #define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <sys/vfs.h> header file. */ /* Define to 1 if you have the <sys/vfs.h> header file. */
/* #define HAVE_SYS_VFS_H 1 */ /* #undef HAVE_SYS_VFS_H */
#undef HAVE_SYS_VFS_H
/* Define to 1 if you have the `tcgetattr' function. */
#define HAVE_TCGETATTR 1
/* Define to 1 if you have the `timegm' function. */ /* Define to 1 if you have the `timegm' function. */
#undef HAVE_TIMEGM //#define HAVE_TIMEGM 1
/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */ /* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
#define HAVE_UINTMAX_T 1 #define HAVE_UINTMAX_T 1
@ -267,8 +246,7 @@
#define HAVE_UTIME_NULL 1 #define HAVE_UTIME_NULL 1
/* Define to 1 if you have the <values.h> header file. */ /* Define to 1 if you have the <values.h> header file. */
/*#define HAVE_VALUES_H 1 */ /* #undef HAVE_VALUES_H */
#undef HAVE_VALUES_H
/* Define to 1 if you have the `vfprintf' function. */ /* Define to 1 if you have the `vfprintf' function. */
#define HAVE_VFPRINTF 1 #define HAVE_VFPRINTF 1
@ -295,13 +273,16 @@
#define PACKAGE_NAME "E-UAE" #define PACKAGE_NAME "E-UAE"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "E-UAE 0.8.29-WIP4" #define PACKAGE_STRING "E-UAE 0.8.29"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "e-uae" #define PACKAGE_TARNAME "e-uae"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "0.8.29-WIP4" #define PACKAGE_VERSION "0.8.29"
/* Define to the necessary symbol if this constant uses a non-standard name on /* Define to the necessary symbol if this constant uses a non-standard name on
your system. */ your system. */
@ -343,8 +324,7 @@
/* Define if statfs takes 2 args and struct statfs has a field named f_bsize. /* Define if statfs takes 2 args and struct statfs has a field named f_bsize.
(4.3BSD, SunOS 4, HP-UX, AIX PS/2) */ (4.3BSD, SunOS 4, HP-UX, AIX PS/2) */
/*#define STAT_STATFS2_BSIZE 1*/ /* #undef STAT_STATFS2_BSIZE */
#undef STAT_STATFS2_BSIZE
/* Define if statfs takes 2 args and struct statfs has a field named f_fsize. /* Define if statfs takes 2 args and struct statfs has a field named f_fsize.
(4.4BSD, NetBSD) */ (4.4BSD, NetBSD) */
@ -361,7 +341,7 @@
/* #undef STAT_STATFS4 */ /* #undef STAT_STATFS4 */
/* Define if there is a function named statvfs. (SVR4) */ /* Define if there is a function named statvfs. (SVR4) */
/* #undef STAT_STATVFS */ #define STAT_STATVFS 1
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1 #define STDC_HEADERS 1
@ -372,29 +352,77 @@
/* Define to 1 if your <sys/time.h> declares `struct tm'. */ /* Define to 1 if your <sys/time.h> declares `struct tm'. */
/* #undef TM_IN_SYS_TIME */ /* #undef TM_IN_SYS_TIME */
/* Version number of package */ /* Define to the UAE version */
#define VERSION "0.8.29-WIP4" #define UAE_VERSION "0.8.29"
/* Define to 1 if your processor stores words with the most significant byte /* Define to the UAE major version number */
first (like Motorola and SPARC, unlike Intel and VAX). */ #define UAE_VERSION_MAJOR 0
#define WORDS_BIGENDIAN 1
/* Define to 1 if the X Window System is missing or not being used. */ /* Define to the UAE minor version number */
/* #undef X_DISPLAY_MISSING */ #define UAE_VERSION_MINOR 8
/* Define to 1 if on AIX 3. /* Define to the UAE revision number */
System headers sometimes define this. #define UAE_VERSION_REVISION 29
We just want to avoid a redefinition error message. */
/* Define to the optional UAE version tag */
#define UAE_VERSION_TAG ""
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE #ifndef _ALL_SOURCE
/* # undef _ALL_SOURCE */ # define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif #endif
/* Version number of package */
#define VERSION "0.8.29"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
# define WORDS_BIGENDIAN 1
# endif
#endif
/* Define to 1 if the X Window System is missing or not being used. */
#define X_DISPLAY_MISSING 1
/* Number of bits in a file offset, on hosts where this is settable. */ /* Number of bits in a file offset, on hosts where this is settable. */
#define _FILE_OFFSET_BITS 64 /* #undef _FILE_OFFSET_BITS */
/* Define for large files, on AIX-style hosts. */ /* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */ /* #undef _LARGE_FILES */
/* Define to 1 if on MINIX. */
/* #undef _MINIX */
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
/* #undef _POSIX_1_SOURCE */
/* Define to 1 if you need to in order for `stat' and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define to empty if `const' does not conform to ANSI C. */ /* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */ /* #undef const */
@ -414,7 +442,7 @@
/* #undef size_t */ /* #undef size_t */
/* Substitute for socklen_t */ /* Substitute for socklen_t */
/* #undef socklen_t */ #define socklen_t int
/* Define to unsigned long or unsigned long long if <stdint.h> and /* Define to unsigned long or unsigned long long if <stdint.h> and
<inttypes.h> don't define. */ <inttypes.h> don't define. */

View File

@ -10,7 +10,21 @@ LDFLAGS =
CFLAGS = -I../include CFLAGS = -I../include
LIBRARIES = LIBRARIES =
all: gencpu.exe gencomp.exe build68k.exe genblitter.exe genlinetoscr.exe all: copy gencpu.exe gencomp.exe build68k.exe genblitter.exe genlinetoscr.exe
copy:
cp ../genblitter.c genblitter.c
cp ../blitops.c blitops.c
cp ../writelog.c writelog.c
cp ../build68k.c build68k.c
cp ../gencpu.c gencpu.c
cp ../readcpu.c readcpu.c
cp ../missing.c missing.c
cp ../gencomp.c gencomp.c
cp ../genlinetoscr.c genlinetoscr.c
cp ../cpudefs.c cpudefs.c
install: install:
@ -18,7 +32,7 @@ install:
clean: clean:
-rm -f *.o -rm -f *.o
-rm cpudefs.c -rm cpudefs.c
-rm -f gencpu.exe gencomp.exe build68k.exe genblitter.exe genlinetoscr.exe -rm -f gencpu.exe gencomp.exe build68k.exe genblitter.exe genlinetoscr.exe genblitter.c blitops.c writelog.c build68k.c gencpu.c readcpu.c missing.c gencomp.c genlinetoscr.c cpudefs.c
distclean: clean distclean: clean

View File

@ -20,13 +20,13 @@
#define HAVE_STRCASECMP 1 #define HAVE_STRCASECMP 1
/* Define to 1 if you have the `strcmpi' function. */ /* Define to 1 if you have the `strcmpi' function. */
/* #undef HAVE_STRCMPI */ #define HAVE_STRCMPI 1
/* Define to 1 if you have the `strdup' function. */ /* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1 #define HAVE_STRDUP 1
/* Define to 1 if you have the `stricmp' function. */ /* Define to 1 if you have the `stricmp' function. */
/* #undef HAVE_STRICMP */ #define HAVE_STRICMP 1
/* Define to 1 if you have the <strings.h> header file. */ /* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1 #define HAVE_STRINGS_H 1
@ -80,7 +80,7 @@
#define SIZEOF_VOID_P 4 #define SIZEOF_VOID_P 4
/* The size of `__int64', as computed by sizeof. */ /* The size of `__int64', as computed by sizeof. */
#define SIZEOF___INT64 0 #define SIZEOF___INT64 8
/* Define to 1 if you have the ANSI C header files. */ /* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1 #define STDC_HEADERS 1
@ -89,7 +89,7 @@
System headers sometimes define this. System headers sometimes define this.
We just want to avoid a redefinition error message. */ We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE #ifndef _ALL_SOURCE
/* # undef _ALL_SOURCE */ # define _ALL_SOURCE 1
#endif #endif
/* Define to empty if `const' does not conform to ANSI C. */ /* Define to empty if `const' does not conform to ANSI C. */

View File

@ -303,6 +303,7 @@ static uae_u32 emulib_Debug (void)
*/ */
static uae_u32 FindFunctionInObject (uae_u8 *objectptr) static uae_u32 FindFunctionInObject (uae_u8 *objectptr)
{ {
#if 0
uae_u8 *text_hdr; uae_u8 *text_hdr;
uae_u8 offset; uae_u8 offset;
text_hdr = (uae_u8 *)strstr ("text", (char *)objectptr); text_hdr = (uae_u8 *)strstr ("text", (char *)objectptr);
@ -310,6 +311,7 @@ static uae_u32 FindFunctionInObject (uae_u8 *objectptr)
offset = *(text_hdr + 19); offset = *(text_hdr + 19);
return (uae_u32)(objectptr + offset); return (uae_u32)(objectptr + offset);
} }
#endif
return 0; return 0;
} }